Paired inseparability: the cross-coordinate gates (issue #8, commit 4c — risky core) #
Commits 4a/4b built a one-sided consistency family (InsepFamilyMem: only the Γ coordinate,
with Δ fixed externally). That completes only the Γ-side: the Henkin limit S* contains r₁
but nothing forces r₂, so the truth lemma yields M ⊨ r₁ with no handle on r₂. The Craig
contradiction needs one model of both sides at once.
This file restores the audit's paired finite conditions S = Γ ∪ Δ (docs/craig-audit.md
§4, §7): Γ ⊆ Sent₁, Δ ⊆ Sent₂ over the two side vocabularies, inseparable at the shared
vocabulary (F₀, R₀). The one-sided closures of InseparablePairFamily.lean remain the
left-coordinate engine; the right coordinate is obtained by the swap below, and the genuinely
new content is the three cross-coordinate gates the audit flagged as load-bearing.
The gates (all proved here) #
insepAt_swap— dualization: inseparability is symmetric under(Γ, Δ) ↦ (Δ, Γ)withσ ↦ σ.not. This turns every left-coordinate closure into its right-coordinate twin.insepAt_shared_contradiction— cross-coordinate contradiction ⟹ shared separator: a shared sentenceφwithΓ ⊨ φandΔ ⊨ φ.not(support inA) is a separator, so it cannot occur; this is the globalC0for the union (the caseφ ∈ Γ,φ.not ∈ Δ). Aφoccurring on both sides is automatically shared:φ ∈ Sent₁andφ.not ∈ Sent₂forceφ's base symbols intoF₁ ∩ F₂ = F₀.insepAt_insert_of_shared_entails— shared-hypothesis transfer: ifσis shared andΔ ⊨ σ, andφis a consequence ofΓ ∪ {σ}, thenφmay be added to theΓcoordinate. A separatorρof the enlarged pair yields the shared separatorσ.imp ρ. This single lemma discharges both the plain shared-equality transfer and the cross-coordinate relation congruence (σ = constEq (g i) b ∈ Δ,φ = relInst R (Function.update g i b), a consequence ofrelInst R g ∈ Γtogether withσ).
The full paired family (Sent₁/Sent₂ predicates, PairedInsepFamilyMem, the right-coordinate
closures, the ConsistencyPropertyEqOn instance over the union, and the {r₁, r₂} Henkin
endpoint yielding M ⊨ r₁ ∧ ¬ M ⊨ r₂) is assembled on top of these gates in the next tranche.
Swap (dualization). Inseparability is symmetric under (Γ, Δ) ↦ (Δ, Γ) with σ ↦ σ.not:
a separator σ of (Δ, Γ) gives the separator σ.not of (Γ, Δ) (double negation on the Δ
side). Applied to swapped arguments this is an iff; every left-coordinate closure becomes a
right-coordinate one through it.
The allowed-support budget: variance and fresh growth #
The paired family carries the invariant support Γ ∪ support Δ ⊆ ↑A — A is an allowed-support
budget, not an exact support. Shrinking the budget is free; growing it by a fresh constant
(supplied by the invariant whenever c ∉ A) is the one non-trivial move, and it is exactly
constant abstraction.
Variance (shrink the budget). A smaller allowed support makes inseparability easier: every
separator allowed at A is allowed at B ⊇ A.
Fresh growth. Enlarging the allowed-support budget by a constant c fresh for Δ preserves
inseparability: a separator using c abstracts to genEx c σ, whose support lies back in A. Only
the Δ-side (∀-generalization) needs the freshness; the Γ-side is ∃-weakening. Under the family
invariant, c ∉ A already gives c ∉ support Δ.