AdvVP built its result with setPrefix, so the adverbial landed before the
verb. Polish is neutrally SVO, and this matters beyond adverbs proper: an
object reached through PrepNP arrives at AdvVP as an Adv, so a two-place
verb came out as *"π zbiór pusty przecina" rather than "π przecina zbiór
pusty". Both orders are grammatical, but the preverbal one topicalizes.
"śpi tutaj" is as good as "tutaj śpi", so the RGL's own example is
unaffected.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adding Polish to informath (grammars/next) exposed a set of gaps. Unlike
Czech, StructuralPol was already complete; what was missing was a handful
of lins, a way to govern the nominative, and some outright mistakes.
Missing lins, all reached as qualified Grammar.X by the application's
functors and so not shimmable from the application side:
AdjectivePol AdvAP
SentencePol SSubjS
IdiomPol ImpP3
StructuralPol that_Subj
MarkupPol new module (Markup is not part of the RGL build script,
so it is compiled on demand, as MarkupCze is)
ParadigmsPol mkAdv (every other ParadigmsX has it; the application
interfaces reach it as Paradigms.mkAdv)
ImpP3 has no third-person imperative to use, so it takes the standard
"niech" periphrasis. The copula takes the future ("niech x będzie grupą")
and every other verb the present ("niech x należy do A"): być is the only
Polish verb with a synthetic future, and imienne marks exactly the copular
VPs.
NomPrep: ComplCase had no nominative at all, so "jako", "niż" and
"zdefiniowany jako" -- all of which govern the nominative -- came out
locative ("mniejszy niż liczbie"). mkCompl now maps Nom to a new NomPrep,
and the dep tables of the pronouns, nounPN, mkPN and the structural NPs
cover it. LexiconNounPol is marked DO NOT EDIT, but paris_PN and john_PN
inline their own dep tables and so had to be extended too.
Two corrections:
VerbPol.CompCN used the nominative for a predicative noun, giving
"x jest grupa"; Polish uses the instrumental, as CompNP right below it
already does.
ExtendPol.ExistsNP inherited ExistNP from ExtendFunctor, giving
"jest macierz". Polish distinguishes the two: "there exists" is istnieć,
which is what mathematical prose uses.
ParadigmsPol.guess_paradigm_basic never matched -ość, the productive
feminine abstract suffix, so sprzeczność took a masculine declension
(*sprzeczności/a, *sprzecznościowi) despite being tagged feminine. It now
routes to the kość paradigm.
Also documents, without changing, why the 2-string mkN throws its genitive
away: guess_paradigm's 2-string table is unsound (its first branch matches
every noun in -a, and its branches disagree about whether mkNTable* takes
the nominative or the bare stem), so passing sggen to it turns
"liczba"/"liczby" into *liczbaa. The 1-string guesser is the sound path
until that table is repaired.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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) <noreply@anthropic.com>
declensionNounForms only tested hardConsonant (d t g h k n r), so the neutral
consonants (b f l m p s v), which take the hard endings, matched nothing and
fell through to the soft declSTROJ fallback: graf, atom, profil, přístup were
all declined as if soft. Same gap in guessNounForms. Add hardishConsonant
(hard + neutral + the foreign z, x) and use it in both.
The genitive passed to the three-argument mkN was only used to pick a
paradigm, then thrown away, so the oblique stem was re-derived from the
nominative by dropFleetingE. That guesses wrong in both directions: it fires
on člen -> člnu, and fails to fire on uzel -> uzelu, doplněk -> doplněku,
výpočet -> výpočetu. Give declHRAD, declHRADA and declMUZ stem-taking
variants and let declensionNounForms pass the stem it was given. The
one-argument guessNounForms keeps the old dropFleetingE behaviour.
New paradigms, all previously falling back to declSTROJ:
declLATINUS algoritmus - algoritmu, kosmos - kosmu (also -os)
declLATINUSA the same, masculine animate
declLATINUM kontinuum - kontinua
declGREEKMA schéma - schématu
declHRADA les - lesa, zákon - zákona
declADJF proměnná - proměnné
declADJM nultý - nultého
declINVAR indeclinable loans: bombé, tamari, software
Also match feminine consonant stems by genitive (-i -> kost, -e/-ě -> píseň),
masculine -e/-ě genitives (kužel - kužele, král - krále), and neuter -ě
(těžiště), none of which were reachable before.
Measured on the 1177 nouns of informath's WikidataWordsCze: 225 hit the
fallback before, 1 after (the acronym ADE).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Czech resource was too incomplete to compile a Syntax/Grammar client:
Sentence, Idiom and Question defined almost nothing, and many Structural
words were absent, so MissingCze's notYet stubs were reached at PMCFG
generation time.
Added:
CatCze lincat VV
SentenceCze AdvS, ExtAdvS, SSubjS, EmbedS, EmbedQS, ImpVP
IdiomCze ImpP3, ExistNP, ImpersCl, GenericCl
VerbCze CompCN, ComplVS, ComplVV, PassV2
NounCze SentCN, PredetNP
AdverbCze SubjS
QuestionCze QuestIAdv
PhraseCze UttImpSg, UttImpPl, UttImpPol
StructuralCze all_Predet, both7and_DConj, between_Prep, by8means_Prep,
can_VV, either7or_DConj, every_Det, if_Subj, no_Quant,
on_Prep, someSg_Det, that_Subj, under_Prep, where_IAdv
ExtendCze ExistsNP no longer excluded
Three of these approximate, because VerbForms lacks the required forms:
ImpVP uses the 1st person plural present ("předpokládáme, že ...") as there
is no imperative; PassV2 uses the reflexive passive ("číslo se dělí") as
passpart is commented out in ResCze; ImpP3 uses "nechť", which suits
mathematical text more than the "let John walk" of the RGL example.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MarkupNP marks s, clit and prep, since in Czech these are alternative
surface forms of a pronoun chosen by context, as in MarkupRomance.
The nominative clitic is left alone: it is the pro-drop subject, empty
for every personal pronoun, so marking it up gave "<b> </b> je starý".
Inherit MarkupCze in LangCze, as LangFin does; stringMark is excluded
because abstract Lang already excludes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implement the remaining Symbol functions, which previously fell back to
GF's default linearization: IntPN, FloatPN, NumPN, CNNumNP, CNIntNP,
CNSymbNP, SymbS, SymbNum, SymbOrd, and the [Symb] list.
Symbols and numbers are indeclinable neuters, but a cardinal used as a
name still declines (NumPN). CNNumNP treats the numeral as an invariable
label, so the noun carries the case: "město / městu / městem pět".
CNSymbNP goes through numSizeForm and numSizeAgr, as DetCN does, so
SymbNum's Num5 size gives "n měst x a y je staré".
SymbOrd is only approximate: CatCze has no lincat Ord, so it defaults to
{s : Str} and the masculine "n-tý" cannot agree.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>