Documentation

Linglib.Studies.AghaJeretic2022

Weak Necessity Modals as Homogeneous Pluralities of Worlds #

[AJ22]

Proceedings of SALT 32: 831–851.

Core Proposal #

Weak necessity modals like should are not quantificational. They denote definite pluralities of worlds, paralleling the relationship between plural definite nominals (the) and universal quantifiers (all/every):

This gives weak necessity modals homogeneity as an intrinsic feature: they yield a truth-value gap (neither true nor false) when some but not all worlds in the domain satisfy the prejacent — exactly paralleling the behavior of plural definite DPs under negation.

Key Claims Formalized #

  1. Homogeneity (§3.1): Weak necessity modals take obligatory apparent wide scope over negation, unlike strong necessity modals which allow narrow scope.

  2. Trivalent semantics (§4.2): should_D := ⊕D — evaluation is trivalent with symmetric negation (homogeneity gap preserved under ¬).

  3. Homogeneity removal (§3.2): The adverb necessarily removes homogeneity from should, just as all removes it for plural definites.

  4. QUD-sensitive exception tolerance (§3.3): Weak necessity modals tolerate exceptions when irrelevant to the QUD.

  5. X operator (§5.1): Derives should from must compositionally via minimal witness sets. X only applies to universals (unique witness), explaining Javanese NE's restriction to necessity modals.

  6. Critique of domain restriction (§6.1): The vFI 2008 analysis (Directive.weakNecessity) is bivalent — it cannot produce the truth-value gap that the empirical data require.

Independent Support #

[TKC19] find that children acquire homogeneity independently of scalar implicatures (HOM/−SI group), supporting the claim that homogeneity is intrinsic to plural predication rather than derived via exhaustification ([Mag14]).

Connection to [AJ26] #

The 2026 handbook chapter surveys this analysis as one of three competing accounts of weak necessity (alongside domain restriction and comparative semantics), and extends it to explain the neg-raising asymmetry between should and must.

Trivalent evaluation #

should gets trivalent semantics via plural predication over worlds, while must remains bivalent (standard ∀ quantification).

We model the modal domain as a List World and use Core.Duality.Truth3 for the three-valued output.

def AghaJeretic2022.mustEval {World : Type} (domain : List World) (p : WorldBool) :

Strong necessity: standard ∀ quantification over the modal domain. Bivalent — always true or false, never indeterminate. must_D := λp. ∀w ∈ D. p(w)

