¶Intersection of s₁..t₁ and ≠ t₂
The intersection of a range and a non-equivalent depends on how the two types are related.
(s₁..t₁) ∧ (≠ t₂) = ∅ if s₁ = t₁ = t₂ = (s₁..t₁) if s₁ ⊈ t₂ ∨ t₂ ⊈ t₁ = (s₁..t₁) ∧ (≠ t₂) otherwise
¶Equationally
⟦s₁..t₁⟧ = {x | s₁ ⊆ x ∧ x ⊆ t₁} ⟦≠ t₂⟧ = {x | x ⊈ t₂ ∨ t₂ ⊈ x}
¶Case 1
If s₁ = t₁, then the range constraint s₁..t₁ is actually an equivalence constraint = s₁; if also s₁ = t₂, then it's intuitive that the constraints should conflict with each other.
⟦(s..s) ∧ (≠ s)⟧ = {x | s ⊆ x ∧ x ⊆ s} ∩ {x | x ⊈ s ∨ s ⊈ x} = {x | (s ⊆ x ∧ x ⊆ s) ∧ (x ⊈ s ∨ s ⊈ x)} = {x | (s ⊆ x ∧ x ⊆ s ∧ x ⊈ s) ∨ (s ⊆ x ∧ x ⊆ s ∧ s ⊈ x)} = {x | (s ⊆ x ∧ false) ∨ (false ∧ x ⊆ s)} = {x | false ∨ false} = {x | false} = ∅
¶Case 2
If s₁ ⊈ t₂ ∨ t₂ ⊈ t₁:
[s₁ ⊆ x ∧ x ⊆ t₁]¹ ───────────────── [x = t₂]² s₁ ⊆ x x ⊆ t₁ [x = t₂]² ───────────────── ───────────────── [s₁ ⊈ t₂]³ s₁ ⊆ t₂ t₂ ⊆ t₁ [t₂ ⊈ t₁]³ ─────────────────────── ──────────────────────── false false ⋮ ⋮ ⋮ [s₁ ⊈ t₂ ∨ t₂ ⊈ t₁]⁰ ⋮ ───────────────────────────────────────────³ false ───────² x ≠ t₂ ──────────────────────────¹ (s₁ ⊆ x ∧ x ⊆ t₁) → x ≠ t₂ ──────────────────────────────────── {x | s₁ ⊆ x ∧ x ⊆ t₁} ⊆ {x | x ≠ t₂} ───────────────── ⟦s₁..t₁⟧ ⊆ ⟦≠ t₂⟧ ──────────────────────────── ⟦s₁..t₁⟧ ∩ ⟦≠ t₂⟧ = ⟦s₁..t₁⟧ ──────────────────────────────────────────────────⁰ (s₁ ⊈ t₂ ∨ t₂ ⊈ t₁) → ⟦s₁..t₁⟧ ∩ ⟦≠ t₂⟧ = ⟦s₁..t₁⟧
¶Otherwise
Otherwise, the two constraints cannot be simplified.