Agda标准库提供了数据类型Maybe
,并附带了视图Any
。
然后使用Is-just
定义属性Any
。我发现使用此类型很困难,因为标准库完全没有为Any
提供工具。
因此,我正在寻找有效使用Is-just
的示例。是否有一个使用它的开源项目?
或者,我正在寻求如何充分利用它:
Is-just m
和Is-nothing m
,如何消除?可以Relation.Nullary.Negation.contradiction
在这里使用吗?p : ... → (mp : Is-just m) → ... → ... ≡ to-witness mp
归纳显示的属性p ... = {! p ... (subst Is-just m≡somethingelse mp) ... !}
,给定的术语不填充漏洞,因为它的类型为... ≡ to-witness (subst Is-just m≡somethingelse mp)
。通常使用Σ A (_≡_ m ∘ just)
比使用Is-just m
更容易。
答案 0 :(得分:1)
关于您的第一个问题,可能会导致在上下文中同时包含[No relevant source lines]
和Is-just m
的矛盾。然后,您可以使用Is-nothing m
来证明任何事情。
⊥-elim
第二个对我来说有点过于抽象,无法确定我所建议的是否会起作用,但通常的策略是尝试对类型module isJust where
open import Level
open import Data.Empty
open import Data.Maybe
contradiction :
{ℓ : Level} {A : Set ℓ} {m : Maybe A}
(j : Is-just m) (n : Is-nothing m) → ⊥
contradiction (just _) (just pr) = pr
的值进行模式匹配,或者对{ {1}}。
至于使用Maybe A
的另一个定义,我倾向于喜欢
Is-just m
因为它计算。