3
更好的辦法,我有寫構造爲功能阿格達
data List (X : Set) : Set where
<> : List X
_,_ : X -> List X -> List X
平等
data _==_ {l}{X : Set l}(x : X) : X -> Set l where
refl : x == x
和一致性的定義
cong : forall {k l}{X : Set k}{Y : Set l}(f : X -> Y){x y} -> x == y -> f x == f y
cong f refl = refl
我試圖證明
列表propFlatten2 : {X : Set } (xs0 : List X) (x : X) (xs1 : List X) (xs2 : List X)
-> (xs0 ++ x , xs1) ++ xs2 == xs0 ++ (x , xs1 ++ xs2)
propFlatten2 <> x xs1 xs2 = refl
propFlatten2 (x , xs0) x₁ xs1 xs2 = cong (λ l -> x , l) {!!}
有沒有更好的方式直接使用構造函數_,_
而不是通過最後一行中的lambda?
你可以做'_,_ x',但是如果你需要'',''右邊的''X,恐怕你不得不使用lambda或類似'flip _ _ x'。 – Vitus 2014-11-24 00:28:47
有趣。如果你把它作爲答案,我可以將它標記爲這樣。 – nicolas 2014-11-24 09:30:05
難道你不是指'xs0 ++(x,<>)'而不是'xs0 ++ x'嗎?如果'xs1 ++ xs2'是,我不認爲後者是很好的類型。 – Cactus 2014-11-25 03:50:27