我对 Agda 还不熟悉,正在尝试构建 Interval 的格子。到目前为止,我已经将 Lattice 数据类型定义如下:
data 𝕀 : Set where
⊤ : 𝕀
⊥ : 𝕀
-∞ : ℤ → 𝕀
_+∞ : ℤ → 𝕀
I : (l : ℤ) → (u : ℤ) → {l ≤ u} → 𝕀
并且_⊔𝕀_
运算符为:
_⊔𝕀_ : Op₂ 𝕀
⊤ ⊔𝕀 y = ⊤
⊥ ⊔𝕀 y = y
-∞ x ⊔𝕀 ⊤ = ⊤
-∞ x ⊔𝕀 ⊥ = -∞ x
-∞ x ⊔𝕀 -∞ y = -∞ (x ⊔ y)
-∞ x ⊔𝕀 (y +∞) = ⊤
-∞ x ⊔𝕀 I l u = -∞ (x ⊔ u)
(x +∞) ⊔𝕀 ⊤ = ⊤
(x +∞) ⊔𝕀 ⊥ = x +∞
(x +∞) ⊔𝕀 -∞ y = ⊤
(x +∞) ⊔𝕀 (y +∞) = (x ⊓ y) +∞
(x +∞) ⊔𝕀 I l u = (x ⊓ l) +∞
I l u ⊔𝕀 ⊤ = ⊤
I l u {l≤u} ⊔𝕀 ⊥ = I l u {l≤u}
I l u ⊔𝕀 -∞ x = -∞ (u ⊔ x)
I l u ⊔𝕀 (x +∞) = (l ⊓ x) +∞
I l₁ u₁ {l₁≤u₁} ⊔𝕀 I l₂ u₂ {l₂≤u₂} = I (l₁ ⊓ l₂) (u₁ ⊔ u₂) {≤-trans (≤-trans (i⊓j≤i l₁ l₂) l₁≤u₁) ((i≤i⊔j u₁ u₂))}
但在试图证明以下情况下运算符的交换性时
⊔𝕀-comm (I l₁ u₁ {l₁≤u₁}) (I l₂ u₂ {l₂≤u₂}) = {!cong₂ I (⊓-comm l₁ l₂) (⊔-comm u₁ u₂)!}
我得到了错误
Cannot instantiate the metavariable _C_171 to solution
({_ : l ≤ u} → 𝕀) since it contains the variable l
which is not in scope of the metavariable
when checking that the expression I has type ℤ → ℤ → _C_171
如果我理解正确的话,这与I
构造函数具有隐式参数有关,但我不知道如何解决这个问题。