Perpetual chasing in Xiangqi

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

User avatar
hgm
Posts: 27787
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: A method to implement Asian rule

Post by hgm »

phhnguyen wrote:- Subtract(list1, list2): remove from list 1 all items which are also in the list 2. This function is used to remove all static attacks which have the same attacker-victim-beProtected.
I think you would have to remove all those triples from list 1 which have a beProtected that is _better_ or equal in list 1 than list 2, not just equal (when the other two are equal). If in list 1 (after the move) the victim is protected, it is not a chase, even if before the move, or after the evasion it is unprotected. Of course you could do that afterwards, by running through the loop again after you have restricted the number of potentially chased pieces, but when you have the beProtected information available on every move, it is more efficient to do it immediately. I guess you could decide to even not put protected pieces in the list after the chasing move.

I also think that you should make the exception of C and H attacks on R straight away. If a static attack of C on R exists, but the R is periodically protected and unprotected, I don't think it should be chase. Protecting a Rook should not count as escaping a H or C attack, and subverting the protection of an already attacked (by C or H) Rook should not count as making a chase. So I think it would be better to use a variabel 'beChased' as the third member of the triplet, rather than 'beProtected', which would not only take account of the protected status, but take immediate account of the CxR, HxR cases on the one hand, and PxAny, KxAny on the other hand. And of the cases RxR, HxH and CxC where a pre-emptive capture is possible. That would save a lot of effort, because you would not have to figure out if the piece is protected in any of these special cases, while testing for the cases is very cheap. (Even in case of the pre-emptive capture between equals, you at least know which piece has to make the capture, making it much cheaper than a test for protection, where you have to search for a protector.)

The in-check case is very tricky. I agree that counting all the pieces of the side that is in check as unprotected leads to counter-intuitive rulings. But I think you are over-doing it by defining them all as protected (when a pseudo-legal recapture exists). It looks very unnatural to count a false protector, that could not really recapture before the check because it was pinned, as a true protector during the check, when it is still pinned. If you really want to treat the in-check case special, I think the furthest yo should go is make a distinction between pseudo-legal recaptures that are illegal because they did not resolve the _existing_ check, and pseudo-legal recaptures that (apart from resolving the existing check or not) create a _new_ check on their own King.

Question: if the back rank looks like

. . . . k . C . c

and white now plays a second Cannon to that rank, attacking both the black King and Cannon:

. . . . k . C C c

Would you want to count this as a chase on the black Cannon? If this situation was not a check (i.e. if the black King was elsewhere), the new attack on the black C would not be considered chase, despite the fact that it is unprotected, because it protects itself by 'self-defence', pre-emptively capturing its attacker. But in the given situation it cannot do that, because it would not resolve the existing check. But if you would not require solving the existing check for a recapture, why would you require it for this self-defence? A complication here is that if the black Cannon is protected by another piece, the recapture would actually be legal despite of the check, because the capture itself resolves the check!

The philosophy of not paying attention to the existing check is based on the idea that before white can actually capture, black must have resolved the check somehow, so he would indeed be free to recapture. But this is very tricky reasoning: it all depends on how black will resolve the check. It could for instnce be that the only way to resolve the check automatically unprotects the piece:

Code: Select all

. . . . k . e . . (before)
r . . . . . h C R

. . . . k . e C . (after)
r . . . . . h . R
In the 'after' position the black Horse is 'pseudo-protected' by the Rook: if white would play RxH in this position then the RxR recapture does not solve the existing check, but we allowed that. But of course in reality black has to move away his King, and the only escape is to e8. So we get:

Code: Select all

