From 11f73acc2832091e36b6670fb20649ec9c207046 Mon Sep 17 00:00:00 2001 From: aarneranta Date: Thu, 16 Jul 2026 17:51:41 +0200 Subject: [PATCH] czech: implement three-place verbs (V3) Add a proper V3 category to the Czech RGL, previously absent (V3 fell through to the {s:Str} default and Slash2V3/Slash3V3 were notYet stubs). - CatCze: lincat V3 = VerbForms ** {c, c2 : ComplementCase}; extend VPSlash with a trailing `ind` field for the incorporated indirect object (mirrors the English VPSlash c2 field). - VerbCze: implement Slash2V3 and Slash3V3; ComplSlash now renders the `ind` string after the object slot, and SlashV2a sets ind = []. This keeps the object before the indirect object under the shared ComplV3 v o d = ComplSlash (Slash3V3 v d) o. - ParadigmsCze: add the mkV3 paradigm (default acc/dat, plus an explicit two-complement-case form). - MissingCze: drop the now-implemented Slash2V3/Slash3V3 stubs. V2 predication is unchanged (ind is empty for V2-derived VPSlash). Co-Authored-By: Claude Opus 4.8 (1M context) --- src/czech/CatCze.gf | 3 ++- src/czech/MissingCze.gf | 2 -- src/czech/ParadigmsCze.gf | 8 ++++++++ src/czech/VerbCze.gf | 24 +++++++++++++++++++++--- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/czech/CatCze.gf b/src/czech/CatCze.gf index d7d42239..20c560e3 100644 --- a/src/czech/CatCze.gf +++ b/src/czech/CatCze.gf @@ -21,9 +21,10 @@ concrete CatCze of Cat = RP = AdjForms ; VP = {verb : VerbForms ; clit,compl : Agr => Str} ; ---- more fields probably needed - VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ---- + VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase ; ind : Agr => Str} ; -- ind : incorporated indirect object, rendered after the object slot V = ResCze.VerbForms ; V2 = ResCze.VerbForms ** {c : ComplementCase} ; + V3 = ResCze.VerbForms ** {c,c2 : ComplementCase} ; -- c : direct object, c2 : indirect object VS,VQ,VV = ResCze.VerbForms ; A = ResCze.AdjForms ; diff --git a/src/czech/MissingCze.gf b/src/czech/MissingCze.gf index 02ce581c..be4b9cb2 100644 --- a/src/czech/MissingCze.gf +++ b/src/czech/MissingCze.gf @@ -61,8 +61,6 @@ oper RelNP : NP -> RS -> NP = notYet "RelNP" ; oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ; oper SentAP : AP -> SC -> AP = notYet "SentAP" ; oper SentCN : CN -> SC -> CN = notYet "SentCN" ; -oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ; -oper Slash3V3 : V3 -> NP -> VPSlash = notYet "Slash3V3" ; oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ; oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ; oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ; diff --git a/src/czech/ParadigmsCze.gf b/src/czech/ParadigmsCze.gf index e6e60582..63d84236 100644 --- a/src/czech/ParadigmsCze.gf +++ b/src/czech/ParadigmsCze.gf @@ -122,6 +122,14 @@ oper = \vf,c -> vf ** {c = c} ; } ; + mkV3 = overload { + mkV3 : VerbForms -> VerbForms ** {c,c2 : ComplementCase} + = \vf -> vf ** {c = {s = [] ; c = Acc ; hasPrep = False} ; + c2 = {s = [] ; c = Dat ; hasPrep = False}} ; + mkV3 : VerbForms -> ComplementCase -> ComplementCase -> VerbForms ** {c,c2 : ComplementCase} + = \vf,c,c2 -> vf ** {c = c ; c2 = c2} ; + } ; + ------------------------ -- Adverbs, prepositions, conjunctions, ... diff --git a/src/czech/VerbCze.gf b/src/czech/VerbCze.gf index 4cc9c8e2..cc98d4a3 100644 --- a/src/czech/VerbCze.gf +++ b/src/czech/VerbCze.gf @@ -8,17 +8,35 @@ lin ComplSlash vps np = case of { => vps ** { - clit = \\a => vps.clit ! a ++ np.clit ! vps.c.c + clit = \\a => vps.clit ! a ++ np.clit ! vps.c.c ; + compl = \\a => vps.compl ! a ++ vps.ind ! a } ; _ => vps ** { - compl = \\a => vps.compl ! a ++ vps.c.s ++ np.s ! vps.c.c + compl = \\a => vps.compl ! a ++ vps.c.s ++ np.s ! vps.c.c ++ vps.ind ! a } } ; SlashV2a v = { verb = v ; clit,compl = \\_ => [] ; - c = v.c + c = v.c ; + ind = \\_ => [] + } ; + + -- three-place verbs: c = direct object case, c2 = indirect object case + Slash2V3 v np = { -- fill the direct object, leave the indirect open + verb = v ; + clit = \\_ => [] ; + compl = \\_ => v.c.s ++ np.s ! v.c.c ; + c = v.c2 ; + ind = \\_ => [] + } ; + Slash3V3 v np = { -- fill the indirect object (rendered after the object slot) + verb = v ; + clit = \\_ => [] ; + compl = \\_ => [] ; + c = v.c ; + ind = \\_ => v.c2.s ++ np.s ! v.c2.c } ; UseComp comp = {