Skip to content

Commit d921bcb

Browse files
virgil-serbanutarv-auditorbbyalcinkaya
authored
Refactor sparse-bytes (#640)
* Refactor sparse-bytes * Set Version: 0.1.59 * Set Version: 0.1.119 * klabel => symbol * fix the poetry version to 1.8.3 --------- Co-authored-by: devops <[email protected]> Co-authored-by: Burak Bilge Yalçınkaya <[email protected]>
1 parent 0d2891f commit d921bcb

File tree

4 files changed

+73
-32
lines changed

4 files changed

+73
-32
lines changed

Diff for: Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ RUN groupadd -g $GROUP_ID user && useradd -m -u $USER_ID -s /bin/sh -g user user
2626
USER user:user
2727
WORKDIR /home/user
2828

29-
RUN curl -sSL https://install.python-poetry.org | python3 -
29+
RUN curl -sSL https://install.python-poetry.org | POETRY_VERSION=1.8.3 python3 -
3030

3131
RUN pip3 install --user \
3232
cytoolz \

Diff for: package/version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.1.118
1+
0.1.119

Diff for: pykwasm/pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
44

55
[tool.poetry]
66
name = "pykwasm"
7-
version = "0.1.118"
7+
version = "0.1.119"
88
description = ""
99
authors = [
1010
"Runtime Verification, Inc. <[email protected]>",

Diff for: pykwasm/src/pykwasm/kdist/wasm-semantics/data/sparse-bytes.k

+70-29
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
2-
module SPARSE-BYTES
3-
imports BOOL
1+
module SPARSE-BYTES-SYNTAX
42
imports BYTES
53
imports INT
64

@@ -9,11 +7,33 @@ module SPARSE-BYTES
97

108

119
syntax SBItemChunk ::= SBChunk(SBItem)
12-
10+
1311
syntax SparseBytes ::= List{SBItemChunk, ""}
1412

1513
syntax Bytes ::= unwrap(SparseBytes)
1614
[function, total, symbol(SparseBytes:unwrap)]
15+
16+
syntax Bytes ::= unwrap(SBItem)
17+
[function, total, symbol(SBItem:unwrap)]
18+
19+
syntax Int ::= size(SparseBytes)
20+
[function, total, symbol(SparseBytes:size)]
21+
22+
syntax Int ::= size(SBItem)
23+
[function, total, symbol(SBItem:size)]
24+
25+
syntax Bytes ::= zeros(Int) [function, total, symbol(zeros)]
26+
endmodule
27+
28+
module SPARSE-BYTES
29+
imports BOOL
30+
imports SPARSE-BYTES-SYNTAX
31+
imports REPLACE-AT-COMMON
32+
imports REPLACE-AT-CONCRETE
33+
imports REPLACE-AT-SYMBOLIC
34+
35+
// syntax Bytes ::= unwrap(SparseBytes)
36+
// [function, total, symbol(SparseBytes:unwrap)]
1737
// -----------------------------------------------------------------
1838
rule unwrap(SBChunk(SBI) REST) => unwrap(SBI) +Bytes unwrap(REST)
1939
rule unwrap(.SparseBytes) => .Bytes
@@ -23,24 +43,24 @@ module SPARSE-BYTES
2343
// ---------------------------------------------------------
2444
rule fromBytes(Bs) => SBChunk(#bytes(Bs))
2545

26-
syntax Bytes ::= unwrap(SBItem)
27-
[function, total, symbol(SBItem:unwrap)]
46+
// syntax Bytes ::= unwrap(SBItem)
47+
// [function, total, symbol(SBItem:unwrap)]
2848
// -----------------------------------------------
2949
rule unwrap(#bytes(Bs)) => Bs
3050
rule unwrap(#empty(N)) => zeros(N)
3151

32-
syntax Bytes ::= zeros(Int) [function, total, symbol(zeros)]
52+
// syntax Bytes ::= zeros(Int) [function, total, symbol(zeros)]
3353
// -------------------------------------------------------------------
3454
rule zeros(N) => padLeftBytes(.Bytes, size(#empty(N)), 0)
3555

36-
syntax Int ::= size(SparseBytes)
37-
[function, total, symbol(SparseBytes:size)]
56+
// syntax Int ::= size(SparseBytes)
57+
// [function, total, symbol(SparseBytes:size)]
3858
// ---------------------------------------------------
3959
rule size(SBChunk(SBI) SBS) => size(SBI) +Int size(SBS)
4060
rule size(.SparseBytes) => 0
4161

42-
syntax Int ::= size(SBItem)
43-
[function, total, symbol(SBItem:size)]
62+
// syntax Int ::= size(SBItem)
63+
// [function, total, symbol(SBItem:size)]
4464
// -----------------------------------------------
4565
rule size(#bytes(Bs)) => lengthBytes(Bs)
4666
rule size(#empty(N)) => maxInt(N,0)
@@ -59,7 +79,7 @@ module SPARSE-BYTES
5979
requires 0 <=Int S andBool S <=Int E
6080
andBool size(SBI) <=Int S
6181

62-
rule substrSparseBytes(SBChunk(SBI) REST, S, E)
82+
rule substrSparseBytes(SBChunk(SBI) REST, S, E)
6383
=> #let SUB = substrSBItem(SBI, S, E)
6484
#in SUB substrSparseBytes(REST, 0, E -Int size(SBI))
6585
requires 0 <=Int S andBool S <=Int E
@@ -78,22 +98,27 @@ module SPARSE-BYTES
7898
rule substrSBItem(#empty(N), S, E) => SBChunk( #empty( minInt(E, N) -Int S) )
7999
requires 0 <=Int S andBool S <=Int E
80100
andBool S <Int N
81-
101+
82102
rule substrSBItem(#bytes(Bs), S, E) => .SparseBytes
83103
requires 0 <=Int S andBool S <=Int E
84104
andBool lengthBytes(Bs) <=Int S
85105

86-
rule substrSBItem(#bytes(Bs), S, E)
106+
rule substrSBItem(#bytes(Bs), S, E)
87107
=> SBChunk(#bytes( substrBytes(Bs, S, minInt(E, lengthBytes(Bs))) ))
88108
requires 0 <=Int S andBool S <=Int E
89-
andBool S <Int lengthBytes(Bs)
109+
andBool S <Int lengthBytes(Bs)
90110

111+
endmodule
112+
113+
module REPLACE-AT-COMMON
114+
imports BOOL
115+
imports SPARSE-BYTES-SYNTAX
91116

92117
syntax SparseBytes ::= replaceAt(SparseBytes, Int, Bytes)
93118
[function, total, symbol(SparseBytes:replaceAt)]
94119
// --------------------------------------------------------
95120
// invalid argument
96-
rule replaceAt(_, S, _) => .SparseBytes
121+
rule replaceAt(_, S, _) => .SparseBytes
97122
requires S <Int 0
98123

99124
// append
@@ -105,52 +130,47 @@ module SPARSE-BYTES
105130
requires 0 <Int S
106131

107132
// skip
108-
rule replaceAt(SBChunk(SBI) REST, S, Bs)
133+
rule replaceAt(SBChunk(SBI) REST, S, Bs)
109134
=> SBChunk(SBI) replaceAt(REST, S -Int size(SBI), Bs)
110135
requires size(SBI) <=Int S
111136

112-
rule replaceAt(SBChunk(#empty(N)) REST, S, Bs) => replaceAtZ(N, REST, S, Bs)
113-
requires S <Int N
114-
rule replaceAt(SBChunk(#bytes(B)) REST, S, Bs) => replaceAtB(B, REST, S, Bs)
115-
requires S <Int lengthBytes(B)
116-
117137
syntax SparseBytes ::= replaceAtZ(Int, SparseBytes, Int, Bytes)
118138
[function, total, symbol(SparseBytes:replaceAtZ)]
119139
// ---------------------------------------------------------------
120140
////////////// S < 0
121-
rule replaceAtZ(_, _, S, _) => .SparseBytes
141+
rule replaceAtZ(_, _, S, _) => .SparseBytes
122142
requires S <Int 0
123143

124144
////////////// S > 0
125145
// split zeros: 0 < S < N
126146
rule replaceAtZ(N, REST, S, Bs)
127-
=> SBChunk(#empty(S)) replaceAtZ(N -Int S, REST, 0, Bs)
147+
=> SBChunk(#empty(S)) replaceAtZ(N -Int S, REST, 0, Bs)
128148
requires 0 <Int S
129149
andBool S <Int N
130150

131151
// skip zeros: 0 <= N <= S
132152
rule replaceAtZ(N, REST, S, Bs)
133-
=> SBChunk(#empty(N)) replaceAt(REST, S -Int N, Bs)
153+
=> SBChunk(#empty(N)) replaceAt(REST, S -Int N, Bs)
134154
requires 0 <Int S
135155
andBool 0 <=Int N
136156
andBool N <=Int S
137157

138158
////////////// S == 0
139159
///////// len(Bs) < N
140160
rule replaceAtZ(N, REST, S, Bs)
141-
=> SBChunk(#bytes(Bs)) SBChunk(#empty(N -Int lengthBytes(Bs))) REST
161+
=> SBChunk(#bytes(Bs)) SBChunk(#empty(N -Int lengthBytes(Bs))) REST
142162
requires 0 ==Int S
143163
andBool lengthBytes(Bs) <Int N
144164

145165
///////// len(Bs) = N
146166
rule replaceAtZ(N, REST, S, Bs)
147-
=> SBChunk(#bytes(Bs)) REST
167+
=> SBChunk(#bytes(Bs)) REST
148168
requires 0 ==Int S
149169
andBool lengthBytes(Bs) ==Int N
150170

151171
///////// len(Bs) > N
152172
rule replaceAtZ(N, REST, S, Bs)
153-
=> replaceAt(SBChunk(#bytes(zeros(N))) REST, S, Bs)
173+
=> replaceAt(SBChunk(#bytes(zeros(N))) REST, S, Bs)
154174
requires 0 ==Int S
155175
andBool lengthBytes(Bs) >Int N
156176

@@ -172,7 +192,7 @@ module SPARSE-BYTES
172192
Bs
173193
)
174194
requires 0 <=Int S
175-
andBool lengthBytes(MB) <Int S +Int lengthBytes(Bs)
195+
andBool lengthBytes(MB) <Int S +Int lengthBytes(Bs)
176196

177197

178198
// join list items until Bs is at least I bytes
@@ -190,5 +210,26 @@ module SPARSE-BYTES
190210
rule joinUntil(Bs, .SparseBytes, I)
191211
=> SBChunk(#bytes( padRightBytes(Bs, I, 0) ))
192212
requires I >Int lengthBytes(Bs)
213+
endmodule
214+
215+
module REPLACE-AT-CONCRETE [concrete]
216+
imports REPLACE-AT-COMMON
217+
218+
rule replaceAt(SBChunk(#empty(N)) REST, S, Bs) => replaceAtZ(N, REST, S, Bs)
219+
requires S <Int N
220+
rule replaceAt(SBChunk(#bytes(B)) REST, S, Bs) => replaceAtB(B, REST, S, Bs)
221+
requires S <Int lengthBytes(B)
222+
223+
endmodule
224+
225+
module REPLACE-AT-SYMBOLIC [symbolic]
226+
imports REPLACE-AT-COMMON
227+
228+
rule replaceAt(SBChunk(#empty(N)) REST, S, Bs) => replaceAtZ(N, REST, S, Bs)
229+
requires S <Int N
230+
[simplification, concrete]
231+
rule replaceAt(SBChunk(#bytes(B)) REST, S, Bs) => replaceAtB(B, REST, S, Bs)
232+
requires S <Int lengthBytes(B)
233+
[simplification, concrete]
193234

194235
endmodule

0 commit comments

Comments
 (0)