Contents:
See http://sw-amt.ws/README-Satoku.html for an explanation of the satoku matrix.
To get started, put xemacs-fsf-compat.el somewhere in your load-path, then load satoku.el:
Press C-x C-e at end of the following expression:
(load-file "satoku.el")
or press:
`M-x load-file RET satoku.el RET'
Then execute the command satoku-insert-matrix:
`M-x satoku-insert-matrix RET'
Which will give you a Satoku matrix with a single clause sub-matrix:
// | || S|| 0| 0|| 1 1 1 |
// +----++----++---+----++-------+
// +-----+----++---+----++-------+
// | | 0|| | || 1 * * |
// | | 1|| | || * 1 * |
// | | 2|| | || * * 1 |
// +-----+----++---+----++-------+
// |:info:| move point inside and press `C-u M-x satoku-mode RET'
Position point somewhere inside the matrix and execute:
`C-u M-x satoku-mode RET'
This constrains your cursor movements to the matrix and assigns special commands to certain keys. (Note: Outside the matrix, the keys work as usual).
Press ? for help.
Some commands are prefix commands (e.g. g). Press ? after the prefix command to get help.
To extend the matrix with another 3x3 clause sub-matrix, press:
`C-u 3 > >'
// | || S|| 0| 0|| 1 1 1 | 1 1 1 |
// +----++----++---+----++-------+-------+
// +-----+----++---+----++-------+-------+
// | | 0|| | || 1 * * | _ _ _ |
// | | 1|| | || * 1 * | _ _ _ |
// | | 2|| | || * * 1 | _ _ _ |
// +-----+----++---+----++-------+-------+
// | | 3|| | || _ _ _ | 1 * * |
// | | 4|| | || _ _ _ | * 1 * |
// | | 5|| | || _ _ _ | * * 1 |
// +-----+----++---+----++-------+-------+
// |:info:| move point inside and press `C-u M-x satoku-mode RET'
Press > > to get a separator line:
// | || S|| 0| 0|| 1 1 1 | 1 1 1 ||
// +----++----++---+----++-------+-------++
// +-----+----++---+----++-------+-------++
// | | 0|| | || 1 * * | _ _ _ ||
// | | 1|| | || * 1 * | _ _ _ ||
// | | 2|| | || * * 1 | _ _ _ ||
// +-----+----++---+----++-------+-------++
// | | 3|| | || _ _ _ | 1 * * ||
// | | 4|| | || _ _ _ | * 1 * ||
// | | 5|| | || _ _ _ | * * 1 ||
// +-----+----++---+----++-------+-------++
// +-----+----++---+----++-------+-------++
// |:info:| move point inside and press `C-u M-x satoku-mode RET'
Press C-u 2 > > to get a 2x2 clause sub-matrix, repeat, and repeat again (hint: you can use keyboard macros).
Normal keys are disabled inside the matrix (but not the legend), use 0 to mark selection conflicts, - to clear a cell. (Mirror cells are automatically changed accordingly.)
Do not use 1 to mark required selections. Exclude all other selections with 0 instead:
// | || S|| 0| 0|| 1 1 1 | 1 1 1 || 1 1 | 1 1 | 1 1 |
// +----++----++---+----++-------+-------++-----+-----+-----+
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 0|| | || 1 * * | 0 _ _ || _ 0 | _ _ | _ _ |
// | | 1|| | || * 1 * | _ _ 0 || _ _ | _ _ | _ _ |
// | | 2|| | || * * 1 | _ _ 0 || _ _ | _ _ | _ _ |
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 3|| | || 0 _ _ | 1 * * || 0 _ | _ _ | _ _ |
// | | 4|| | || _ _ _ | * 1 * || _ _ | _ _ | _ _ |
// | | 5|| | || _ 0 0 | * * 1 || _ _ | _ _ | _ _ |
// +-----+----++---+----++-------+-------++-----+-----+-----+
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 6|| | || _ _ _ | 0 _ _ || 1 * | _ _ | _ _ | a
// | | 7|| | || 0 _ _ | _ _ _ || * 1 | _ _ | _ _ | ¬a
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 8|| | || _ _ _ | _ _ _ || _ _ | 1 * | _ _ | b
// | | 9|| | || _ _ _ | _ _ _ || _ _ | * 1 | _ _ | ¬b
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 10|| | || _ _ _ | _ _ _ || _ _ | _ _ | 1 * | c
// | | 11|| | || _ _ _ | _ _ _ || _ _ | _ _ | * 1 | ¬c
// +-----+----++---+----++-------+-------++-----+-----+-----+
// |:info:| move point inside and press `C-u M-x satoku-mode RET'
Then press r u to run the requirements update algorithm, which detects and fills in the hard one requirements.
If you did use 1 and are no longer sure, whether the matrix conditions are proper, press r c to clear all hard one requirements. Then press r u to run the requirements update algorithm.
// | || S|| 0| 0|| 1 1 1 | 1 1 1 || 1 1 | 1 1 | 1 1 |
// +----++----++---+----++-------+-------++-----+-----+-----+
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 0|| | || 1 * * | 0 _ _ || 1 0 | _ _ | _ _ |
// | | 1|| | || * 1 * | _ _ 0 || _ _ | _ _ | _ _ |
// | | 2|| | || * * 1 | _ _ 0 || _ _ | _ _ | _ _ |
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 3|| | || 0 _ _ | 1 * * || 0 1 | _ _ | _ _ |
// | | 4|| | || _ _ _ | * 1 * || _ _ | _ _ | _ _ |
// | | 5|| | || 1 0 0 | * * 1 || 1 0 | _ _ | _ _ |
// +-----+----++---+----++-------+-------++-----+-----+-----+
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 6|| | || _ _ _ | 0 _ _ || 1 * | _ _ | _ _ | a
// | | 7|| | || 0 _ _ | _ _ 0 || * 1 | _ _ | _ _ | ¬a
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 8|| | || _ _ _ | _ _ _ || _ _ | 1 * | _ _ | b
// | | 9|| | || _ _ _ | _ _ _ || _ _ | * 1 | _ _ | ¬b
// +-----+----++---+----++-------+-------++-----+-----+-----+
// | | 10|| | || _ _ _ | _ _ _ || _ _ | _ _ | 1 * | c
// | | 11|| | || _ _ _ | _ _ _ || _ _ | _ _ | * 1 | ¬c
// +-----+----++---+----++-------+-------++-----+-----+-----+
// |:info:| move point inside and press `C-u M-x satoku-mode RET'
Copyright
Copyright (C) 2013, Wolfgang Scherer, <Wolfgang.Scherer@gmx.de>. See the document source for conditions of use under the GNU Free Documentation License.