GRM-019
Hard constraint
layer: clause
Logical negation
IF two negatives unintentionally cancel into a positive, THEN replace them with the intended positive or single negative ELSE retain deliberate litotes or dialect.
Why the rule exists
Nested polarity increases error risk and can reverse the intended meaning.
Condition
The rule fires when this evaluates true. Paths marked below must be present in the fact base; the engine reports the rest rather than guessing them.
- ALL
- clause.negative_count gte 2
- clause.intended_litotes eq false
- context.mode neq "quoted_dialect"
Facts this rule reads
| Path | Source |
|---|---|
clause.negative_count |
You supply it |
clause.intended_litotes |
You supply it |
context.mode |
You supply it |
Then
- replace — target
clause.negation, value fromintended_polarity
Else
- retain — target
current_text, No triggering condition is present.
LAKA
- Smallest sufficient intervention
- Yes
- Primary axes
Sources
-
English Grammar in Use — Raymond Murphy
Self-study explanations and practice for core English grammar. -
Practical English Usage — Michael Swan
Advanced grammar and usage reference for learners and teachers. -
Making Content Usable for People with Cognitive and Learning Disabilities — W3C
link
Clear words, simple voice and tense, explicit instructions, and supportive structure.
The raw rule record
Verbatim from 07-core-grammar-rules.json. Also available at /v1/rules/GRM-019.
{
"id": "GRM-019",
"name": "Logical negation",
"domain": "grammar",
"layer": "clause",
"strength": "hard_constraint",
"human_logic": "IF two negatives unintentionally cancel into a positive, THEN replace them with the intended positive or single negative ELSE retain deliberate litotes or dialect.",
"when": {
"all": [
{
"path": "clause.negative_count",
"operator": "gte",
"value": 2
},
{
"path": "clause.intended_litotes",
"operator": "eq",
"value": false
},
{
"path": "context.mode",
"operator": "neq",
"value": "quoted_dialect"
}
]
},
"then": [
{
"action": "replace",
"target": "clause.negation",
"value_from": "intended_polarity",
"prefer": "single_operator"
}
],
"else": [
{
"action": "retain",
"target": "current_text",
"reason": "No triggering condition is present."
}
],
"unless": [],
"because": "Nested polarity increases error risk and can reverse the intended meaning.",
"diagnostics": [],
"examples": {},
"source_ids": [
"BK-004",
"BK-010",
"WEB-006"
],
"laka": {
"smallest_sufficient_intervention": true,
"primary_axes": [
"scope",
"depth",
"magnitude",
"reversibility"
]
}
}
Other grammar rules
- GRM-001 Subject–verb number agreement IF a finite clause has an expressed subject AND neither quoted dialect nor an agreement exception applies, THEN align the finite verb with the subject in number ELSE retain. Hard constraint
- GRM-002 Compound subject agreement IF two or more singular subject heads are coordinated by AND, THEN use plural agreement ELSE evaluate the coordinator. Hard constraint
- GRM-003 Or/nor proximity agreement IF subject alternatives are joined by OR or NOR, THEN agree with the closest subject OR rewrite when the result sounds unstable ELSE retain. Context default
- GRM-004 Pronoun–antecedent agreement IF a pronoun refers to an antecedent AND the antecedent is known, THEN align person and number while respecting singular THEY ELSE request the missing referent. Hard constraint
- GRM-005 Unambiguous pronoun reference IF a pronoun has two or more plausible antecedents OR none, THEN replace it with the intended noun phrase ELSE retain. Hard constraint
- GRM-006 Stable grammatical person IF a passage shifts person without changing speaker, audience, or viewpoint, THEN restore the established person ELSE preserve the motivated shift. Context default
- GRM-007 Tense consistency within a time frame IF tense changes but event time and narrative viewpoint do not, THEN restore the established tense ELSE keep the meaningful time shift. Context default
- GRM-008 Sequence of tenses IF a dependent clause is temporally related to a governing clause, THEN select tense and aspect that express the intended ordering ELSE do not normalize automatically. Hard constraint