# HG changeset patch # User Yasutaka Higa # Date 1412660613 -32400 # Node ID 5ba82f107a95336b2787b0a0e7604169c5e70962 # Parent a5aadebc084d05e7bd11b00610c57799a316ca5e Define Similar in Agda diff -r a5aadebc084d -r 5ba82f107a95 agda/list.agda --- a/agda/list.agda Tue Oct 07 10:38:57 2014 +0900 +++ b/agda/list.agda Tue Oct 07 14:43:33 2014 +0900 @@ -14,6 +14,9 @@ [] ++ ys = ys (x :: xs) ++ ys = x :: (xs ++ ys) +[[_]] : {A : Set} -> A -> List A +[[ x ]] = x :: [] + empty-append : {A : Set} -> (xs : List A) -> xs ++ [] ≡ [] ++ xs empty-append [] = refl diff -r a5aadebc084d -r 5ba82f107a95 agda/similar.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agda/similar.agda Tue Oct 07 14:43:33 2014 +0900 @@ -0,0 +1,25 @@ +open import list + +module similar where + +postulate String : Set +postulate show : {A : Set} -> A -> String + +data Similar (A : Set) : Set where + similar : List String -> A -> List String -> A -> Similar A + + +fmap : {A B : Set} -> (A -> B) -> (Similar A) -> (Similar B) +fmap f (similar xs x ys y) = similar xs (f x) ys (f y) + + +mu : {A : Set} -> Similar (Similar A) -> Similar A +mu (similar lx (similar llx x _ _) ly (similar _ _ lly y)) = similar (lx ++ llx) x (ly ++ lly) y + +returnS : {A : Set} -> A -> Similar A +returnS x = similar [[ (show x) ]] x [[ (show x) ]] x + +returnSS : {A : Set} -> A -> A -> Similar A +returnSS x y = similar [[ (show x) ]] x [[ (show y) ]] y + +