Union of `s₁..t₁` or `≠ t₂`
When the range constraint contains the "hole" from the non-equivalent constraint, then the result is always satisfiable. Otherwise the range constrant is subsumed by the non-equivalent constraint.
(s₁..t₁) ∨ (≠ t₂) = 𝟙 is s₁ ⊆ t₂ ∧ t₂ ⊆ t₁
= (≠ t₂) otherwise
Equationally
⟦s₁..t₁⟧ = {x | s₁ ⊆ x ∧ x ⊆ t₁}
⟦≠ t₂⟧ = {x | x ⊈ t₂ ∨ t₂ ⊈ x}
When `s₁ ⊆ t₂ ∧ t₂ ⊆ t₁`, transitivity lets us show that `t₂ ⊆ x` and `x ⊆ t₂`, which shows that `t₂` is in the result. The `≠ t₂` constraint adds every other type to the result as well.
⟦s₁..t₁ ∨ (≠ t₂)⟧
= {x | (s₁ ⊆ x ∧ x ⊆ t₁) ∨ (x ⊈ t₂ ∨ t₂ ⊈ x)}
= {x | (s₁ ⊆ x ∨ x ⊈ t₂ ∨ t₂ ⊈ x) ∧ (x ⊆ t₁ ∨ x ⊈ t₂ ∨ t₂ ⊈ x)}
= {x | (t₂ ⊆ x ∨ x ⊈ t₂ ∨ t₂ ⊈ x) ∧ (x ⊆ t₂ ∨ x ⊈ t₂ ∨ t₂ ⊈ x)}
= {x | (true ∨ x ⊈ t₂) ∧ (true ∨ t₂ ⊈ x)}
= {x | true ∧ true}
= {x | true}
= 𝟙
When `t₂ ⊂ s₁`:
[s₁ ⊆ x ∧ x ⊆ t₁]¹
─────────────────
s₁ ⊆ x [t₂ ⊂ s₁]⁰
────────────────────────
t₂ ⊂ x
──────
x ≠ t₂
──────────────────────────¹
(s₁ ⊆ x ∧ x ⊆ t₁) → x ≠ t₂
────────────────────────────────────
{x | s₁ ⊆ x ∧ x ⊆ t₁} ⊆ {x | x ≠ t₂}
─────────────────
⟦s1..t₁⟧ ⊆ ⟦≠ t₂⟧
──────────────────────────
⟦s1..t₁⟧ ∪ ⟦≠ t₂⟧ = ⟦≠ t₂⟧
────────────────────────────────────⁰
t₂ ⊂ s₁ → ⟦s1..t₁⟧ ∪ ⟦≠ t₂⟧ = ⟦≠ t₂⟧
When `s₁ ≁ t₂`:
[s₁ ⊆ x ∧ x ⊆ t₁]¹ [x = t₂]²
───────────────── ────────
s₁ ⊆ x x ⊆ t₂ [s₁ ≁ t₂]⁰
────────────────────── ─────────
s₁ ⊆ t₂ s₁ ⊈ t₂
────────────────────────────
false
──────²
x ≠ t₂
──────────────────────────¹
(s₁ ⊆ x ∧ x ⊆ t₁) → x ≠ t₂
────────────────────────────────────
{x | s₁ ⊆ x ∧ x ⊆ t₁} ⊆ {x | x ≠ t₂}
─────────────────
⟦s1..t₁⟧ ⊆ ⟦≠ t₂⟧
──────────────────────────
⟦s1..t₁⟧ ∪ ⟦≠ t₂⟧ = ⟦≠ t₂⟧
────────────────────────────────────⁰
s₁ ≁ t₂ → ⟦s1..t₁⟧ ∪ ⟦≠ t₂⟧ = ⟦≠ t₂⟧
When `t₁ ⊂ t₂`:
[s₁ ⊆ x ∧ x ⊆ t₁]¹
─────────────────
x ⊆ t₁ [t₁ ⊂ t₂]⁰
────────────────────────
x ⊂ t₂
──────
x ≠ t₂
──────────────────────────¹
(s₁ ⊆ x ∧ x ⊆ t₁) → x ≠ t₂
────────────────────────────────────
{x | s₁ ⊆ x ∧ x ⊆ t₁} ⊆ {x | x ≠ t₂}
─────────────────
⟦s1..t₁⟧ ⊆ ⟦≠ t₂⟧
──────────────────────────
⟦s1..t₁⟧ ∪ ⟦≠ t₂⟧ = ⟦≠ t₂⟧
────────────────────────────────────⁰
t₁ ⊂ t₂ → ⟦s1..t₁⟧ ∪ ⟦≠ t₂⟧ = ⟦≠ t₂⟧
When `t₁ ≁ t₂`:
[s₁ ⊆ x ∧ x ⊆ t₁]¹ [x = t₂]²
───────────────── ────────
x ⊆ t₁ t₂ ⊆ x [t₁ ≁ t₂]⁰
────────────────────── ─────────
t₂ ⊆ t₁ t₂ ⊈ t₁
────────────────────────────
false
──────²
x ≠ t₂
──────────────────────────¹
(s₁ ⊆ x ∧ x ⊆ t₁) → x ≠ t₂
────────────────────────────────────
{x | s₁ ⊆ x ∧ x ⊆ t₁} ⊆ {x | x ≠ t₂}
─────────────────
⟦s1..t₁⟧ ⊆ ⟦≠ t₂⟧
──────────────────────────
⟦s1..t₁⟧ ∪ ⟦≠ t₂⟧ = ⟦≠ t₂⟧
────────────────────────────────────⁰
t₁ ≁ t₂ → ⟦s1..t₁⟧ ∪ ⟦≠ t₂⟧ = ⟦≠ t₂⟧