作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在思考:
In Agda is it possible to define a datatype that has equations?
我正在使用以下数据类型:
data Int : Set where
Z : Int
S : Int -> Int
P : Int -> Int
normalize : Int -> Int
normalize Z = Z
normalize (S n) with normalize n
... | P m = m
... | m = S m
normalize (P n) with normalize n
... | S m = m
... | m = P m
idempotent : (n : Int) -> normalize n \== normalize (normalize n)
idempotent (P n) = ?
(normalize (P n) | normalize n) \== normalize (normalize (P n) | normalize n)
idempotent (P n) with inspect (normalize n)
... (S m) with-\== = ?
... m with-\== = ?
normLemma : (n m : NZ) -> normalize n \== P m -> normalize (S n) \== m
normalize (S n) = case normalize n of
P k -> k
x -> S x
最佳答案
用户 维特斯 建议使用范式。
如果我们有这两个函数:
normalForm : ∀ n -> NormalForm (normalize n)
idempotent' : ∀ {n} -> NormalForm n -> normalize n ≡ n
idempotent : ∀ n -> normalize (normalize n) ≡ normalize n
idempotent = idempotent' ∘ normalForm
data NormalForm : Int -> Set where
NZ : NormalForm Z
NSZ : NormalForm (S Z)
NPZ : NormalForm (P Z)
NSS : ∀ {n} -> NormalForm (S n) -> NormalForm (S (S n))
NPP : ∀ {n} -> NormalForm (P n) -> NormalForm (P (P n))
S (S ... (S Z)...
这样的术语和
P (P ... (P Z)...)
是正常形式。
normalForm : ∀ n -> NormalForm (normalize n)
normalForm Z = NZ
normalForm (S n) with normalize n | normalForm n
... | Z | nf = NSZ
... | S _ | nf = NSS nf
... | P ._ | NPZ = NZ
... | P ._ | NPP nf = nf
normalForm (P n) with normalize n | normalForm n
... | Z | nf = NPZ
... | S ._ | NSZ = NZ
... | S ._ | NSS nf = nf
... | P _ | nf = NPP nf
idempotent' : ∀ {n} -> NormalForm n -> normalize n ≡ n
idempotent' NZ = refl
idempotent' NSZ = refl
idempotent' NPZ = refl
idempotent' (NSS p) rewrite idempotent' p = refl
idempotent' (NPP p) rewrite idempotent' p = refl
关于agda - 如何在 agda 中证明 (a | b) 形式的一种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615082/
我是一名优秀的程序员,十分优秀!