Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS Bool: true if they are identical, false otherwise ∗/ equalsTypesList : TypeExprLists × TypeExprLists → Bool equalsTypesList(tel1, tel2) ≡ case tel1 of FiniteListTypeExpr(te1) → case tel2 of FiniteListTypeExpr(te2) → equalsTypes(te1, te2), → false end, InfiniteListTypeExpr(te1) → case tel2 of InfiniteListTypeExpr(te2) → equalsTypes(te1, te2), → false end end, /∗Compares two map type expressions.∗/ /∗ Arguments: ======= tel1: the map type expression tel2: the map type expression Results: ===== Bool: true if they are identical, false otherwise ∗/ equalsTypesMap : TypeExprMaps × TypeExprMaps → Bool equalsTypesMap(tem1, tem2) ≡ case tem1 of FiniteMapTypeExpr(tedom1, terange1) → case tem2 of FiniteMapTypeExpr(tedom2, terange2) → equalsTypes(tedom1, tedom2) ∧ equalsTypes(terange1, terange2), → false end, InfiniteMapTypeExpr(tedom1, terange1) → case tem2 of InfiniteMapTypeExpr(tedom2, terange2) → equalsTypes(tedom1, tedom2) ∧ 228
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER end, end equalsTypes(terange1, terange2), → false /∗**** TypeExpr end ****∗/ /∗**** ExpType ****∗/ /∗Gets the head of an expected type which is a TypeExprProduct.∗/ /∗ Arguments: ======= et: the expected type Results: ===== ExpType: the head of the TypeExprProduct of the expected type ∗/ getHead : ExpType → ExpType getHead(et) ≡ case et of Known(te) → case te of TypeExprProduct(tel) → case hd tel of BracketedTypeExpr(bte) → Known(bte), → Known(hd tel) end, → Unknown end, Unknown → Unknown end, /∗Gets the tail of an expected type which is a TypeExprProduct.∗/ /∗ Arguments: ======= et: the expected type Results: ===== ExpType: the tail of the TypeExprProduct of the 229
- Page 194 and 195: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 196 and 197: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 198 and 199: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 200 and 201: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 202 and 203: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 204 and 205: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 206 and 207: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 208 and 209: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 210 and 211: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 212 and 213: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 214 and 215: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 216 and 217: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 218 and 219: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 220 and 221: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 222 and 223: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 224 and 225: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 226 and 227: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 228 and 229: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 230 and 231: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 232 and 233: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 234 and 235: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 236 and 237: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 238 and 239: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 240 and 241: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 242 and 243: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 246 and 247: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 248 and 249: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 250 and 251: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 252 and 253: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 254 and 255: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 256 and 257: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 258 and 259: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 260 and 261: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 262 and 263: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 264 and 265: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 266 and 267: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 268 and 269: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 270 and 271: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 272 and 273: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 274 and 275: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 276 and 277: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 278 and 279: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 280 and 281: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 282 and 283: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 284 and 285: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 286 and 287: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 288 and 289: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 290 and 291: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 292 and 293: APPENDIX C. FORMAL SPECIFICATIONS O
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />
Bool: true if they are identical, false otherwise<br />
∗/<br />
equalsTypesList :<br />
TypeExprLists × TypeExprLists → Bool<br />
equalsTypesList(tel1, tel2) ≡<br />
case tel1 <strong>of</strong><br />
FiniteListTypeExpr(te1) →<br />
case tel2 <strong>of</strong><br />
FiniteListTypeExpr(te2) →<br />
equalsTypes(te1, te2),<br />
→ false<br />
end,<br />
InfiniteListTypeExpr(te1) →<br />
case tel2 <strong>of</strong><br />
InfiniteListTypeExpr(te2) →<br />
equalsTypes(te1, te2),<br />
→ false<br />
end<br />
end,<br />
/∗Compares two map type expressions.∗/<br />
/∗<br />
Arguments:<br />
=======<br />
tel1: the map type expression<br />
tel2: the map type expression<br />
Results:<br />
=====<br />
Bool: true if they are identical, false otherwise<br />
∗/<br />
equalsTypesMap : TypeExprMaps × TypeExprMaps → Bool<br />
equalsTypesMap(tem1, tem2) ≡<br />
case tem1 <strong>of</strong><br />
FiniteMapTypeExpr(tedom1, terange1) →<br />
case tem2 <strong>of</strong><br />
FiniteMapTypeExpr(tedom2, terange2) →<br />
equalsTypes(tedom1, tedom2) ∧<br />
equalsTypes(terange1, terange2),<br />
→ false<br />
end,<br />
InfiniteMapTypeExpr(tedom1, terange1) →<br />
case tem2 <strong>of</strong><br />
InfiniteMapTypeExpr(tedom2, terange2) →<br />
equalsTypes(tedom1, tedom2) ∧<br />
228