|
From: Richard S. <ri...@ex...> - 2009-05-05 17:04:41
|
Don Morrison wrote:
>> p,s,s,b,b, repeat(p, {/23458967/: break})
>
> While noting the course end is the conventional way, or at least the
> old fashioned convention, for indicating how long a course is, the
> more I think about it the more I think it is A Bad Idea.
>
> a) My experience with dealing with submissions of peal compositions
> and so on is that the single most common error is to cite an incorrect
> course end. If we depended upon a course end for the definition of a
> composition this would make it exceedingly fragile.
This is a fair point. However I'm not saying that as a
matter of course we should write out the course heads in
full like this; I'm merely wondering whether it would be a
useful fallback position if we could do that so that we can
handle the odd course that doesn't really fit the rules.
Most of the time I expect a consistent course end rule like
repeat(p, {/[234][234][234]*/: break})
would be sufficient.
> b) It's not really unique. It is perfectly legal (in the sense of not
> contravening any CC Decisions) to have, in an MEB, a chunk that goes
> through the same change two or more times without an intervening call.
GSiril permits several approaches to this. The simplest way
is simply to repeat the rule that takes you to the course
end:
3 repeat(p, {/*8/: break})
That will only stop after the third lead end with 8 at the
back. There might be circumstances in which a more
complicated approach is needed, and then GSiril allows you
to write:
n=0, repeat(p, {/*8/ && ++n==3 : break})
> Depending upon a particular course head in the face of this is
> ambiguous. Granted, it's not something I'd personally want to do, and
> is unlikely to come up often in practice, but it is a potential
> problem. And I believe an extreme example of exactly such a
> construction has been rung at least once.
>
> I continue to think the better solution is to specify, when necessary,
> how many leads a course is.
And that's also fine. If you want to do that then the right
approach is probably:
p,s,s,b,b,6p
What I'm suggesting really is that the underlying framework
should allow any of these approaches. (I'm not advocating
support for all of the more complicated bits of GSiril; as
I've said before, I'm just using GSiril as a means of
experimenting with the fundamental building blocks and
determining what they are.)
>> W = repeat( { b, /*8?/: b, break; p } )
>>
>> Repeat repeats its argument indefinitely until it is
>> terminate. This can either be with a break (a controlled
>> exit that'll continue proof from the thing following the
>> repeat block), or an abort (which halts proof). The default
>> rule for 'false' (which is implicitly invoked when the
>> composition becomes false, for what ever definition of false
>> is currently in force) calls this.
>
> I am troubled by this "repeat until false" business.
OK. I've not done a good job of explaining this. I think
we're getting confused between what GSiril does because it
is a peal proving program intended to be compatible with
Siril, and what we want from the compositions database.
In GSiril a repeat block can be terminated in two ways: a
break or an abort. The repeat-break mechanism is important
as it is the only way of doing repetition without
hard-coding the number of iterations required. I think the
peals database will need something like that, however we
choose to dress it up. By contrast, the repeat-abort
mechanism is important to GSiril as a proving program
because it allows you to abort a prove when it runs false.
I completely agree that that we don't want an idea of truth
in the peals database.
The only actions that GSiril does that depend on its idea(s)
of truth are governed by the true, notround, false and
conflict symbols (which is the same as Siril); unset these,
and GSiril never acts on truth. This is the behaviour we
want from the peals database.
And without the conflict symbol (I was mistaken when I said
it was the false symbol that invoked abort), there's no
obvious reason to support the repeat-abort mechanism.
Unless we use it to handle the case of a composition that
seems to be stuck in a infinite loop. (E.g. call a Wrong,
and then repeated Homes until it comes round.)
> 1) Viewing GSiril simply as a proving platform, it falls into a trap
> that I think is unfortunate, though common. It causes the thing to
> stop, or at least become useless, at the first false row. It can
> really be helpful to the end user to have a broader presentation of
> where a composition runs false. For example, if you see just a
> handfull of rows, all with the treble in 6ths, are false against one
> another it leads you to consider the root cause as different than if
> you see 32 consecutive rows are false against exactly the same 32 rows
> also appearing consecutively somewhere else!
In my experience, most proving programs allow this behaviour
to be configured. Certainly Microsiril, Sirilic and GSiril
all do. In all three, by default, conflict is defined:
conflict = "# rows ending in @",
"Touch not completed due to false row$$"
The $$ in a string aborts the search. However, if you
change this to
conflict = "False row: @"
then any of these peal proving programs will print a list of
false rows followed by
5040 rows ending in 13256478
Touch is false in 32 rows
And I'm sure there's scope for doing more with the conflict
symbol too.
> 2) I don't think a particular notion of "true" has any place in our definition
> of a composition for storage in the database. As discussed earlier, I
> think a composition should be some sequence of changes, structured in
> some appropriate way, but that how it stacks up against various
> definitions of truth should be something determined externally
> (though, perhaps cached in the database), on the same footing as how
> many little bell rollups it contains, whether it contains back stroke
> tenor reversals, whether or not it contains an equal number of plains,
> bobs and singles, or whether or not it is all the work.
I completely agree.
RAS
|