Mercurial > hg > Members > atton > delta_monad
annotate agda/patterns.rb @ 69:295e8ed39c0c
Change headDelta definition. return non-delta value
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 27 Nov 2014 19:12:44 +0900 |
parents | f9c9207c40b7 |
children |
rev | line source |
---|---|
61
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #!/usr/bin/env ruby |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 require 'pry' |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 # Agda {{{ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 Agda = %q( |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 open import list |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 open import basic |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 open import Level |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 open import Relation.Binary.PropositionalEquality |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 open ≡-Reasoning |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 module hoge where |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 data Delta {l : Level} (A : Set l) : (Set (suc l)) where |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 mono : A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 delta : A -> Delta A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 deltaAppend : {l : Level} {A : Set l} -> Delta A -> Delta A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 deltaAppend (mono x) d = delta x d |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 deltaAppend (delta x d) ds = delta x (deltaAppend d ds) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 headDelta : {l : Level} {A : Set l} -> Delta A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 headDelta (mono x) = mono x |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 headDelta (delta x _) = mono x |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 tailDelta : {l : Level} {A : Set l} -> Delta A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 tailDelta (mono x) = mono x |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 tailDelta (delta _ d) = d |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 -- Functor |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 fmap : {l ll : Level} {A : Set l} {B : Set ll} -> (A -> B) -> (Delta A) -> (Delta B) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 fmap f (mono x) = mono (f x) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 fmap f (delta x d) = delta (f x) (fmap f d) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 -- Monad (Category) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 eta : {l : Level} {A : Set l} -> A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 eta x = mono x |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 bind : {l ll : Level} {A : Set l} {B : Set ll} -> (Delta A) -> (A -> Delta B) -> Delta B |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 bind (mono x) f = f x |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 bind (delta x d) f = deltaAppend (headDelta (f x)) (bind d (tailDelta ∙ f)) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 -- can not apply id. because different Level |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 mu : {l : Level} {A : Set l} -> Delta (Delta A) -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 mu d = bind d id |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 returnS : {l : Level} {A : Set l} -> A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 returnS x = mono x |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 returnSS : {l : Level} {A : Set l} -> A -> A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 returnSS x y = deltaAppend (returnS x) (returnS y) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 -- Monad (Haskell) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 return : {l : Level} {A : Set l} -> A -> Delta A |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 return = eta |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 _>>=_ : {l ll : Level} {A : Set l} {B : Set ll} -> |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 (x : Delta A) -> (f : A -> (Delta B)) -> (Delta B) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 (mono x) >>= f = f x |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 (delta x d) >>= f = deltaAppend (headDelta (f x)) (d >>= (tailDelta ∙ f)) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 -- proofs |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 -- Functor-laws |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 -- Functor-law-1 : T(id) = id' |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 functor-law-1 : {l : Level} {A : Set l} -> (d : Delta A) -> (fmap id) d ≡ id d |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 functor-law-1 (mono x) = refl |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 functor-law-1 (delta x d) = cong (delta x) (functor-law-1 d) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 -- Functor-law-2 : T(f . g) = T(f) . T(g) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 functor-law-2 : {l ll lll : Level} {A : Set l} {B : Set ll} {C : Set lll} -> |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 (f : B -> C) -> (g : A -> B) -> (d : Delta A) -> |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 (fmap (f ∙ g)) d ≡ ((fmap f) ∙ (fmap g)) d |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 functor-law-2 f g (mono x) = refl |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 functor-law-2 f g (delta x d) = cong (delta (f (g x))) (functor-law-2 f g d) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 -- Monad-laws (Category) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 {- |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 monad-law-1-sub : {l : Level} {A : Set l} -> (x : Delta (Delta A)) (d : Delta (Delta (Delta A))) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 -> deltaAppend (headDelta (bind x id)) (bind (fmap mu d) (tailDelta ∙ id)) ≡ bind (deltaAppend (headDelta x) (bind d (tailDelta ∙ id))) id |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 monad-law-1-sub (mono x) (mono (mono (mono x₁))) = refl |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 monad-law-1-sub (mono x) (mono (mono (delta x₁ d))) = refl |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 monad-law-1-sub (mono x) (mono (delta d d1)) = begin |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 deltaAppend (headDelta (bind (mono x) id)) (bind (fmap mu (mono (delta d d1))) (tailDelta ∙ id)) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 ≡⟨ refl ⟩ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 deltaAppend (headDelta (bind (mono x) id)) (bind ((mono (mu (delta d d1)))) (tailDelta ∙ id)) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 ≡⟨ refl ⟩ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 deltaAppend (headDelta (bind (mono x) id)) (bind (mono (bind (delta d d1) id)) (tailDelta ∙ id)) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 ≡⟨ refl ⟩ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 deltaAppend (headDelta (mu (mono x))) (((tailDelta ∙ id) (mu (delta d d1)))) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 ≡⟨ refl ⟩ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 deltaAppend (headDelta (mu (mono x))) (((tailDelta ∙ id) (bind (delta d d1) id))) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 ≡⟨ {!!} ⟩ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 deltaAppend (headDelta (mu (mono x))) (((tailDelta ∙ id) (bind (delta d d1) id))) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 -- bind (delta (mu (mono x)) (mono (mu (delta d d1)))) id |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 ≡⟨ {!!} ⟩ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 bind (deltaAppend (headDelta (mono x)) (bind (mono (delta d d1)) (tailDelta ∙ id))) id |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 ∎ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 monad-law-1-sub (delta x x₁) (mono d) = {!!} |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 monad-law-1-sub x (delta d d1) = begin |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 deltaAppend (headDelta (bind x id)) (bind (fmap mu (delta d d1)) (tailDelta ∙ id)) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 ≡⟨ {!!} ⟩ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 bind (deltaAppend (headDelta x) (bind (delta d d1) (tailDelta ∙ id))) id |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 ∎ |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 -} |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 -- monad-law-1 : join . fmap join = join . join |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 monad-law-1 : {l : Level} {A : Set l} -> (d : Delta (Delta (Delta A))) -> ((mu ∙ (fmap mu)) d) ≡ ((mu ∙ mu) d) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 ) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 # }}} |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 Rules = { |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 'T3' => ['(mono T2)', '(delta T2 T3)'], |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 'T2' => ['(mono T1)', '(delta T1 T2)'], |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 'T1' => ['(mono _)', '(delta _ T1)'] |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 } |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 def generate_patterns source_patterns, operations |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 patterns = source_patterns.clone |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 operations.each do |op| |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 patterns = Rules[op].flat_map do |r| |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 patterns.flat_map{|p| p.gsub(op, r)} |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 end |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 end |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 patterns.uniq |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 end |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 def pattern_formatter non_format_patterns |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 formatted_patterns = non_format_patterns.clone |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 Rules.keys.each do |k| |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 formatted_patterns.map!{|p| p.gsub(k, '_')} |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 end |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 formatted_patterns |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 end |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 def generate_function function_name, patterns, body |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 patterns.map do |p| |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 "#{function_name} #{p} = #{body}" |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 end |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 end |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 def generate_agda function_body |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 Agda + function_body.join("\n") |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 end |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 |
68
f9c9207c40b7
Trying prove monad-law-1 by another pattern ....
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
61
diff
changeset
|
166 patterns = ['(delta T2 (delta T2 (delta T2 _)))'] |
f9c9207c40b7
Trying prove monad-law-1 by another pattern ....
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
61
diff
changeset
|
167 operations = ['T2'].cycle(2).to_a + ['T1'].cycle(4).to_a |
61
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 patterns = generate_patterns(patterns, operations) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 puts patterns.size |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 function_body = generate_function('monad-law-1', pattern_formatter(patterns), 'refl') |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 agda = generate_agda(function_body) |
18a0520445df
Add patterns generator
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 File.open('hoge.agda', 'w').write(agda) |
68
f9c9207c40b7
Trying prove monad-law-1 by another pattern ....
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
61
diff
changeset
|
176 binding.pry |