. . . . . . e C . (after evasion)
r . . . k . h . R
Now the Horse is not protected at all. (You can replace the C by R, and remove the E, to allow it to move back and forth these two locations without perpetually checking, the two Rooks alternately creating a new attack on the Horse. So how reasonable is it to count this Horse as protected during the check? This really opens up a can of worms...
User avatar
phhnguyen
Posts: 1434
Joined: Wed Apr 21, 2010 4:58 am
Location: Australia
Full name: Nguyen Hong Pham

Re: A method to implement Asian rule

Post by phhnguyen »

hgm wrote:
I think you would have to remove all those triples from list 1 which have a beProtected that is _better_ or equal in list 1 than list 2, not just equal (when the other two are equal). If in list 1 (after the move) the victim is protected, it is not a chase, even if before the move, or after the evasion it is unprotected. Of course you could do that afterwards, by running through the loop again after you have restricted the number of potentially chased pieces, but when you have the beProtected information available on every move, it is more efficient to do it immediately. I guess you could decide to even not put protected pieces in the list after the chasing move.

I also think that you should make the exception of C and H attacks on R straight away. If a static attack of C on R exists, but the R is periodically protected and unprotected, I don't think it should be chase. Protecting a Rook should not count as escaping a H or C attack, and subverting the protection of an already attacked (by C or H) Rook should not count as making a chase. So I think it would be better to use a variabel 'beChased' as the third member of the triplet, rather than 'beProtected', which would not only take account of the protected status, but take immediate account of the CxR, HxR cases on the one hand, and PxAny, KxAny on the other hand. And of the cases RxR, HxH and CxC where a pre-emptive capture is possible. That would save a lot of effort, because you would not have to figure out if the piece is protected in any of these special cases, while testing for the cases is very cheap. (Even in case of the pre-emptive capture between equals, you at least know which piece has to make the capture, making it much cheaper than a test for protection, where you have to search for a protector.)
I have found a solution now which we don't have to have any exception case. It can solve all cases of Asian rule as well as all real games I have.

As I have mentioned in the previous post, if we count Cannon in the protection pattern Cannon - Mount - Attacker - Victim as the protector for Victim, we will solve almost all cases of Asian rule, plus all appdix cases, but fail in games with round 39, 40, 41 and 61.

However, after reviewing them all and think carefully, I see the solution is very simple because they all are the same pattern: both sides chase (mutual chases) but one chases Rook. Thus in the step 4 (Identify legal chases) I will score the chase, if any one chase Rook will be worst than one chases others and will be lost the game.
The in-check case is very tricky. I agree that counting all the pieces of the side that is in check as unprotected leads to counter-intuitive rulings. But I think you are over-doing it by defining them all as protected (when a pseudo-legal recapture exists). It looks very unnatural to count a false protector, that could not really recapture before the check because it was pinned, as a true protector during the check, when it is still pinned. If you really want to treat the in-check case special, I think the furthest yo should go is make a distinction between pseudo-legal recaptures that are illegal because they did not resolve the _existing_ check, and pseudo-legal recaptures that (apart from resolving the existing check or not) create a _new_ check on their own King.
I agree that is very tricky and this point is still one of my worries. The main reason here when one side is in check, all protections would drop dramatically, make the subtract operator works wrongly.

Computing protection in this situation is tricky and not free. So I make an improvement as the following:

Instead of using a boolean variable beProtected, we will use an integer variable protectedStatus. It will have three values: PROTECTED_NO, PROTECTED_YES, PROTECTED_INCHECK.

When computing, if the side of computing is in check, simply set protectedStatus = PROTECTED_INCHECK; otherwise we will check if there any legal protection, set it to PROTECTED_YES, otherwise to PROTECTED_NO

When comparing those variables, the status PROTECTED_INCHECK can be matched with both PROTECTED_NO and PROTECTED_YES

Code: Select all

isEqual = a.protectedStatus == b.protectedStatus || a.protectedStatus == PROTECTED_INCHECK || b.protectedStatus == PROTECTED_INCHECK;
Question: if the back rank looks like

. . . . k . C . c

and white now plays a second Cannon to that rank, attacking both the black King and Cannon:

. . . . k . C C c

Would you want to count this as a chase on the black Cannon? If this situation was not a check (i.e. if the black King was elsewhere), the new attack on the black C would not be considered chase, despite the fact that it is unprotected, because it protects itself by 'self-defence', pre-emptively capturing its attacker. But in the given situation it cannot do that, because it would not resolve the existing check. But if you would not require solving the existing check for a recapture, why would you require it for this self-defence? A complication here is that if the black Cannon is protected by another piece, the recapture would actually be legal despite of the check, because the capture itself resolves the check!

The philosophy of not paying attention to the existing check is based on the idea that before white can actually capture, black must have resolved the check somehow, so he would indeed be free to recapture. But this is very tricky reasoning: it all depends on how black will resolve the check. It could for instnce be that the only way to resolve the check automatically unprotects the piece:

Code: Select all

. . . . k . e . . (before)
r . . . . . h C R

. . . . k . e C . (after)
r . . . . . h . R
In the 'after' position the black Horse is 'pseudo-protected' by the Rook: if white would play RxH in this position then the RxR recapture does not solve the existing check, but we allowed that. But of course in reality black has to move away his King, and the only escape is to e8. So we get:

Code: Select all

. . . . . . e C . (after evasion)
r . . . k . h . R
Now the Horse is not protected at all. (You can replace the C by R, and remove the E, to allow it to move back and forth these two locations without perpetually checking, the two Rooks alternately creating a new attack on the Horse. So how reasonable is it to count this Horse as protected during the check? This really opens up a can of worms...
Can you create a full game for your example? Because my algorithm works considering moves of both sides so it is hard to say when we have only positions. Thanks you.

/Pham

PS:
- I know that my algorithm is very expensive, but I focus about the correctness first and then clearness / easiness for all others to understand and implement. (Remember that we need a wide agreement of understanding/implementing rule first). It may be expensive for engines but not really problem for your WinBoard nor my Xiangqi chess server which I have been building. There is a lot of room to optimize it but I will start only after implementing correctly and then get enough data from real battles of engines.
- I still have been implementing the new idea (score chases) and checking all games. After completing, I will rewrite algorithm and give some illustrations for other "tricky" cases.
User avatar
hgm
Posts: 27787
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: A method to implement Asian rule

Post by hgm »

phhnguyen wrote:[However, after reviewing them all and think carefully, I see the solution is very simple because they all are the same pattern: both sides chase (mutual chases) but one chases Rook. Thus in the step 4 (Identify legal chases) I will score the chase, if any one chase Rook will be worst than one chases others and will be lost the game.
Well, let's discuss this point first:

I don't think this is correct in Asia rule. Diagram 48 states that if one side chases a Rook, and the other a Horse, it is draw.

What the mentioned positions have in common is not merely that one side chases a Rook. It is that the side who chases the Rook protects the piece attacked by this same Rook at the same time (because it attacks the Rook 'from behind'), so that resolving the attack on the Rook _automatically_ subverts the protection as well.

A wider generalization would say that one side is chasing by direct attack, the other chasing by subversion of the protection.
User avatar
phhnguyen
Posts: 1434
Joined: Wed Apr 21, 2010 4:58 am
Location: Australia
Full name: Nguyen Hong Pham

Re: A method to implement Asian rule

Post by phhnguyen »

hgm wrote: Well, let's discuss this point first:

I don't think this is correct in Asia rule. Diagram 48 states that if one side chases a Rook, and the other a Horse, it is draw.

What the mentioned positions have in common is not merely that one side chases a Rook. It is that the side who chases the Rook protects the piece attacked by this same Rook at the same time (because it attacks the Rook 'from behind'), so that resolving the attack on the Rook _automatically_ subverts the protection as well.

A wider generalization would say that one side is chasing by direct attack, the other chasing by subversion of the protection.
You are right, I have seen the problem but solved it anyways by introducing "fair Rook chase". Additionally, I have understand deeply some "hidden" ideas of Asian rule which I believe its editors did not say clearly.

When starting checking a chaseList, if it is not empty, we score (chaseScore) it as 1 (normal chase). After checking some allowed chases such as Pawn, King chase, we will check if there any chased Rook by any less value pieces (such as Horse, Cannon, Elephant...), if there is, we will check if the attacker (Horse, Cannon...) can be chased back too by the side of that chased Rook in the next move (it is cheap computing if we store all chase lists for each move). If yes, both attacker-victim are chasing each others - that is a fair or equal chase, we will set that chase score to 1, which may lead to draw later. If no, it is not a fair chase when the victim has no chance to attack back the attacker, I will increase the chase score to 2 (the worst chase) which may lead to lose the game later.

BTW, I have just implemented the new algorithm and checked with all games. I am very happy to say that all example games of Asian rule are passed successfully. All real games (mainly from your collection) are passed successfully too (of course we have some different results but I have reviewed them all and adjusted to more reasonable results IMO).

/Pham
User avatar
hgm
Posts: 27787
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: A method to implement Asian rule

Post by hgm »

Somehow this disturbs me very much. I don't understand exactly what this "chase score" is meaning, and how you use it. But it seems to me that you are making up extra rules here. It is a good thing that you can get all examples, including the appendix, correctly. But if you can do it ony by inventing extra rules that were not hinted at in the text, it is not at all sure that someone else, inventing another extra rule, can also get all the examples correct, and yet make different rulings on some cases that are not in the examples.

I have suggested already two different sets of rules that would get all examples (including appendix) right, and do not invoke this principle of "fair chase". They were based on the extra rule

1) Chasing by protection subversion is a smaller offense than chasing by direct attack.
_or_
2) subverting the protection of a piece attacked by a Rook through a move that also resolves the attack of the protector on that same Rook is allowed by exception.

I have indicated one case where adoption of (1) or (2) would lead to a different ruling.

Now you add a third extra rule, which, if I understand you correctly, is not equivalent to either of these two (as you don't even mention subversion of protection in it). So there should be cases where your algorithm produces different rulings than either my (1) or (2).

Now I think which is the correct interpretation of Asia rule cannot be decided just by the two of us. We would need to consult an expert referee, and put the cases were the proposed rule extensions would each lead to different rulings, and let him decide which ruling is the correct one.

I can add that IMO there is some indication in the written text of Asia rule to suggest that extra rule (2) is the correct one. It is in the wording of
rule 19 wrote:When a Rook cannot move because of an opponent's Knight, the Rook cannot be perpetually chased, regardless of whether the opponent's Knight is protected. (See examples in Diagram 39, 40, and 41)
The phrase I emphasized can be taken to mean that the one who drew up the rule and produced the examples was very much aware of the protection state of the Horse during the loop, and must thus have noted that this protection changes in a way that in other examples leads to a chase verdict. In fact all diagrams share this characteristic, and if it was not for the protection modulation of the Horse, all these cases would not have been worth any additional thought, as this is a plain chase of C on R by moving the mounts. Rule 15 already covered this, even the case of moving mounts to create and resolve the Cannon attack, which are part of the cycle in diagram 24. Rule 19 only adds two new specifications narrowing down the more general scope of rule 15, which is that the Rook is pinned, and the protection of Knight is subverted in a counter-chase. It is not very clear why the fact that the Rook is pinned should be mentioned here, as an attack of C or R is a chase whether the Rook is pinned or not. (It only makes a difference for R on R.)
User avatar
phhnguyen
Posts: 1434
Joined: Wed Apr 21, 2010 4:58 am
Location: Australia
Full name: Nguyen Hong Pham

Re: A method to implement Asian rule

Post by phhnguyen »

hgm wrote:Somehow this disturbs me very much. I don't understand exactly what this "chase score" is meaning, and how you use it.
ChaseScore is score of the level of chase violence. Value 0 means there is no chase. 1 is a normal chase. 2 or highter means worser chase.

Base on chase scores I will create the result of game like the bellow:

Code: Select all

if (chaseScoreW==chaseScoreB) {
 Draw
} else
if &#40;chaseScoreW < chaseScoreB&#41; &#123;
 White wins
&#125; else &#123;
 Black wins
&#125;
I have suggested already two different sets of rules that would get all examples (including appendix) right, and do not invoke this principle of "fair chase". They were based on the extra rule

1) Chasing by protection subversion is a smaller offense than chasing by direct attack.
_or_
2) subverting the protection of a piece attacked by a Rook through a move that also resolves the attack of the protector on that same Rook is allowed by exception.

