Semantic Negation: Unified Foundations #
This module unifies the scattered negation semantics in linglib into a coherent architecture with three layers:
- NegOp — a semantic negation operator bundling involution + antitonicity,
with
standardNeg(pnot) as the canonical instance - DEStrength ↔ PolarityLicensing bridge — the entailment hierarchy
(weak DE / anti-additive / anti-morphic) determines the polarity licensing
profile, connecting the
Prop-based semantic properties inTheories.Semantics.Entailmentto theBool-valued empirical classification inCore.Negation - Scoped vs unscoped negation — a negation operator that retains scope into a domain preserves its semantic properties; when scope is blocked (e.g., by phase transfer), it loses antitonicity and hence licensing ability
Dependencies #
Core.Negation— framework-agnostic classification types (ENType, ENStrength, PolarityClass, PolarityLicensing) with Mathlib lattice instancesMathlib.Data.Set.Basic— set complement (pᶜ) replaces the oldCore.Semantics.Proposition.pnotCore.Logic.NaturalLogic—DEStrength(weak/antiAdditive/antiMorphic),strengthSufficientTheories.Semantics.Entailment.Polarity—IsDE = Antitone,IsUE = Monotone,pnot_isDownwardEntailingTheories.Semantics.Entailment.AntiAdditivity—IsAntiAdditive,IsAntiMorphic,pnot_isAntiMorphic,licensesWeakNPI,licensesStrongNPI
A semantic negation operator on decidable propositions over worlds W.
Bundles a function with its two defining properties:
- Involution:
¬¬p = p(double negation elimination) - Antitonicity:
p ≤ q → ¬q ≤ ¬p(downward entailment)
Standard sentential negation (pnot) satisfies both. Expletive
negation that has lost its scope may fail antitonicity — it is
then no longer a NegOp in this sense.
TODO: NegOp should operate on Set W not W → Bool — separate cleanup
pass per the Bool→Prop migration. The whole structure (and boolPnot,
standardNeg, isAntiAdditive, isAntiMorphic) lives in the Bool layer
and is out of scope for the current Prop' → Set migration.
- op : (W → Bool) → W → Bool
The negation function on decidable propositions.
- involutive : Function.Involutive self.op
Involutive: applying negation twice is the identity.
- antitone : Antitone self.op
Antitone: reverses the entailment ordering (= DE).
Instances For
Standard sentential negation (pnot) is the canonical NegOp.
It satisfies involution (pnot_pnot), antitonicity
(pnot_antitone), and additionally anti-morphism (De Morgan).
Equations
- Semantics.Negation.standardNeg W = { op := Semantics.Negation.boolPnot✝ W, involutive := ⋯, antitone := ⋯ }
Instances For
A NegOp is anti-additive if it distributes ∨ to ∧:
¬(A ∨ B) = ¬A ∧ ¬B (De Morgan, part 1).
Stated directly on the W → Bool-typed operator.
Equations
- n.isAntiAdditive = ∀ (p q : Semantics.Entailment.World → Bool) (w : Semantics.Entailment.World), n.op (fun (w : Semantics.Entailment.World) => p w || q w) w = (n.op p w && n.op q w)
Instances For
A NegOp is anti-morphic if it is anti-additive AND distributes ∧ to ∨:
¬(A ∧ B) = ¬A ∨ ¬B (De Morgan, part 2).
This is the full De Morgan property — the characteristic signature
of negation in the entailment hierarchy.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Standard negation is anti-additive (De Morgan part 1).
Standard negation is anti-morphic (full De Morgan).
The entailment hierarchy determines polarity licensing #
The Bool-valued PolarityLicensing profile in Core.Negation is a
consequence of the Prop-based entailment properties in
Theories.Semantics.Entailment:
| DEStrength | Semantic property | Licenses | Profile |
|---|---|---|---|
| weak | Antitone | weak NPIs, N-words | weakENProfile |
| antiAdditive | IsAntiAdditive | + strong NPIs, ¬also | standardNegProfile |
| antiMorphic | IsAntiMorphic | all (= standard neg) | standardNegProfile |
| (none) | ¬ Antitone | nothing | strongENProfile |
The anti-additive and anti-morphic levels both yield standardNegProfile
because notAlsoConj and N-word licensing track anti-additivity, not
anti-morphism (@cite{chierchia-2013} §1.4.3, @cite{icard-2012}).
Map DE strength to its empirical polarity licensing profile.
This is the central bridge: the semantic entailment hierarchy
determines the Bool-valued licensing table.
Equations
- Semantics.Negation.deToPolarityLicensing Core.NaturalLogic.DEStrength.weak = Phenomena.Negation.ExpletiveNegation.weakENProfile
- Semantics.Negation.deToPolarityLicensing Core.NaturalLogic.DEStrength.antiAdditive = Phenomena.Negation.ExpletiveNegation.standardNegProfile
- Semantics.Negation.deToPolarityLicensing Core.NaturalLogic.DEStrength.antiMorphic = Phenomena.Negation.ExpletiveNegation.standardNegProfile
Instances For
The bridge is monotone: stronger DE → more licensing in the lattice.
Weak DE licenses exactly weak NPIs and N-words.
Anti-additive DE licenses all polarity classes (= standard negation).
Anti-morphic DE licenses all polarity classes (= standard negation).
EN strength as presence/absence of DE #
The two-valued ENStrength classification collapses the three-level DE
hierarchy into a binary:
ENStrength.weak= the negation retains at least weak DE (≥DEStrength.weak)ENStrength.strong= the negation has lost all DE properties
This is @cite{greco-2020}'s core claim: the weak/strong EN distinction reduces to whether negation retains its downward-entailing property.
Map DE strength to EN strength: any DE at all → weak EN.
Equations
- Semantics.Negation.deToENStrength Core.NaturalLogic.DEStrength.weak = Phenomena.Negation.ExpletiveNegation.ENStrength.weak
- Semantics.Negation.deToENStrength Core.NaturalLogic.DEStrength.antiAdditive = Phenomena.Negation.ExpletiveNegation.ENStrength.weak
- Semantics.Negation.deToENStrength Core.NaturalLogic.DEStrength.antiMorphic = Phenomena.Negation.ExpletiveNegation.ENStrength.weak
Instances For
The licensing profile associated with an EN strength.
Weak EN retains at least weakENProfile (the minimum licensing from
any DE context). Strong EN has strongENProfile (= ⊥, no licensing).
Equations
Instances For
enStrengthToLicensing is antitone: stronger EN → less licensing.
This captures the inverse relationship: EN "strength" means strength of expletiveness, not strength of licensing. A stronger EN is more expletive, hence licenses less.
EN type determines EN strength #
The position-based ENType (high/low, @cite{rett-2026}) determines the
polarity-based ENStrength (strong/weak, @cite{greco-2020}):
- Low EN (truth-conditional, TP-area) → weak EN (retains polarity)
- High EN (non-truth-conditional, CP-area) → strong EN (loses polarity)
This bridge connects the two orthogonal classifications.
The composite bridge: ENType → ENStrength → PolarityLicensing.
Equations
Instances For
Low EN has at least weak licensing.
High EN has no licensing (= ⊥).
Scope determines semantic property survival #
A NegOp that can scope into a domain retains all its semantic properties
(involution, antitonicity, anti-morphism). When scope is blocked — e.g.,
by phase transfer in the Minimalist framework — the operator can no longer
reverse entailment over that domain's propositions.
The connection to EN classification:
- Scoped negation (TP-area merge) → retains
Antitone→ENType.low→ENStrength.weak→weakENProfile - Unscoped negation (CP-area merge, vP transferred) → loses
Antitone→ENType.high→ENStrength.strong→strongENProfile = ⊥
This is the full derivation chain: merge position → scope access → semantic property survival → entailment strength → polarity licensing.
Classify negation by scope access.
A negation with scope into the propositional domain is low EN (truth-conditional). A negation without scope is high EN (non-truth-conditional).
Equations
- Semantics.Negation.scopeToENType canScopeIntoVP = if canScopeIntoVP = true then Phenomena.Negation.ExpletiveNegation.ENType.low else Phenomena.Negation.ExpletiveNegation.ENType.high
Instances For
The full derivation chain: scope → ENType → ENStrength → licensing.
Equations
- Semantics.Negation.scopeToLicensing canScopeIntoVP = Semantics.Negation.enTypeToLicensing (Semantics.Negation.scopeToENType canScopeIntoVP)
Instances For
Scoped negation licenses at least weak NPIs and N-words.
Unscoped negation licenses nothing (= ⊥ in the lattice).
The full chain agrees with NegMergePosition.polarityProfile
from NegScope.lean: scope access determines licensing.