Comparison with prior version

Previously, using an older version of shrinkPat, it worked out more smoothly, as shown below; so the listing above [at this page] is rather longer [not anymore] and raises some questions I don't yet have answers for, but the net result is the same, and the comments following [at that link] are all still valid.

(Actually, the numbers have not worked out quite this way for a long time anyway; this portays results from pre-published versions...).

Seeing these side-by-side (as it were...) is giving me a whistful feeling about the old pattern syntax. Fortunately, whether to use braces or parens, and whether to use !/. or ./#, are still options available through the deepseq-bounded package flags.

                                       live      alloc  type
  P  .                               457296    3341600    TA
  P  {...}                           698872    5220200    TA
  P  {{...}..}                       954252    6063164    TA
  P  {{..{.}}..}                    1243156    6572740    TA
  P  {{..{{.#..}}}.{..}}            1452016    8829248    TA
  P  {{.{.}{{{.}#.{.}}}}.{.{.}}}     319744   10577588    TA
  P  {{.{.}{{{.}#.{.}}}}.{.{.}}}     159284    8870360    TA
  P  {{.{.}{{{.}#.{.}}}}.{.{.}}}     150004    8826904    TA
  P  {{.{.}{{{.}#.{.}}}}.{.{.}}}     190012    8748076    TA
  P  {{.{.}{{{.}#.{.}}}}.{.{.}}}     128232    8867404    TA
And with the new concrete syntax, but same old shrinkPat used:
                                       live      alloc  type
  P  !                               457296    3341600    TA
  P  (!!!)                           698872    5220200    TA
  P  ((!!!)!!)                       954252    6063164    TA
  P  ((!!(!))!!)                    1243156    6572740    TA
  P  ((!!((!.!!)))!(!!))            1452016    8829248    TA
  P  ((!(!)(((!).!(!))))!(!(!)))     319744   10577588    TA
  P  ((!(!)(((!).!(!))))!(!(!)))     159284    8870360    TA
  P  ((!(!)(((!).!(!))))!(!(!)))     150004    8826904    TA
  P  ((!(!)(((!).!(!))))!(!(!)))     190012    8748076    TA
  P  ((!(!)(((!).!(!))))!(!(!)))     128232    8867404    TA
This seems like a usability regression, but the truth is, this is an extreme case, and normally '!' characters will be infrequent, and '.' characters (which do no forcing) will typically predominate amongst leaves of a pattern. Still, if going to prefer parens to braces, might like to reconsider '!' as it is visually too similar to a parenthesis. Some of these issues can be resolved by adding whitespace within the pattern strings (which is permitted). Also, much depends on fonts, and if colour of even greyscale is available this may be a non-issue.

In fact, to show how beneficial vertical alignment is to the human perception, let's see the new output (more interesting initial sequence) with padding added by hand:

 P  .                                  232448    1776868  TA
 P  (                         )        302720    1719280  TA
 P  (.                 ..     )        372968    3057960  TA
 P  ((                )..     )        442528    3579160  TA
 P  ((..  .           )..     )        507104    4907900  TA
 P  ((..  ()          )..     )        579448    5364696  TA
 P  ((..  (.)         )..     )        640096    5853972  TA
 P  ((..  (()        )).(    ))        739964    6867304  TA
 P  ((..  ((.  ...  ))).(..  ))        833820    9551912  TA
 P  ((.() ((() ..() ))).(.() ))        918912    9564540  TA
 P  ((.(.)(((.)..(.)))).(.(.)))       1006188   11230432  TA
 P  ((!(!)(((!).!(!))))!(!(!)))        204624   14250596  TA
At which point I notice that shrinkPat is wrong... Anyway, does that even help much? It seems like a person wants more than ASCII graphics to cope with this...

Correct sequence for shrinkPat should be like (for example):

     (.(!))           (!(!))          (!(.!))
     (.(.))           (.(.))          (.(..))
     (.!)      or     (.!)      or    (.!)
     (..)             (..)            (..)
     !                !               !
     .                .               .
And certainly, you don't produce ()'s!

After fixing that:

 P  .                                227756    1769792    TA
 P  (.                 ..     )      296620    3060904    TA
 P  ((..  .           )..     )      360508    4908612    TA
 P  ((..  (.         ))..     )      421472    5852124    TA
 P  ((..  ((.  ...  ))).(..  ))      521860    9556760    TA
 P  ((.(.)(((.)..(.)))).(.(.)))      607100   11270660    TA
 P  ((!(!)(((!).!(!))))!(!(!)))     1925776    2392040    TA

What the heck, I'll paste that above, although it is hand-padded...

And here's what had in main document before the shrinkPat fix, as I don't have the heart to delete it yet. :)

                                       live      alloc    type
 P  .                                  232448    1776868    TA
 P  ()                                 302720    1719280    TA
 P  (...)                              372968    3057960    TA
 P  (()..)                             442528    3579160    TA
 P  ((...)..)                          507104    4907900    TA
 P  ((..())..)                         579448    5364696    TA
 P  ((..(.))..)                        640096    5853972    TA
 P  ((..(())).())                      739964    6867304    TA
 P  ((..((....))).(..))                833820    9551912    TA
 P  ((.()((()..()))).(.()))            918912    9564540    TA
*
 P  ((.(.)(((.)..(.)))).(.(.)))       1006188   11230432    TA
 P  ((!(!)(((!).!(!))))!(!(!)))        204624   14250596    TA
 P  ((!(!)(((!).!(!))))!(!(!)))        208800   11236580    TA
 P  ((!(!)(((!).!(!))))!(!(!)))        213112   11242000    TA
 P  ((!(!)(((!).!(!))))!(!(!)))        217436   11353868    TA
 P  ((!(!)(((!).!(!))))!(!(!)))        221852   11250772    TA
 P  ((!(!)(((!).!(!))))!(!(!)))        126192   11275044    TA
 P  ((!(!)(((!).!(!))))!(!(!)))        130876   11131820    TA
* 8 lines cut; exact output depends on seed chosen etc.