Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS removeDuplets( getAccess(type_expr(st), trans) accessList( getAccessGen( {id}, ve, Known(type_expr(st)), func, trans)))) ], Make_ProductBinding(pb) → [ ] end else [ ] end, ExplicitFunctionDef(st, ffa, ve, precond) → case binding(st) of IdBinding(id) → case type_expr(st) of FunctionTypeExpr(arg, fa, res) → [ id ↦→ mk_FuncSpec( type_expr(st), ve, removeDuplets( getAccess(arg, trans) accessList( getAccessObs( {id}, ve, Known(type_expr(res)), func, trans)) accessList( getAccessObsOptPreCondition( {id}, precond, Known(TypeLiteral(BOOL)), func, trans))), removeDuplets( getAccess(type_expr(res), trans) accessList( getAccessGen( {id}, ve, Known(type_expr(res)), func, trans)))) ] end end end, /∗**** FUNC end ****∗/ 292
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER /∗**** ENV ****∗/ /∗Updates the environment. Types of interests that have been written to must be removed from the ENV.∗/ /∗ Arguments: ======= te: the expected type of the value expression ∗/ updateENV : ENV × ExpType × TRANS → ENV updateENV(env, et, trans) ≡ case et of Known(te) → case te of TypeName(tn) → if tn ∈ dom trans then /∗Type of interest.∗/ env \ {tn} else /∗Not type of interest.∗/ env end, → env end, Unknown → env end, /∗Sets ENV.∗/ /∗ Arguments: ======= al: the list of types of interest written to ∗/ setEnv : Access ∗ × ENV → ENV setEnv(al, env) ≡ if al = 〈〉 then env else case hd al of AccessValueOrVariableName(vn) → setEnv(tl al, env \ {id(vn)}), → setEnv(tl al, env) end 293
- 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
- Page 294 and 295: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 296 and 297: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 298 and 299: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 300 and 301: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 302 and 303: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 304 and 305: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 306 and 307: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 310 and 311: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 312 and 313: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 314 and 315: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 316 and 317: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 318 and 319: APPENDIX D. SPECIFICATION OF TRANSF
- Page 320 and 321: APPENDIX D. SPECIFICATION OF TRANSF
- Page 322 and 323: APPENDIX D. SPECIFICATION OF TRANSF
- Page 324 and 325: APPENDIX D. SPECIFICATION OF TRANSF
- Page 326 and 327: APPENDIX D. SPECIFICATION OF TRANSF
- Page 328 and 329: APPENDIX D. SPECIFICATION OF TRANSF
- Page 330 and 331: APPENDIX D. SPECIFICATION OF TRANSF
- Page 332 and 333: APPENDIX D. SPECIFICATION OF TRANSF
- Page 334 and 335: APPENDIX D. SPECIFICATION OF TRANSF
- Page 336 and 337: APPENDIX D. SPECIFICATION OF TRANSF
- Page 338 and 339: APPENDIX D. SPECIFICATION OF TRANSF
- Page 340 and 341: APPENDIX D. SPECIFICATION OF TRANSF
- Page 342 and 343: APPENDIX D. SPECIFICATION OF TRANSF
- Page 344 and 345: APPENDIX D. SPECIFICATION OF TRANSF
- Page 346 and 347: APPENDIX D. SPECIFICATION OF TRANSF
- Page 348 and 349: APPENDIX D. SPECIFICATION OF TRANSF
- Page 350 and 351: APPENDIX D. SPECIFICATION OF TRANSF
- Page 352 and 353: APPENDIX D. SPECIFICATION OF TRANSF
- Page 354 and 355: APPENDIX D. SPECIFICATION OF TRANSF
- Page 356 and 357: APPENDIX D. SPECIFICATION OF TRANSF
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />
removeDuplets(<br />
getAccess(type_expr(st), trans) <br />
accessList(<br />
getAccessGen(<br />
{id}, ve,<br />
Known(type_expr(st)), func,<br />
trans)))) ],<br />
Make_ProductBinding(pb) → [ ]<br />
end<br />
else [ ]<br />
end,<br />
ExplicitFunctionDef(st, ffa, ve, precond) →<br />
case binding(st) <strong>of</strong><br />
IdBinding(id) →<br />
case type_expr(st) <strong>of</strong><br />
FunctionTypeExpr(arg, fa, res) →<br />
[ id ↦→<br />
mk_FuncSpec(<br />
type_expr(st), ve,<br />
removeDuplets(<br />
getAccess(arg, trans) <br />
accessList(<br />
getAccessObs(<br />
{id}, ve,<br />
Known(type_expr(res)),<br />
func, trans)) <br />
accessList(<br />
getAccessObsOptPreCondition(<br />
{id}, precond,<br />
Known(TypeLiteral(BOOL)),<br />
func, trans))),<br />
removeDuplets(<br />
getAccess(type_expr(res), trans) <br />
accessList(<br />
getAccessGen(<br />
{id}, ve,<br />
Known(type_expr(res)),<br />
func, trans)))) ]<br />
end<br />
end<br />
end,<br />
/∗**** FUNC end ****∗/<br />
292