Hi Steve,
SteveG48 wrote:Option 1.
It's indeed the cleanest variant. For better or worse, in this case it could be shortened, and the redundancy hidden a bit too:
(3)r7c8 = (365)b7p217 - r6c1 = ((5,7)r6c71 & [7r6c1 - r6c6 = 7r5c6]) - (5)r2c7|(5|7)r5c8 = (58)r25c8 => -58 r7c8; stte
The other two valid options ('§' and '!') avoid the redundancy even better, but they're probably harder to understand (especially the '§' option, but I don't recommend that anyway). All three are perfectly valid AICs as is -- no "preprocessing" needed -- so there's no need to forbid or to force-feed any of them (edit: on second thought, I don't think the '§' variant should be used unless I find cures for its flaws). Of course the '§' and '!' symbols need to be understood, but they can also be freely replaced with 'T' and 'F' or even 'TRUE' and 'FALSE' if one wants (obviously not '1' and '0', though).
In any case, I'm glad I found a symmetric (though a bit flawed) way to use the TRUE constant at last, even if it might have little practical use. It was bothering me, as I knew it had to be an option too. What do you think of the '§' symbol for it? I haven't seen any other common sudoku meanings for it, and I guess a legal symbol can be associated with
the truth (or at least it should be).
I'm probably partial to the '!' option because it was the first one I came up with, and because that syntax has other uses too.
As for the last '+' option, I need to do some further thinking and testing with it (and the mirrored '-' option, too). My opinions about it seem too volatile at the moment to draw any final conclusions. I'll get back to it later.
--
Later. To summarize the current situation, we now have basically five valid ways to write the logic with an embedded chain fragment, but I'm not happy with two of them because they both fail to show some relevant links explicitly.
1) The baseline:
(3)r7c8 = (365)b7p217 - r6c1 = (5r6c7 & 7r6c1 & [7r6c1 - r6c6 = 7r5c6]) - (5)r2c7|(5|7)r5c8 = (58)r25c8 => -58 r7c8; stte
That doesn't have any big weaknesses, except for the redundancy and the resulting extra length. Both of them can be annoying in more complicated cases, but perhaps this notation shouldn't be used then at all. So, this is always a decent option, perhaps even the best. However, one additional weakness is that the embedded chain fragment is of the form (a - b = c) which is not a normal nested AIC with strong links at both ends, making the logic less intuitive to understand (for some, at least).
2) The FALSE-constant (!) option:
(3)r7c8 = (365)b7p217 - r6c1 = (5r6c7 & [(!=7)r6c1 - r6c6 = 7r5c6]) - (5)r2c7|(5|7)r5c8 = (58)r25c8 => -58 r7c8; stte
That has few weaknesses too, except for the slightly less clean syntax. It's shorter by avoiding the redundancy, has all the relevant links, and the notation is perfectly standard and valid -- except for the need to know the meaning of '!' (or whatever symbol or text is used to depict the FALSE-constant). Furthermore, the embedded chain is now a normal nested AIC with strong links at both ends (though one end happens to be FALSE, forcing the other end to be TRUE), which should make the interpretation quite intuitive (for some, at least). For those reasons, I still probably prefer this one overall.
3) The '+' option:
(3)r7c8 = (365)b7p217 - r6c1 = (5r6c7 & [+7r6c1 - r6c6 = 7r5c6]) - (5)r2c7|(5|7)r5c8 = (58)r25c8 => -58 r7c8; stte
That is basically a shorthand for the '!'-option. As in that, 7r6c1 is assumed true (just more directly) which forces 7r5c6 true as well. All relevant links are present, perhaps even more clearly than in option 2. The other upsides are shortness and relative cleanness. The main downside is the non-standard (but hopefully relatively intuitive) meaning of the '+' as an assumptive symbol. Another is that it's a bit more awkward to write backwards, as either the '+' gets next to a weak link (- +7r6c1) or otherwise it has to be written to the other side of the node (- 7r6c1+). Neither looks very good. It also has the less intuitive (+a - b = c) form, but on the other hand, a correct interpretation of the '+a' should make it easy to understand. The jury is still out whether I like this option or not.
4) The TRUE-constant (§) option:
(3)r7c8 = (365)b7p217 - r6c1 = (5r6c7 & 7r6c1 & [(§-7)r6c6 = 7r5c6]) - (5)r2c7|(5|7)r5c8 = (58)r25c8 => -58 r7c8; stte
That is the second newest option. It's basically a shorthand for option 1, with the second instance of 7r6c1 replaced with the §-symbol. It has few upsides, except for the shorter form. Its main purpose is to be a proof of concept (of how to use the TRUE-constant) and a symmetric partner to the FALSE-constant option. A major downside is that it's probably harder to understand than any of the previous options. Also, the chain is of the form (a - b = c), though since 'a' is TRUE, it should be easy to understand (as long as one knows the meaning of '§').
Worst of all, however, it doesn't depict the weak link 7r6c1-7r6c6 directly at all, nor does the strong link between 5r6c1 and the chain fragment work directly. In fact, the ANDed 7r6c1 is irrelevant for the logic, and it's just written there to explain the following (§-7)r6c6. It would work logically just as well without it, but it would be even harder to understand:
(3)r7c8 = (365)b7p217 - r6c1 = (5r6c7 & [(§-7)r6c6 = 7r5c6]) - (5)r2c7|(5|7)r5c8 = (58)r25c8 => -58 r7c8; stte
I wouldn't use this second option at all. It's borderline ambiguous because it basically skips a step, and the links aren't fully explained. However, since it's technically equivalent to the first form, it also means the same flaws are present in that (just less obvious because of the superfluous 7r6c1). Thus, I wouldn't use either, at least until those problems have been solved.
5) The '-' option:
(3)r7c8 = (365)b7p217 - r6c1 = (5r6c7 & 7r6c1 & [-7r6c6 = 7r5c6]) - (5)r2c7|(5|7)r5c8 = (58)r25c8 => -58 r7c8; stte
Just like the '+' option was a shorthand for the '!' option, this is a shorthand for the '§' option. As such, it's the latest addition to the family, and for the same reasons as its parent -- it's just for a proof of concept and for symmetry. It has all the same downsides as the '§' option, including the missing direct links, so I can't recommend using it (at least for this case, and like this).
However, it has a bit of an advantage over the corresponding '+' option, because the use of the '-' for NOT is more standard (though rarely used in AICs, where the symbol is almost exclusively used for weak links). Thus the notation itself should need no extra explanations, even though the strong link [-7r6c6 = 7r5c6] might seem weird or even incorrect at first. It's actually perfectly fine. It does exactly the same as all the other forms did in different ways: forces 7r5c6 to be true (when read from the left) or causes a contradiction (when read from the right). Then again, it could be written (-7r6c6|7r5c6) or just 7r5c6, so there's no need for any embedded chain at all. Thus, at least in this particular case, this form makes little sense.
--
Conclusion.
Options 1,2,3 are all good, as far as I'm concerned. 1 has the most standard (yet the most verbose) syntax, 2 is shorter and not much less standard, 3 is the shortest but the least standard. 2 is probably my favorite, but I'll probably experiment with them all.
At this point I don't see any practical use for options 4 and 5, though I might investigate their potential more.
One thing is for sure, though. This form is an invalid AIC (no matter what anyone might claim):
(3)r7c8 = (365)b7p217 - r6c1 = (5r6c7 & [7r6c1 - r6c6 = 7r5c6]) - (5)r2c7|(5|7)r5c8 = (58)r25c8 => -58 r7c8; stte
(Different kinds of brackets won't make any difference, unless they're used as a mark-up for a "preprocessor" that maps it into one of the valid forms. {} has been suggested for that purpose, but I don't see any real need for that here, as the valid forms are short enough on their own. There's no need to complicate things any further. Just use any of the valid options 1-3 and you're fine.)