Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS ======= vel: the original value expression list etl: the corresponding list of expected types Result: ======= Bool: the result ∗/ containsGen : ValueExpr ∗ × ExpType ∗ × TRANS × FUNC → Bool containsGen(vel, etl, trans, func) ≡ if vel = 〈〉 then false else if isGen(hd vel, hd etl, trans, func) ∧ ∼ returnsNonTOI(hd vel, hd etl, trans, func) then true else containsGen(tl vel, tl etl, trans, func) end end, /∗Checks if a value expression is a generator. ∗/ /∗ Arguments: ======= ve: the value expression et: the expected type of the value expression Result: ======= Bool: true if the value expression is a generator, false otherwise ∗/ isGen : ValueExpr × ExpType × TRANS × FUNC → Bool isGen(ve, et, trans, func) ≡ case ve of ApplicationExpr(vea, vel) → case vea of Make_ValueOrVariableName(vn) → write_list(func(id(vn))) = 〈〉, → false end, → case et of 238
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER end, Known(te) → case te of TypeName(tn) → tn ∈ dom trans, TypeExprProduct(tel) → isGenProduct(ve, tel, trans, func), FunctionTypeExpr(arg, fa, res) → isGen( ve, Known(type_expr(res)), trans, func ), BracketedTypeExpr(bte) → isGen(ve, Known(bte), trans, func), → false end, Unknown → false end /∗Checks if a value expression is a generator. ∗/ /∗ Arguments: ======= ve: the value expression tel: the type of the value expression Result: ======= Bool: true if the value expression is a generator, false otherwise ∗/ isGenProduct : ValueExpr × TypeExpr ∗ × TRANS × FUNC → Bool isGenProduct(ve, tel, trans, func) ≡ if tel = 〈〉 then false else if isGen(ve, Known(hd tel), trans, func) then true else isGenProduct(ve, tl tel, trans, func) end end, /∗Checks if a value expression is a generator. ∗/ /∗ Arguments: ======= 239
- 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 244 and 245: 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 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
- 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
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
end,<br />
Known(te) →<br />
case te <strong>of</strong><br />
TypeName(tn) → tn ∈ dom trans,<br />
TypeExprProduct(tel) →<br />
isGenProduct(ve, tel, trans, func),<br />
FunctionTypeExpr(arg, fa, res) →<br />
isGen(<br />
ve, Known(type_expr(res)), trans, func<br />
),<br />
BracketedTypeExpr(bte) →<br />
isGen(ve, Known(bte), trans, func),<br />
→ false<br />
end,<br />
Unknown → false<br />
end<br />
/∗Checks if a value expression is a generator.<br />
∗/<br />
/∗<br />
Arguments:<br />
=======<br />
ve: the value expression<br />
tel: the type <strong>of</strong> the value expression<br />
Result:<br />
=======<br />
Bool: true if the value expression is a generator,<br />
false otherwise<br />
∗/<br />
isGenProduct :<br />
ValueExpr × TypeExpr ∗ × TRANS × FUNC → Bool<br />
isGenProduct(ve, tel, trans, func) ≡<br />
if tel = 〈〉 then false<br />
else<br />
if isGen(ve, Known(hd tel), trans, func) then true<br />
else isGenProduct(ve, tl tel, trans, func)<br />
end<br />
end,<br />
/∗Checks if a value expression is a generator.<br />
∗/<br />
/∗<br />
Arguments:<br />
=======<br />
239