Equations
Instances For
    def AghaJeretic2022.shouldEval {World : Type} (domain : List World) (p : WorldBool) :

    Weak necessity: trivalent plural predication over the modal domain. Returns tt if all worlds satisfy p, ff if none do, unk otherwise. should_D := ⊕D — the prejacent is predicated of the plurality of worlds, yielding homogeneity.

    Body uses an explicit 4-way if-chain to support split-based proofs in this file. The bridge theorem shouldEval_eq_distList (below) formalizes the equivalence with Core.Duality.distList for nonempty domains. Refactoring the body to call distList directly requires rewriting ~3 dense proof scripts; tracked as future work.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      must is always bivalent #

      theorem AghaJeretic2022.must_bivalent {World : Type} (domain : List World) (p : WorldBool) :

      must never returns the indeterminate value.

      should is homogeneous: it can return ★ #

      In a mixed domain, should returns ★ (indeterminate).

      In a uniform-true domain, should returns tt.

      In a uniform-false domain, should returns ff.

      must returns ff in the mixed case (no gap).

      theorem AghaJeretic2022.should_must_agree_positive {World : Type} (domain : List World) (p : WorldBool) (h : domain.all p = true) (hne : domain.isEmpty = false) :
      shouldEval domain p = mustEval domain p

      When positive, should and must agree.

      Negation symmetry #

      The paper's central formal claim: shouldEval produces symmetric truth conditions under negation. Affirming p of the plurality and denying ¬p are non-complementary — both can be indeterminate simultaneously. This is the formal content of homogeneity.

      Contrast: must has NO gap — it's always bivalent.

      theorem AghaJeretic2022.shouldEval_tt_neg_ff {World : Type} (domain : List World) (p : WorldBool) (h : shouldEval domain p = Core.Duality.Truth3.true) :
      (shouldEval domain fun (w : World) => !p w) = Core.Duality.Truth3.false

      If shouldEval D p = tt, then shouldEval D (¬p) = ff. No overlap between positive and negative extensions of the plurality.

      theorem AghaJeretic2022.shouldEval_ff_neg_tt {World : Type} (domain : List World) (p : WorldBool) (h : shouldEval domain p = Core.Duality.Truth3.false) (hne : domain.isEmpty = false) :
      (shouldEval domain fun (w : World) => !p w) = Core.Duality.Truth3.true

      If shouldEval D p = ff (non-empty D), then shouldEval D (¬p) = tt. Symmetric: universal denial of p means universal affirmation of ¬p.

      theorem AghaJeretic2022.shouldEval_unk_symmetric {World : Type} (domain : List World) (p : WorldBool) (h : shouldEval domain p = Core.Duality.Truth3.indet) :
      (shouldEval domain fun (w : World) => !p w) = Core.Duality.Truth3.indet

      If shouldEval D p = unk, then shouldEval D (¬p) = unk. The gap is symmetric under negation — the core homogeneity property.

      The paper demonstrates that weak necessity modals pattern exactly like plural definites with respect to negation. The judgment grid lives as LinguisticExample rows in the generated Data.Examples.AghaJeretic2022 module; Generalizations.HomogeneityGap.fromExample lifts them into the cross-paper unembedded-homogeneity pool.

      A&J's contribution to the cross-paper unembedded homogeneity pool.

      Equations
      Instances For

        The should polarity × scenario grid (paper examples (8)–(9)).

        Equations
        Instances For

          Every datum this paper contributes feeds the pooled cross-paper data.

          Have to does NOT display homogeneity (paper example (9b)): both gap cells are determinate, and "don't have to go" is clearly true in the mixed scenario — the narrow-scope reading (¬□ = ◇¬) is available, unlike should which only allows wide scope (□¬).

          Representative two-world domain for each scenario; a world is identified with the prejacent's truth value at it.

          Equations
          Instances For

            The trivalent semantics as a GapPredict: negative polarity predicates the negated prejacent of the same plurality (homogeneity = symmetric negation, §3.1).

            Equations
            Instances For

              The trivalent semantics reproduces every cell of the should grid.

              Homogeneity removal by "necessarily" #

              Inserting necessarily into a weak necessity modal sentence removes the homogeneity gap, just as all removes it from plural definites.

              Paper examples (14)–(15):

              This parallels:

              Necessarily removes homogeneity from should, paralleling how all removes homogeneity from plural definites: the bare negated should observes ★ in the mixed scenario, the necessarily-variant is determinate, and the bare variant recorded as its alternative is degraded.

              def AghaJeretic2022.shouldWithRemoval {World : Type} (domain : List World) (p : WorldBool) :

              shouldEval with homogeneity removal (= explicit quantifier insertion) reduces to mustEval — the gap disappears.

              Equations
              Instances For

                QUD-sensitive exception tolerance #

                Plural predication tolerates exceptions when they are irrelevant to the QUD. The paper shows the same pattern for weak necessity modals.

                Paper example (17): Context: One can get a perfect grade by doing most exercises correctly; doing all gives extra credit. QUD1: What is a way to get a perfect grade? QUD2: What are the minimal requirements?

                (a) "You should do every exercise." → QUD1: ✓; QUD2: # (b) "You have to do every exercise." → QUD1: #; QUD2: #

                Weak necessity tolerates QUD-irrelevant exceptions; strong necessity does not: should is acceptable under the way-to-a-perfect-grade QUD and degraded under the minimal-requirements QUD, while have to is degraded under both.

                Well-responses in borderline cases #

                In borderline cases (★), outright denial is infelicitous; well-responses are preferred. This parallels plural definites ([Kri16]).

                Paper example (19).

                In the two-equally-good-doors scenario, the borderline (★) weak-necessity sentence is degraded — outright "No" denial is infelicitous and a "Well, ..." response is preferred — while bivalent must is simply false and felicitously deniable.

                Compositional derivation via the X operator #

                X picks out the unique smallest set that makes a quantifier true and returns the mereological sum of its elements:

                X := λM. ⊕ ιW[W ∈ WIT(M)]

                Applied to must_D: the unique minimal witness set of ∀ over D is D itself (no proper subset suffices). So X(must_D) = ⊕D = should_D.

                Applied to can_D: each singleton {w} for w ∈ D is a minimal witness of ∃. Multiple minimal witnesses → ι is undefined → X is undefined. This explains why Javanese NE (= X) only combines with necessity modals.

                def AghaJeretic2022.isWitness {World : Type} (q : List WorldBool) (w : List World) :
                Bool

                A witness set for a quantifier Q is a set W such that Q(W) holds.

                Equations
                Instances For
                  def AghaJeretic2022.isMinimalWitness {World : Type} [BEq World] (q : List WorldBool) (w : List World) :
                  Bool

                  A minimal witness: a witness with no proper sub-witness. Removing any element makes it no longer a witness.

                  Equations
                  Instances For
                    def AghaJeretic2022.universalQ {World : Type} [BEq World] (domain : List World) :
                    List WorldBool

                    Universal quantifier as GQ: W witnesses ∀ over D iff D ⊆ W. This is the Barwise & Cooper (1981) witness set notion — the quantifier EVERY(D) = {P | D ⊆ P}, so W ∈ EVERY(D) iff D ⊆ W.

                    Equations
                    Instances For
                      def AghaJeretic2022.existentialQ {World : Type} [BEq World] (domain : List World) :
                      List WorldBool

                      Existential quantifier as GQ: W witnesses ∃ over D iff D ∩ W ≠ ∅. SOME(D) = {P | D ∩ P ≠ ∅}, so W ∈ SOME(D) iff some element of D is in W.

                      Equations
                      Instances For
                        theorem AghaJeretic2022.universal_unique_minimal_witness :
                        isMinimalWitness (universalQ [0, 1]) [0, 1] = true isMinimalWitness (universalQ [0, 1]) [0] = false isMinimalWitness (universalQ [0, 1]) [1] = false

                        The full domain is the UNIQUE minimal witness for ∀. Since EVERY(D) = {P | D ⊆ P}, the only W ⊆ D with D ⊆ W is W = D. Removing any element breaks the subset condition. This is why X (requiring a unique minimal witness) applies to universals.

                        Each singleton is a minimal witness for ∃, and the full domain is NOT minimal (proper subsets suffice). This is why X is undefined for ∃ — multiple minimal witnesses means ι (the uniqueness presupposition) fails. This explains Javanese NE's restriction to necessity modals.

                        def AghaJeretic2022.applyX {World : Type} (domain : List World) (p : WorldBool) :

                        X applied to must yields the domain itself (= should's denotation). The resulting plurality is then subject to plural predication semantics.

                        Equations
                        Instances For
                          theorem AghaJeretic2022.x_must_eq_should {World : Type} (domain : List World) (p : WorldBool) :
                          applyX domain p = shouldEval domain p

                          X(must) = should.

                          Morphological composition of weak necessity #

                          Cross-linguistically, weak necessity is expressed in two ways:

                          1. Primitive lexical items (English should, ought): non-decomposable.
                          2. Morphological derivation from strong necessity: a. French: devoir+CF → weak necessity. CF picks a witness set without requiring uniqueness, so it applies to both ∀ (devrais) and ∃ (pourrais). b. Javanese: mesthi+NE → weak necessity. NE = X (requires unique minimal witness), so it only applies to ∀ (mesthi-ne), not ∃ (iso-ne is ungrammatical).
                          @[implicit_reducible]
                          Equations
                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            Instances For
                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For
                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            theorem AghaJeretic2022.three_strategies :
                                            (List.map (fun (x : WeakNecessityMorphDatum) => x.strategy) weakNecessityMorphData).eraseDups.length = 3
                                            theorem AghaJeretic2022.javanese_necessity_only :
                                            javanese_mesthi.appliesTo = "necessity only (*iso-ne is ungrammatical)"

                                            Javanese NE only applies to necessity; French CF applies to both. This follows from X requiring unique minimal witnesses (∀ only) vs CF accepting any witness (∀ and ∃).

                                            theorem AghaJeretic2022.french_both_forces :
                                            french_devrais.appliesTo = "necessity + possibility (devrais/pourrais)"

                                            Why domain restriction doesn't capture homogeneity #

                                            The [vFI08] analysis (formalized in Directive.lean) treats should as ∀ over a refined set of best worlds. Directive.weakNecessity returns Bool — it is bivalent by construction. A bivalent semantics cannot produce the truth-value gap that the empirical data require.

                                            We make this critique computational by contrasting Directive.weakNecessity (always tt or ff) with shouldEval (can return unk).

                                            @[reducible, inline]

                                            Local 4-world type for the bivalence demonstration.

                                            Equations
                                            Instances For

                                              Directive.weakNecessity is bivalent: as a Prop, it is classically true or false — never indeterminate. This contrasts with shouldEval, which can return Truth3.indet.

                                              theorem AghaJeretic2022.shouldEval_can_gap :
                                              ∃ (D : List Bool) (p : BoolBool), shouldEval D p = Core.Duality.Truth3.indet

                                              shouldEval CAN return unk — the gap that domain restriction misses.

                                              Domain restriction matches the classical cells of the should grid but fails exactly the gap cells: it predicts that negated should is true there (¬∀, licensing the existential followup "but you are allowed to go"), where ★ is observed.

                                              English modal lexicon verification #

                                              Verify that the English fragment classifies should/ought as weak necessity and must as strong necessity, matching the paper's §2.1.

                                              should is classified as weak necessity in the English fragment.

                                              Scopelessness persists under higher negation #

                                              The apparent wide scope of should persists when negation is in a higher clause, paralleling plural definites:

                                              This is analyzed as scopelessness: the "wide scope" effect is a consequence of homogeneity, not syntactic movement.

                                              • modal : String
                                              • sentence : String
                                              • existentialFollowup : String
                                              • followupFelicitous : Bool
                                              Instances For
                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For

                                                      Weak necessity and its friends #

                                                      The paper argues (§6.4) that the homogeneity pattern observed with weak necessity modals is part of a general phenomenon shared with bare conditionals, generics, and habituals — all analyzable as involving plural predication over different semantic domains. Bare conditionals ("They play soccer if the sun shines", the von Fintel/Gajewski observation) show the same ★ pattern in mixed scenarios as the should grid, under both polarities — the structural parallel that supports the unified plural-predication analysis.

                                                      Examples (38)–(42): future conditionals, bare past conditionals, generics, and habituals all show homogeneity effects and homogeneity removal by explicit quantifiers (necessarily, always, all).

                                                      The Determiner–Modal Parallel #

                                                      Nominal domainModal domain
                                                      the N (plural def.)should (weak necessity)
                                                      all/every N (∀)must/have to (strong)
                                                      homogeneoushomogeneous
                                                      scopelessscopeless
                                                      exception-tolerantexception-tolerant
                                                      all removes gapnecessarily removes gap
                                                      ★ → "well" response★ → "well" response

                                                      The proposal: weak necessity is to strong necessity what the is to all.

                                                      • property : String
                                                      • pluralDefiniteExample : String
                                                      • weakNecessityExample : String
                                                      • sharedBehavior : Bool
                                                      Instances For
                                                        Equations
                                                        • One or more equations did not get rendered due to their size.
                                                        Instances For
                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For

                                                            Local vs Global Aggregation #

                                                            The should/must contrast is an instance of the local/global aggregation distinction in Core.Duality. When modal sentences are embedded under quantifiers ("Every student should/must pass"):

                                                            theorem AghaJeretic2022.shouldEval_indet {World : Type} (domain : List World) (p : WorldBool) (hne : domain.isEmpty = false) (h_not_all : domain.all p = false) (h_not_none : (domain.all fun (w : World) => !p w) = false) :

                                                            shouldEval for a mixed nonempty domain produces .indet.

                                                            should erases strength under embedding: when n individuals each have mixed modal domains, all produce .indet. Any quantifier aggregating these gaps returns .indet — strength is invisible.

                                                            must produces the strength effect under embedding: when n individuals each have their modal domain evaluated by mustEval (producing ofBool), mixed Bool results distinguish strong from weak quantifiers.

                                                            must is always determinate under embedding: aggregation over ofBool values never produces a gap, regardless of duality type.

                                                            The Core Identity: should = DIST over worlds #

                                                            The paper's central formal claim is that weak necessity IS plural predication. We prove this by showing shouldEval equals dist (the distributive operator for plural predication from Core.Duality) applied to the evaluation of each world in the domain.

                                                            dist results returns:

                                                            This is exactly what shouldEval computes, with results = domain.map p.

                                                            theorem AghaJeretic2022.shouldEval_eq_distList {World : Type} (domain : List World) (p : WorldBool) (hne : domain []) :
                                                            shouldEval domain p = Core.Duality.distList domain fun (w : World) => p w = true

                                                            shouldEval = DIST over worlds.

                                                            shouldEval D p = distList D p for nonempty D — the canonical Core.Duality.distList (Fine super-truth specialized to a List domain with a Boolean predicate) IS what weak necessity computes.

                                                            This is the formal proof that weak necessity IS plural predication: the trivalent truth value of "should p" is determined by the DIST operator applied to the pointwise evaluation of p across the modal domain — exactly as "the Xs are P" is determined by DIST applied to the pointwise evaluation of P across the individuals.

                                                            The the/all : should/must parallel is not merely an analogy; it is a mathematical identity at the level of truth-value computation.

                                                            Hypothesis hne is required because shouldEval [] p = .false (Agha & Jeretič's empty-domain convention) while distList [] p = .true (vacuous super-truth, mathlib's empty-fold convention).

                                                            theorem AghaJeretic2022.mustEval_eq_ofBool {World : Type} (domain : List World) (p : WorldBool) :
                                                            mustEval domain p = Core.Duality.Truth3.ofBool (domain.all p)

                                                            mustEval is ofBool ∘ List.all, confirming must stays bivalent.

                                                            Sufficient Truth ([Kri16], A&J Appendix 1) #

                                                            Formalizes the mechanism by which indeterminate (★) sentences are rescued to "true enough" relative to an Question (= QUD). A sentence S is sufficiently true at w w.r.t. issue I iff:

                                                            1. S is not false at w: ⟦S⟧(w) ≠ 0
                                                            2. There exists an I-equivalent world u where S is true: ⟦S⟧(u) = 1

                                                            Condition 2 means the exceptions are in the same Question cell as a satisfying world — they are "irrelevant" to the QUD.

                                                            Addressing an Question (def 46): S cannot address issue I if any cell of I contains both worlds where S is true and worlds where S is false. In other words, S must not split any Question cell.

                                                            def AghaJeretic2022.sufficientTruth {W : Type} (S : WCore.Duality.Truth3) (sameCell : WWBool) (w : W) (worlds : List W) :
                                                            Bool

                                                            Sufficient Truth (Križ 2016, A&J def 44). S is true enough at w w.r.t. issue I iff (i) S is not false at w, and (ii) some I-equivalent world makes S true.

                                                            Equations
                                                            Instances For
                                                              theorem AghaJeretic2022.sufficient_truth_rescues_gap :
                                                              sufficientTruth (fun (w : Fin 3) => if (w == 0) = true then Core.Duality.Truth3.true else if (w == 1) = true then Core.Duality.Truth3.indet else Core.Duality.Truth3.false) (fun (w u : Fin 3) => w != 2 && u != 2) 1 [0, 1, 2] = true

                                                              Sufficient truth rescues an indeterminate sentence when the exceptions are QUD-irrelevant. Example: "You should do every exercise" is ★ when doing most but not all suffices. Under QUD1 ("how to get a perfect grade?"), the exception-worlds (where you skip one exercise but still pass) are equivalent to the satisfying-worlds → rescued to "true enough." Under QUD2 ("what are the minimal requirements?"), they are in different cells → NOT rescued.

                                                              theorem AghaJeretic2022.strict_qud_blocks_rescue :
                                                              sufficientTruth (fun (w : Fin 3) => if (w == 0) = true then Core.Duality.Truth3.true else if (w == 1) = true then Core.Duality.Truth3.indet else Core.Duality.Truth3.false) (fun (w u : Fin 3) => w == u) 1 [0, 1, 2] = false

                                                              The CF operator for French-type languages #

                                                              The X operator (§5.1) requires a UNIQUE minimal witness set (via ι). This explains Javanese NE: ∀ has one minimal witness (the full domain), ∃ has many (each singleton), so NE only applies to necessity.

                                                              French counterfactual morphology is less restrictive: CF picks SOME witness set (not necessarily unique), so it applies to both necessity and possibility modals: devrais (necessity+CF) and pourrais (possibility+CF).

                                                              The difference: X = λM. ⊕ ιW[W ∈ WIT(M)] (unique, partial) CF = λM. ⊕ W for some W ∈ WIT(M) (existential, total)

                                                              def AghaJeretic2022.hasCFWitness {World : Type} [BEq World] (q : List WorldBool) (candidates : List (List World)) :
                                                              Bool

                                                              CF operator: checks whether SOME minimal witness set exists. Unlike X (which requires uniqueness), CF is defined whenever at least one minimal witness exists — which is always, for any non-empty quantifier domain.

                                                              Equations
                                                              Instances For
                                                                theorem AghaJeretic2022.cf_defined_for_universal :
                                                                hasCFWitness (universalQ [0, 1]) [[0], [1], [0, 1]] = true

                                                                CF is defined for both ∀ and ∃ (both have minimal witnesses).

                                                                def AghaJeretic2022.hasUniqueWitness {World : Type} [BEq World] (q : List WorldBool) (candidates : List (List World)) :
                                                                Bool

                                                                X (unique minimal witness) is defined for ∀ but not ∃. Here "unique" means exactly one candidate is a minimal witness.

                                                                Equations
                                                                Instances For
                                                                  theorem AghaJeretic2022.typological_prediction :
                                                                  hasUniqueWitness (universalQ [0, 1]) [[0], [1], [0, 1]] = true hasUniqueWitness (existentialQ [0, 1]) [[0], [1], [0, 1]] = false hasCFWitness (universalQ [0, 1]) [[0], [1], [0, 1]] = true hasCFWitness (existentialQ [0, 1]) [[0], [1], [0, 1]] = true

                                                                  The typological prediction: X (Javanese NE) restricts to necessity; CF (French counterfactual) applies to both.

                                                                  Cross-linguistic fragment verification #

                                                                  Bridge theorems connecting the morphological data (§9) to the actual fragment entries, verifying that the linguistic analysis is reflected in the formal lexical entries.

                                                                  iso (possibility) has NO -ne form: *iso-ne is ungrammatical. Verified by checking that no weak-possibility expression exists.

                                                                  Devrais preserves devoir's flavor polysemy: both are epistemic/deontic/circumstantial.

                                                                  Homogeneity and neg-raising are one structural condition #

                                                                  A&J analyse should's wide-scope-under-negation as homogeneity (a truth-value gap in mixed domains), not genuine neg-raising; [Rub14] analyses the same data as genuine neg-raising. Both reduce to one structural condition on the modal's domain — being a subsingleton — via the shared Homogeneity.negRaising_iff_subsingleton. The rival diagnoses of should are the same fact described differently.

                                                                  theorem AghaJeretic2022.bivalent_iff_negRaising {W : Type u_1} (A : Set W) :
                                                                  (∀ (p : WProp), (∀ wA, p w) wA, ¬p w) ∀ (p : WProp), (¬wA, p w)wA, ¬p w

                                                                  A&J's homogeneity (gap-free, i.e. bivalent for every prejacent) and Rubinstein's neg-raising coincide: a universal modal over A is gap-free for every prejacent iff it neg-raises for every prejacent — both hold iff A is a subsingleton (Homogeneity.negRaising_iff_subsingleton).

                                                                  theorem AghaJeretic2022.gap_witness_not_subsingleton :
                                                                  shouldEval [true, false] id = Core.Duality.Truth3.indet ¬{true, false}.Subsingleton

                                                                  The gap witness, grounded in shouldEval: on the mixed two-world domain should gaps (should_mixed) and the domain is not a subsingleton, so by bivalent_iff_negRaising the neg-raising inference fails there too — the homogeneity gap and the neg-raising failure are the same condition.