I have indicated one case where adoption of (1) or (2) would lead to a different ruling.
...

I can add that IMO there is some indication in the written text of Asia rule to suggest that extra rule (2) is the correct one. It is in the wording of
rule 19 wrote:When a Rook cannot move because of an opponent's Knight, the Rook cannot be perpetually chased, regardless of whether the opponent's Knight is protected. (See examples in Diagram 39, 40, and 41)
The phrase I emphasized can be taken to mean that the one who drew up the rule and produced the examples was very much aware of the protection state of the Horse during the loop, and must thus have noted that this protection changes in a way that in other examples leads to a chase verdict. In fact all diagrams share this characteristic, and if it was not for the protection modulation of the Horse, all these cases would not have been worth any additional thought, as this is a plain chase of C on R by moving the mounts. Rule 15 already covered this, even the case of moving mounts to create and resolve the Cannon attack, which are part of the cycle in diagram 24. Rule 19 only adds two new specifications narrowing down the more general scope of rule 15, which is that the Rook is pinned, and the protection of Knight is subverted in a counter-chase. It is not very clear why the fact that the Rook is pinned should be mentioned here, as an attack of C or R is a chase whether the Rook is pinned or not. (It only makes a difference for R on R.)
The problem is that both (1) and (2) can't explain all cases. For example, as I have posted before, the game of rule 26, Diagram 61, we can see that both chase and Rook is not pinned. How can you explain the result 0-1? Will it conflic with the Appendix 3?

