I’m trying to code a series of rules that require a head-daughter with an empty slash list and copy the index from the one of my head daughter’s valence items onto the parent’s slash list. The motivation for this is a resumption-like phenomenon in a language where an external phrase (topic, S-embedding) can overtly realize a coreferenced argument belonging to a lower clause’s verb. This happens for realized and non-realized lower-clause arguments, so I was trying to create a parent rule type that was cross-inheritable with subj-head, head-subj, head-opt-subj, etc. The theoretical, abstract parent rule says “my head-daughter has an empty slash list, and I am putting one item’s index from its arg-st onto my slash list.” I don’t think I can say “some item on the arg-st” so I’m having to code that bit out by hand, but that’s fine.
It appears however I have a problem because all of these rules (head-subj, head-comp, head-opt-subj, head-opt-comp, etc) inherit from head-valence-phrase, and head-valence-phrase says that my head-daughter’s slash list is my slash list. So when I naively tried to write my rule:
head-opt-subj-slash-phrase := decl-head-opt-subj-phrase &
[ SYNSEM.NON-LOCAL.SLASH <! [ LOCAL.CONT.HOOK.INDEX #index ] !>,
HEAD-DTR.SYNSEM [ LOCAL.CAT.VAL.SUBJ < [ LOCAL.CONT.HOOK.INDEX #index ] >,
NON-LOCAL.SLASH <! !> ] ].
…my grammar does not compile:
Cyclic check found cycle at < HEAD-DTR : SYNSEM : NON-LOCAL : SLASH : LIST : REST >
Unification failed - cyclic result
Is there any way for me to get around this aside from the slightly horrible task of rewriting all the valency reduction rules?