¶Intersection of s₁..t₁ and ~ t₂
The intersection of a range and a comparable depends on how the two types are related.
(s₁..t₁) ∧ (≠ t₂) = (s₁..t₁) if s₁ ⊆ t₂ ∧ t₂ ⊆ 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₂ ∧ t₂ ⊆ t₁ (which also holds when s₁ = t₁ = t₂):
⟦(s₁..t₁) ∧ (~ t₂)⟧
= {x | s₁ ⊆ x ∧ x ⊆ t₁} ∩ {x | x ⊆ t₂ ∨ t₂ ⊆ x}
= {x | s₁ ⊆ x ∧ x ⊆ t₁ ∧ (x ⊆ t₂ ∨ t₂ ⊆ x)}
= {x | (s₁ ⊆ x ∧ x ⊆ t₁ ∧ x ⊆ t₂) ∨ (s₁ ⊆ x ∧ x ⊆ t₁ ∧ t₂ ⊆ x)}
= {x | (s₁ ⊆ x ∧ x ⊆ t₁ ∧ x ⊆ t₂) ∨ (s₁ ⊆ x ∧ x ⊆ t₁ ∧ s₁ ⊆ x)}
= {x | (s₁ ⊆ x ∧ x ⊆ t₁ ∧ x ⊆ t₂) ∨ (s₁ ⊆ x ∧ x ⊆ t₁)}
= {x | (s₁ ⊆ x ∧ x ⊆ t₁ ∧ x ⊆ t₁) ∨ (s₁ ⊆ x ∧ x ⊆ t₁)}
= {x | (s₁ ⊆ x ∧ x ⊆ t₁) ∨ (s₁ ⊆ x ∧ x ⊆ t₁)}
= {x | s₁ ⊆ x ∧ x ⊆ t₁}
= ⟦s₁..t₁⟧
¶Case 2
If s₁ ≁ t₂ ∧ t₁ ≁ t₂:
[s₁ ⊆ x ∧ x ⊆ t₁ ∧ x ⊆ t₂]¹ [s₁ ⊆ x ∧ x ⊆ t₁ ∧ t₂ ⊆ x]²
────────────────────────── ──────────────────────────
s₁ ⊆ x x ⊆ t₂ [s₁ ≁ t₂ ∧ t₁ ≁ t₂]⁰ x ⊆ t₁ t₂ ⊆ x
───────────────── ─────────────────────────── ─────────────────
s₁ ⊆ t₂ s₁ ⊈ t₂ t₂ ⊈ t₁ t₂ ⊆ t₁
─────────────────────── ──────────────────────
false false
───────────────────────────¹ ───────────────────────────²
¬(s₁ ⊆ x ∧ x ⊆ t₁ ∧ x ⊆ t₂) ¬(s₁ ⊆ x ∧ x ⊆ t₁ ∧ t₂ ⊆ x)
──────────────────────────────────────────────────────────────
¬(s₁ ⊆ x ∧ x ⊆ t₁ ∧ x ⊆ t₂) ∧ ¬(s₁ ⊆ x ∧ x ⊆ t₁ ∧ t₂ ⊆ x)
──────────────────────────────────────────────────────────
¬((s₁ ⊆ x ∧ x ⊆ t₁ ∧ x ⊆ t₂) ∨ (s₁ ⊆ x ∧ x ⊆ t₁ ∧ t₂ ⊆ x))
──────────────────────────────────────────────────────────
¬(s₁ ⊆ x ∧ x ⊆ t₁ ∧ (x ⊆ t₂ ∨ t₂ ⊆ x))
─────────────────────────────────────────────
{x | s₁ ⊆ x ∧ x ⊆ t₁ ∧ (x ⊆ t₂ ∨ t₂ ⊆ x)} = ∅
─────────────────────────────────────────────────
{x | s₁ ⊆ x ∧ x ⊆ t₁} ∩ {x | x ⊆ t₂ ∨ t₂ ⊆ x} = ∅
─────────────────────────────────────────────────
⟦s₁..t₁⟧ ∩ ⟦~ t₂⟧ = ∅
───────────────────────────────────────────⁰
(s₁ ≁ t₂ ∧ t₁ ≁ t₂) → ⟦s₁..t₁⟧ ∩ ⟦~ t₂⟧ = ∅
¶Otherwise
Otherwise, the two constraints cannot be simplified.