The "fair chase for Rook" is not my invention but my inference from studying games:

* The Diagram 48 and Appendix 3 teld me that event a smaller value piece is chasing Rookk, and Rook is also chasing a smaller piece - it is OK (draw) because Rook can chase back dirrectly the attacker.

* Diagrams 39, 40, 41, 61 situations are very similar: a smaller value piece is chasing Rook, and Rook is also chasing a smaller piece. However the side of smaller pieces is lost.

The main difference here is that that Rook doesn't chase back directly the attacker.
But it seems to me that you are making up extra rules here. It is a good thing that you can get all examples, including the appendix, correctly. But if you can do it ony by inventing extra rules that were not hinted at in the text, it is not at all sure that someone else, inventing another extra rule, can also get all the examples correct, and yet make different rulings on some cases that are not in the examples.

Now you add a third extra rule, which, if I understand you correctly, is not equivalent to either of these two (as you don't even mention subversion of protection in it). So there should be cases where your algorithm produces different rulings than either my (1) or (2).

Now I think which is the correct interpretation of Asia rule cannot be decided just by the two of us. We would need to consult an expert referee, and put the cases were the proposed rule extensions would each lead to different rulings, and let him decide which ruling is the correct one.
No, we are not inventing any extra rules, but we are trying to explain all things which Asian rule did not say clearly. So far, I guess that you have to infer, detailize, numberlize a lot of thing which are not mentioned in the clear form in that rule.

I agree that we cannot decide about the correct interpretation and need expert consultation. But I beleave on only the group of editing Asian rule (because any others may have different understanding about "tricky" cases). However, so far I cannot contact / invite any one in that group (can anyone help us?). But before getting help, we can't stop to wait only.

Our understanding and implementation have been not fixed yet. I am always ready to learn and apply the new thing. I think by working and discussing hard together we are having a better understanding and implementation.

BTW, I think in the worst case scenario we may have wrong interpretation about 1 or 2 cases only (mainly Appendix 3) which I did not see in any similar in real games I have. That means we may have no trouble for 99.9% of games. Do you agree?
User avatar
hgm
Posts: 27787
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: A method to implement Asian rule

Post by hgm »

phhnguyen wrote:ChaseScore is score of the level of chase violence. Value 0 means there is no chase. 1 is a normal chase. 2 or highter means worser chase.
OK. Note that my solution (1) also also distinguishes two levels of chase violence. But not based on if you are able to chase back, but if the chase was brought about by direct attack (worse) or subverting the protection (less bad).
The problem is that both (1) and (2) can't explain all cases. For example, as I have posted before, the game of rule 26, Diagram 61, we can see that both chase and Rook is not pinned. How can you explain the result 0-1? Will it conflic with the Appendix 3?
Not so fast! I think both (1) and (2) explain all cases perfectly. In particular diagram 61. The Rook is not pinned, but (1) and (2) did not mention pinning in any way. In 61 the Cannon is chased by a static Rook only through subverting the protection. According to rule (1) that is a lower level of violence than the chase on the Rook, which is by direct attack. So the Rook is ruled to win. And 61 also satisfies the pattern of (2): the subversion of the Cannon protection is done by blocking the same (Cannon) move that also was chasing the Rook that has a static attack on the Cannon.

And I don't think this interferes with any other Asia rules example.
The "fair chase for Rook" is not my invention but my inference from studying games:

* The Diagram 48 and Appendix 3 teld me that event a smaller value piece is chasing Rookk, and Rook is also chasing a smaller piece - it is OK (draw) because Rook can chase back dirrectly the attacker.
Well, it certainly is OK. But the "because" is your interpretation. I would say it is OK because it is mutual chase by direct attack. Protection, or the subversion of it, do not play a role at all in 48. That they _can_ chase back does not play a role. Only that they _do_.
* Diagrams 39, 40, 41, 61 situations are very similar: a smaller value piece is chasing Rook, and Rook is also chasing a smaller piece. However the side of smaller pieces is lost.
In my solution this is not because he is chasing a smaller piece (although that does make it relevant if the piece is protected or not, which when chasing a Rook is not relevant), but because this smallerpiece is only chased by subverting its protection.
No, we are not inventing any extra rules, but we are trying to explain all things which Asian rule did not say clearly. So far, I guess that you have to infer, detailize, numberlize a lot of thing which are not mentioned in the clear form in that rule.
I agree that there are many ambiguities in Asia rules. But if there are different ways to solve them, choosing one of these ways over another must be adding extra rules.
BTW, I think in the worst case scenario we may have wrong interpretation about 1 or 2 cases only (mainly Appendix 3) which I did not see in any similar in real games I have. That means we may have no trouble for 99.9% of games. Do you agree?
Indeed, I agree. Chasing by subversion of protection, which is what the examples 39-41, 61 and Appendix 1 are all about, does not seem to occur in practice. That is why I completely left it out in the current WinBoard implementation. My idea was: "first let them figure it out, and make decent, unambiguous rules, and only then I will bother".

There is one caveat, though: the reason I do not encounter chasing by protection subversion in real engine games, could be caused by the fact that no engine implements this. When I was playing with engines that were not chase protected, I also saw very few chases (1-2%). But when one of the engines is chase-protected, and the other not, about 13% of the games ends in chasing. When both engines think a certain repeat loop is draw, almost always one of the engines will avoid it, because he thinks his position is better. The chances both engines think they are ahead are much larger than that both think they are behind!

So it could be that once we learn an engine he can win when the opponent is chasing by protection subversion, we will see much more of it...

Apart from this matter of protection subversion, I think checks are still a major concern. During a check nothing works normally, an the common definitions of "attack" and "protected" become really inadequate. And loops with checks in them actually do occur quite often in practice. So this seems a much more important issue than chasing by protection subversion.
User avatar
phhnguyen
Posts: 1434
Joined: Wed Apr 21, 2010 4:58 am
Location: Australia
Full name: Nguyen Hong Pham

Re: A method to implement Asian rule

Post by phhnguyen »

hgm wrote: Not so fast! I think both (1) and (2) explain all cases perfectly. In particular diagram 61. The Rook is not pinned, but (1) and (2) did not mention pinning in any way. In 61 the Cannon is chased by a static Rook only through subverting the protection. According to rule (1) that is a lower level of violence than the chase on the Rook, which is by direct attack. So the Rook is ruled to win. And 61 also satisfies the pattern of (2): the subversion of the Cannon protection is done by blocking the same (Cannon) move that also was chasing the Rook that has a static attack on the Cannon.

And I don't think this interferes with any other Asia rules example.
You still forget explaining Appendix 3. Without that, our life should be easier ;) I have to introduce the "fair chase of Rook" mainly because of its existence.
There is one caveat, though: the reason I do not encounter chasing by protection subversion in real engine games, could be caused by the fact that no engine implements this.
I think if we can give a clear algorithm, engines will one by one implement it.
When I was playing with engines that were not chase protected, I also saw very few chases (1-2%). But when one of the engines is chase-protected, and the other not, about 13% of the games ends in chasing.
Very interesting information. It seems that the way to install rule may affect significantly to the playing style, doesn't it?
User avatar
hgm
Posts: 27787
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: A method to implement Asian rule

