关于如何使用Agda标准库幺半群解算器的示例

时间:2015-03-23 17:22:33

标签: agda

我正在开发一个具有很多无聊列表级联等式的代码,所以我确实想要使用一个幺半群解算器。我知道模块Algebra.Monoid-solver实现了一个幺半群解算器,但是我找不到任何关于如何使用它的例子。

有人可以使用stdlib幺半群解算器提供快速示例吗?

最佳,

1 个答案:

答案 0 :(得分:4)

这是一个简单的例子:

open import Relation.Binary.PropositionalEquality
open import Data.List
open import Data.List.Properties
open List-solver renaming (nil to :[]; _⊕_ to _:++_; _⊜_ to _:≡_)

assoc : {A : Set} (xs ys zs : List A) -> xs ++ (ys ++ zs) ≡ (xs ++ ys) ++ zs
assoc = solve 3 (λ xs ys zs -> xs :++ (ys :++ zs) :≡ (xs :++ ys) :++ zs) refl

Agda可以部分推断出类型签名:

assoc : {A : Set} (xs ys zs : List A) -> _
assoc = solve 3 (λ xs ys zs -> xs :++ (ys :++ zs) :≡ (xs :++ ys) :++ zs) refl

环解算器至少还有两个前端:12,您可以用类似的方式为幺半群解算器编写前端。

您是否考虑过使用具有定义关联性的差异列表?

同时检查this个帖子。