Agda中隐藏的关系属性

时间:2015-01-25 15:53:08

标签: agda

所以我在Agda中构建一个简单的文本编辑器,并试图在某些击键后编写校样以检查缓冲区的修改是否正确。我现在正在工作的那个是检查光标输入是不是修改缓冲区内的文本,只是光标的位置。

我有一个实用程序函数将我的缓冲区类型转换为char的列表:

Buffer -> List Char


Input:
[] <: ('H' :> 'E' :> 'L' :> 'L' :> 'O' :> []) <[
[] <: 'H' <[ <> ]> 'I' :> [] ]>
('H' :> 'E' :> 'L' :> 'L' :> 'O' :> []) :> []

Output:
('H' :> 'E' :> 'L' :> 'L' :> 'O' :> []) :>
('H' :> 'I' :> []) :> ('H' :> 'E' :> 'L' :> 'L' :> 'O' :> []) :> [] 

问题:在比较仿函数的输入和输出时,它们是反身的。然而,当我尝试将其编译为refl时,证据将无法编译,是否有一些我可能会忽略或丢失的内容,例如Agda有一些其他条件需要满足于完全反身的东西?

证明定义:

 postulate
   within_turn_into_because_ :
   {X Y : Set}(f : X -> Y)(x x' : X) ->
   x == x' -> f x == f x'

数据类型

record Cursor (M X : Set) : Set where
 constructor _<[_]>_
 field
 beforeMe  : Bwd X
 atMe      : M
 afterMe   : List X


within ((\ x -> x)) 
turn inputBuffer 
into outputBuffer
because {refl}

InputBufferOutputBuffer已被替换,以阻止可能进入和剽窃的其他学生。 Bwd是一个简单的snoc列表:

data Bwd (X : Set) : Set where
  []    : Bwd X
  _<:_  : Bwd X -> X -> Bwd X

就像我说的,这是一项大学任务,所以我不能提供更多,希望你理解。

0 个答案:

没有答案