Post by hgm »

With Appendix 3 you mean this one?
Image
Example of Mutual Perpetual Chase
R4-2 g4+5
R4+2 g5-4
R6-4 g4+5
R6+4 g5-4
R4-2 g4+5
R4+2 g5-4
R6-4 g4+5
....


Explanation
Red's R4-2 is to allow the Rook on the 6th file to chase the Black's Cannon on the 9th file. In the next move, R4+2, Red is using the Rook on the 4th file to chase the Black Cannon on the 9th file. This is two pieces perpetually chasing a piece.
I don't see any problem there. I don't even see a forbidden chase there, as given. It is one chases two, which is allowed.

To clarify: Neither of the red Rooks is perpetually chased: there are always positions where they are on 6th rank, where they are not even attacked. Furthermore, the explanation only talks about the Rook on the 6th file being attacked by a Cannon, while in the sequence of moves that are given it sometimes is the Rook on the 4th file that is attacked by a Cannon through the Advisor move.

The description does not fit the moves, so as given this example is total nonsense. This is defenitely not a mutual perpetual chase, as the example claims. In fact, I don't even think the given sequence of moves is draw: blacks Advisor moves do not violate any rule, as he is alternatingly chasing two different Rooks. The red Rooks, however, always subvert the protection of the Cannons by each other, no matter which Rook moves, or wheter it is coming or going. So red is perpetually chasing two Cannons at the same time here by protection subversion, in addition to alternately chasing a different Cannon for two moves by direct attack. So I think this is a clear loss for red. The description does not go with the case, but is intended for a similar case where only the Rook in the 6th file moves.
User avatar
phhnguyen
Posts: 1434
Joined: Wed Apr 21, 2010 4:58 am
Location: Australia
Full name: Nguyen Hong Pham

