annotate DPP.agda @ 949:057d3309ed9d

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 04 Aug 2024 13:05:12 +0900
parents ModelChecking.agda@f2a3f5707075
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
949
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
1 {-# OPTIONS --cubical-compatible #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
2 -- {-# OPTIONS --cubical-compatible --safe #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
3 module DPP where
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Level renaming (zero to Z ; suc to succ)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Data.Nat hiding (compare)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Data.Nat.Properties as NatProp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Data.Maybe
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 -- open import Data.Maybe.Properties
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Data.Empty
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Data.List
710
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 709
diff changeset
13 -- open import Data.Tree.Binary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 709
diff changeset
14 -- open import Data.Product
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 open import Function as F hiding (const)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 open import Relation.Binary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 open import Relation.Binary.PropositionalEquality
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 open import Relation.Nullary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 open import logic
933
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 782
diff changeset
20 open import Data.Unit hiding ( _≟_ ) -- ; _≤?_ ; _≤_)
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 open import Relation.Binary.Definitions
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
949
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
23 open import ModelChecking
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
25
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
26 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
27 -- single process implemenation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
28 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
29
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
31 record Phil : Set where
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 field
714
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
33 ptr : ℕ
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 left right : AtomicNat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
36 init-Phil : Phil
714
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
37 init-Phil = record { ptr = 0 ; left = init-AtomicNat ; right = init-AtomicNat }
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
38
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
39 pickup_rfork : {n : Level} {t : Set n} → Phil → ( Phil → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
40 pickup_lfork : {n : Level} {t : Set n} → Phil → ( Phil → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
41 eating : {n : Level} {t : Set n} → Phil → ( Phil → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
42 putdown_rfork : {n : Level} {t : Set n} → Phil → ( Phil → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
43 putdown_lfork : {n : Level} {t : Set n} → Phil → ( Phil → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
44 thinking : {n : Level} {t : Set n} → Phil → ( Phil → t ) → t
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
714
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
46 pickup_rfork p next = f_set (Phil.right p) (Phil.ptr p) ( λ f → pickup_lfork record p { right = f } next )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 713
diff changeset
47 pickup_lfork p next = f_set (Phil.left p) (Phil.ptr p) ( λ f → eating record p { left = f } next )
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
48 eating p next = putdown_rfork p next
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
49 putdown_rfork p next = f_set (Phil.right p) 0 ( λ f → putdown_lfork record p { right = f } next )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
50 putdown_lfork p next = f_set (Phil.left p) 0 ( λ f → thinking record p { left = f } next )
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
51 thinking p next = next p
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
53 run : Phil
716
a36147bb596d fix context
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
54 run = pickup_rfork record { ptr = 1 ; left = record { ptr = 2 ; value = 0 } ; right = record { ptr = 3 ; value = 0 } } $ λ p → p
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
56 --
711
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 710
diff changeset
57 -- Coda Gear
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
58 --
635
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
636
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
60 data Code : Set where
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
61 C_nop : Code
711
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 710
diff changeset
62 C_cas_int : Code
636
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
63 C_putdown_rfork : Code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
64 C_putdown_lfork : Code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
65 C_thinking : Code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
66 C_pickup_rfork : Code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
67 C_pickup_lfork : Code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
68 C_eating : Code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
69
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
70 --
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
71 -- all possible arguments in -APIs
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
72 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
73
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
74 record Phil-API : Set where
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
75 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
76 next : Code
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
77 impl : Phil
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
78
711
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 710
diff changeset
79 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 710
diff changeset
80 -- Data Gear
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 710
diff changeset
81 --
721
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
82 -- waiting / pointer / available
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
83 --
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
84 data Data : Set where
715
8f8f136f2162 insertTree have some bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
85 -- D_AtomicNat : AtomicNat → ℕ → Data
710
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 709
diff changeset
86 D_AtomicNat : AtomicNat → Data
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
87 D_Phil : Phil → Data
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
88 D_Error : Error → Data
710
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 709
diff changeset
89
715
8f8f136f2162 insertTree have some bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
90 -- data API : Set where
8f8f136f2162 insertTree have some bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
91 -- A_AtomicNat : AtomicNat-API → API
8f8f136f2162 insertTree have some bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
92 -- A_Phil : Phil-API → API
710
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 709
diff changeset
93
949
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
94 -- open import hoareBinaryTree
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
95
949
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
96 data bt {n : Level} (A : Set n) : Set n where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
97 leaf : bt A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
98 node : (key : ℕ) → (value : A) →
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
99 (left : bt A ) → (right : bt A ) → bt A
711
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 710
diff changeset
100
949
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
101 updateTree : {n m : Level} {A : Set n} {t : Set m} → (tree : bt A) → (key : ℕ) → (value : A) → (empty : bt A → t ) → (next : A → bt A → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
102 updateTree = ?
711
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 710
diff changeset
103
949
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
104 insertTree : {n m : Level} {A : Set n} {t : Set m} → (tree : bt A) → (key : ℕ) → (value : A) → (next : bt A → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
105 insertTree = ?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 933
diff changeset
106
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
107
710
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 709
diff changeset
108 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 709
diff changeset
109 -- second level stub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 709
diff changeset
110 --
716
a36147bb596d fix context
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
111
721
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
112 -- putdown_rfork : Phil → (? → t) → t
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
113 -- putdown_rfork p next = goto p->lfork->cas( 0 , putdown_lfork, putdown_lfork ) , next
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
114
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
115 Phil_putdown_rfork_sub : {n : Level} {t : Set n} → Context → ( Code → Context → t ) → t
721
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
116 Phil_putdown_rfork_sub c next = next C_cas_int record c {
716
a36147bb596d fix context
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
117 c_AtomicNat-API = record { impl = Phil.right phil ; value = 0 ; fail = C_putdown_lfork ; next = C_putdown_lfork } } where
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
118 phil : Phil
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
119 phil = Phil-API.impl ( Context.c_Phil-API c )
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
120
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
121 Phil_putdown_lfork_sub : {n : Level} {t : Set n} → Context → ( Code → Context → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
122 Phil_putdown_lfork_sub c next = next C_cas_int record c {
716
a36147bb596d fix context
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
123 c_AtomicNat-API = record { impl = Phil.left phil ; value = 0 ; fail = C_thinking ; next = C_thinking } } where
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
124 phil : Phil
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
125 phil = Phil-API.impl ( Context.c_Phil-API c )
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
126
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
127 Phil_thiking : {n : Level} {t : Set n} → Context → ( Code → Context → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
128 Phil_thiking c next = next C_pickup_rfork c
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
129
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
130 Phil_pickup_lfork_sub : {n : Level} {t : Set n} → Context → ( Code → Context → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
131 Phil_pickup_lfork_sub c next = next C_cas_int record c {
716
a36147bb596d fix context
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
132 c_AtomicNat-API = record { impl = Phil.left phil ; value = Phil.ptr phil ; fail = C_pickup_lfork ; next = C_pickup_rfork } } where
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
133 phil : Phil
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
134 phil = Phil-API.impl ( Context.c_Phil-API c )
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
135
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
136 Phil_pickup_rfork_sub : {n : Level} {t : Set n} → Context → ( Code → Context → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
137 Phil_pickup_rfork_sub c next = next C_cas_int record c {
716
a36147bb596d fix context
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 715
diff changeset
138 c_AtomicNat-API = record { impl = Phil.left phil ; value = Phil.ptr phil ; fail = C_pickup_rfork ; next = C_eating } } where
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
139 phil : Phil
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
140 phil = Phil-API.impl ( Context.c_Phil-API c )
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
141
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
142 Phil_eating_sub : {n : Level} {t : Set n} → Context → ( Code → Context → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
143 Phil_eating_sub c next = next C_putdown_rfork c
709
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 708
diff changeset
144
711
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 710
diff changeset
145 code_table : {n : Level} {t : Set n} → Code → Context → ( Code → Context → t) → t
713
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 712
diff changeset
146 code_table C_nop = λ c next → next C_nop c
712
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
147 code_table C_cas_int = AtomicInt_cas_stub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
148 code_table C_putdown_rfork = Phil_putdown_rfork_sub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
149 code_table C_putdown_lfork = Phil_putdown_lfork_sub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
150 code_table C_thinking = Phil_thiking
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
151 code_table C_pickup_rfork = Phil_pickup_lfork_sub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
152 code_table C_pickup_lfork = Phil_pickup_rfork_sub
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 711
diff changeset
153 code_table C_eating = Phil_eating_sub
636
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
154
720
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
155
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
156 init-Phil-0 : (ps : List Context) → (left right : AtomicNat ) → List Context
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
157 init-Phil-0 ps left right = new-data (c1 ps) ( λ ptr → D_Phil (p ptr) ) $ λ c ptr → record c { c_Phil-API = record { next = C_thinking ; impl = p ptr }} ∷ ps where
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
158 p : ℕ → Phil
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
159 p ptr = record init-Phil { ptr = ptr ; left = left ; right = right }
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
160 c1 : List Context → Context
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
161 c1 [] = init-context
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
162 c1 (c2 ∷ ct) = c2
e9d781c38629 Ok this is a termination bug og agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 719
diff changeset
163
718
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
164 init-AtomicNat1 : {n : Level} {t : Set n} → Context → ( Context → AtomicNat → t ) → t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
165 init-AtomicNat1 c1 next = new-data c1 ( λ ptr → D_AtomicNat (a ptr) ) $ λ c2 ptr → next c2 (a ptr) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
166 a : ℕ → AtomicNat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
167 a ptr = record { ptr = ptr ; value = 0 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
168
721
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
169 init-Phil-1 : (c1 : Context) → Context
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
170 init-Phil-1 c1 = record c1 { memory = mem2 $ mem1 $ mem ; mbase = n + 3 } where
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
171 n : ℕ
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
172 n = Context.mbase c1
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
173 left = record { ptr = suc n ; value = 0}
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
174 right = record { ptr = suc (suc n) ; value = 0}
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
175 mem : bt Data
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
176 mem = insertTree ( Context.memory c1) (suc n) (D_AtomicNat left)
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
177 $ λ t → t
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
178 mem1 : bt Data → bt Data
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
179 mem1 t = insertTree t (suc (suc n)) (D_AtomicNat right )
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
180 $ λ t → t
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
181 mem2 : bt Data → bt Data
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
182 mem2 t = insertTree t (n + 3) (D_Phil record { ptr = n + 3 ; left = left ; right = right })
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
183 $ λ t → t
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
184
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
185 test-i0 : bt Data
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
186 test-i0 = Context.memory (init-Phil-1 init-context)
718
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 717
diff changeset
187
721
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
188 make-phil : ℕ → Context
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
189 make-phil zero = init-context
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
190 make-phil (suc n) = init-Phil-1 ( make-phil n )
715
8f8f136f2162 insertTree have some bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 714
diff changeset
191
721
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
192 test-i5 : bt Data
2abfce56523a init 5 phils done without infinite loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
193 test-i5 = Context.memory (make-phil 5)
708
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
194
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
195 -- loop exexution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
196
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
197 -- concurrnt execution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
198
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
199 -- state db ( binary tree of processes )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
200
722
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 721
diff changeset
201 -- depth first execution
708
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
202
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 637
diff changeset
203 -- verify temporal logic poroerries
636
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
204
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
205
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
206