Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS IdBinding(id) → [ b ↦→ et ], Make_ProductBinding(pb) → makeTYPESBindingList( binding_list(pb), expTypeToExpTypeList( removeBrackets(et), len binding_list(pb)), trans) end, /∗Makes the appropriate TYPES binding from a binding list.∗/ /∗ Arguments: ======= b: the binding list etl: the corresponding expected types ∗/ makeTYPESBindingList : Binding ∗ × ExpType ∗ × TRANS → TYPES makeTYPESBindingList(bl, etl, trans) ≡ if bl = 〈〉 then ([ ]) else makeTYPESBinding(hd bl, hd etl, trans) † makeTYPESBindingList(tl bl, tl etl, trans) end, /∗Makes the appropriate TYPES binding from a binding list.∗/ /∗ Arguments: ======= b: the binding list te: the corresponding types ∗/ makeTYPESMap : Binding ∗ × TypeExpr → TYPES makeTYPESMap(bl, te) ≡ if bl = 〈〉 then [ ] else case hd bl of IdBinding(id) → [ hd bl ↦→ Known(te) ] † makeTYPESMap(tl bl, te), Make_ProductBinding(bil) → makeTYPESMap(binding_list(bil), te) † 296
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER end end, makeTYPESMap(tl bl, te) /∗Alters TYPES when a let def list is established. ∗/ /∗ Arguments: ======= ldl: the let def list ∗/ alterTYPESMap : TYPES × LetDef ∗ → TYPES alterTYPESMap(types, ldl) ≡ if ldl = 〈〉 then types else case binding(hd ldl) of MakeBinding(b) → case b of IdBinding(id) → alterTYPESMap( types † [ b ↦→ Unknown ], tl ldl), Make_ProductBinding(bl) → alterTYPESMap( alterTYPESMapList( types, binding_list(bl)), tl ldl) end end end, /∗Alters TYPES from a binding list.∗/ /∗ Arguments: ======= bl: the binding list ∗/ alterTYPESMapList : TYPES × Binding ∗ → TYPES alterTYPESMapList(types, bl) ≡ if bl = 〈〉 then types else case hd bl of IdBinding(id) → alterTYPESMapList( types † [ hd bl ↦→ Unknown ], tl bl), Make_ProductBinding(bil) → 297
- 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 308 and 309: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 310 and 311: 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
- Page 358 and 359: APPENDIX D. SPECIFICATION OF TRANSF
- Page 360 and 361: APPENDIX D. SPECIFICATION OF TRANSF
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />
IdBinding(id) → [ b ↦→ et ],<br />
Make_ProductBinding(pb) →<br />
makeTYPESBindingList(<br />
binding_list(pb),<br />
expTypeToExpTypeList(<br />
removeBrackets(et), len binding_list(pb)),<br />
trans)<br />
end,<br />
/∗Makes the appropriate TYPES binding from a binding<br />
list.∗/<br />
/∗<br />
Arguments:<br />
=======<br />
b: the binding list<br />
etl: the corresponding expected types<br />
∗/<br />
makeTYPESBindingList :<br />
Binding ∗ × ExpType ∗ × TRANS → TYPES<br />
makeTYPESBindingList(bl, etl, trans) ≡<br />
if bl = 〈〉 then ([ ])<br />
else<br />
makeTYPESBinding(hd bl, hd etl, trans) †<br />
makeTYPESBindingList(tl bl, tl etl, trans)<br />
end,<br />
/∗Makes the appropriate TYPES binding from a binding<br />
list.∗/<br />
/∗<br />
Arguments:<br />
=======<br />
b: the binding list<br />
te: the corresponding types<br />
∗/<br />
makeTYPESMap : Binding ∗ × TypeExpr → TYPES<br />
makeTYPESMap(bl, te) ≡<br />
if bl = 〈〉 then [ ]<br />
else<br />
case hd bl <strong>of</strong><br />
IdBinding(id) →<br />
[ hd bl ↦→ Known(te) ] †<br />
makeTYPESMap(tl bl, te),<br />
Make_ProductBinding(bil) →<br />
makeTYPESMap(binding_list(bil), te) †<br />
296