Re: A method to implement Asian rule

Post by phhnguyen »

The original moves of Appendix 3 are not correct, base on its last comment. I have re-edited its moves as the following:

[Event "Asia Rules Appendix 3"]
[Site "NHATMINH"]
[Date "2010.08.10"]
[Round "-"]
[White "-"]
[Black "-"]
[Result "1/2-1/2"]
[Variant "xiangqi"]
[FEN "3aka3/c2R1R2c/4e4/9/9/9/9/4E4/4K4/2E6 w 0 1"]
[SetUp "1"]

{--------------
. . . a k a . . .
c . . R . R . . c
. . . . e . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . E . . . .
. . . . K . . . .
. . E . . . . . .
white to play
--------------}
{--------------
. . . a k a . . .
c . . R . R . . c
. . . . e . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . E . . . .
. . . . K . . . .
. . E . . . . . .
white to play
--------------
--------------
. . . a k a . . .
c . . R . R . . c
. . . . e . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . E . . . .
. . . . K . . . .
. . E . . . . . .
white to play
--------------
--------------
. . . a k a . . .
c . . R . R . . c
. . . . e . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . E . . . .
. . . . K . . . .
. . E . . . . . .
white to play
--------------}
1. Rf6 Ade8 2. Rf8 Ad9 3. Rf6 Ade8 4. Rf8 Ad9 5. Rf6 Ade8 6. Rf8
{Red's R4-2 is to allow the Rook on the 6th file to chase the Black's Cannon on the 9th file.
In the next move, R4+2, Red is using the Rook on the 4th file to chase the Black Cannon on
the 9th file. This is two pieces perpetually chasing a piece.
As to the Black side, each time it moves the Guard it is threatening the Red Rook on the 6th
file with a Cannon. This is a perpetual chase.
Since both sides violate the rule, the game will be a draw if neither side wants to change
its move.}

{XBoard adjudication: repetition draw} 1/2-1/2

I see both sides are chasing. White chases both Cannons constantly (not kind of alter chasing), Black chases Rook on column d. How can you explain the result draw?