{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:57Z","timestamp":1779836757556,"version":"3.53.1"},"reference-count":47,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2020,8,26]],"date-time":"2020-08-26T00:00:00Z","timestamp":1598400000000},"content-version":"unspecified","delay-in-days":238,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2020]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>Many types of interactive applications, including reactive systems implemented in hardware, interactive physics simulations and games, raise particular challenges when it comes to testing and debugging. Reasons include de facto lack of reproducibility and difficulties of automatically generating suitable test data. This paper demonstrates that certain variants of functional reactive programming (FRP) implemented in pure functional languages can mitigate such difficulties by offering referential transparency at the level of whole programs. This opens up for a multi-pronged approach for assisting with testing and debugging that works across platforms, including assertions based on temporal logic, recording and replaying of runs (also from deployed code), and automated random testing using QuickCheck. When combined with extensible forms of FRP that allow for constrained side effects, it allows us to not only validate software simulations but to analyse the effect of faults in reactive systems, confirm the efficacy of fault tolerance mechanisms and perform software- and hardware-in-the-loop testing. The approach has been validated on non-trivial systems implemented in several existing FRP implementations, by means of careful debugging using a tool that allows the test or simulation under scrutiny to be controlled, moving along the execution time line, and pin-pointing of violations of assertions on personal computers as well as external devices.<\/jats:p>","DOI":"10.1017\/s0956796820000210","type":"journal-article","created":{"date-parts":[[2020,8,25]],"date-time":"2020-08-25T23:32:19Z","timestamp":1598398339000},"source":"Crossref","is-referenced-by-count":4,"title":["Runtime verification and validation of functional reactive systems"],"prefix":"10.1017","volume":"30","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-9998-0269","authenticated-orcid":false,"given":"IVAN","family":"PEREZ","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"HENRIK","family":"NILSSON","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2020,8,26]]},"reference":[{"key":"S0956796820000210_ref46","unstructured":"Winitzki, S. (2014) Temporal logic and functional reactive programming. Available at: https:\/\/github.com\/winitzki\/talks\/tree\/master\/frp"},{"key":"S0956796820000210_ref7","unstructured":"Cornelis, F. , Georges, A. , Christiaens, M. , Ronsse, M. , Ghesquiere, T. & De Bosschere, K. (2003) A taxonomy of execution replay systems. In Proceedings of International Conference on Advances in Infrastructure for Electronic Business, Education, Science, Medicine, and Mobile Technologies on the Internet."},{"key":"S0956796820000210_ref44","doi-asserted-by":"publisher","DOI":"10.1145\/349299.349331"},{"key":"S0956796820000210_ref14","volume-title":"Game Engine Architecture","author":"Gregory","year":"2014"},{"key":"S0956796820000210_ref13","unstructured":"Gray, J. (1986) Why do computers stop and what can be done about it? In Symposium on Reliability in Distributed Software and Database Systems, pp. 3\u201312."},{"key":"S0956796820000210_ref15","doi-asserted-by":"publisher","DOI":"10.1109\/ASE.2001.989799"},{"key":"S0956796820000210_ref19","doi-asserted-by":"publisher","DOI":"10.1145\/2603088.2603106"},{"key":"S0956796820000210_ref22","doi-asserted-by":"publisher","DOI":"10.1145\/1822348.1822363"},{"key":"S0956796820000210_ref11","unstructured":"Emerson, E. A. (1990) Handbook of Theoretical Computer Science (Vol. b). Cambridge, MA: MIT."},{"key":"S0956796820000210_ref42","unstructured":"Tan, L. , Sokolsky, O. & Lee, I. (2004) Specification-based testing with linear temporal logic. In Proceedings of the 2004 IEEE International Conference on Information Reuse and Integration, IRI 2004. IEEE, pp. 493\u2013498.10.1109\/IRI.2004.1431509"},{"key":"S0956796820000210_ref38","doi-asserted-by":"publisher","DOI":"10.1109\/SFCS.1977.32"},{"key":"S0956796820000210_ref8","unstructured":"Courtney, A. & Elliott, C. (2001) Genuinely functional user interfaces. In In Proceedings of the 2001 Haskell Workshop, 41\u201369."},{"key":"S0956796820000210_ref1","doi-asserted-by":"publisher","DOI":"10.1145\/1465611.1465708"},{"key":"S0956796820000210_ref2","doi-asserted-by":"publisher","DOI":"10.1109\/TC.1976.1674598"},{"key":"S0956796820000210_ref34","doi-asserted-by":"publisher","DOI":"10.1145\/2804302.2804316"},{"key":"S0956796820000210_ref16","doi-asserted-by":"publisher","DOI":"10.1016\/S0167-6423(99)00023-4"},{"key":"S0956796820000210_ref10","doi-asserted-by":"publisher","DOI":"10.1145\/258948.258973"},{"key":"S0956796820000210_ref25","doi-asserted-by":"publisher","DOI":"10.1145\/581690.581695"},{"key":"S0956796820000210_ref32","unstructured":"Perez, I. & B\u00e4renz, M. (2016) Dunai. Available at: https:\/\/github.com\/ivanperez-keera\/dunai"},{"key":"S0956796820000210_ref21","doi-asserted-by":"publisher","DOI":"10.1145\/2428116.2428128"},{"key":"S0956796820000210_ref6","volume-title":"Logics of Programs","author":"Clarke","year":"1982"},{"key":"S0956796820000210_ref31","doi-asserted-by":"publisher","DOI":"10.1145\/3236791"},{"key":"S0956796820000210_ref23","doi-asserted-by":"publisher","DOI":"10.1109\/SEFM.2005.44"},{"key":"S0956796820000210_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/2103776.2103783"},{"key":"S0956796820000210_ref29","unstructured":"Perez, I. (2017c) Yampa-test. http:\/\/hackage.haskell.org\/package\/yampa-test."},{"key":"S0956796820000210_ref17","doi-asserted-by":"publisher","DOI":"10.1145\/1808266.1808281"},{"key":"S0956796820000210_ref47"},{"key":"S0956796820000210_ref24","unstructured":"Nilsson, H. & Courtney, A. (2003) Yampa. Available at: https:\/\/github.com\/ivanperez-keera\/Yampa"},{"key":"S0956796820000210_ref26","doi-asserted-by":"publisher","DOI":"10.1145\/507669.507664"},{"key":"S0956796820000210_ref45","doi-asserted-by":"publisher","DOI":"10.1109\/52.819971"},{"key":"S0956796820000210_ref5","doi-asserted-by":"publisher","DOI":"10.1145\/351240.351266"},{"key":"S0956796820000210_ref27","doi-asserted-by":"publisher","DOI":"10.1145\/3122955.3122957"},{"key":"S0956796820000210_ref28","unstructured":"Perez, I. (2017b) Dunai-test. Available at: http:\/\/hackage.haskell.org\/package\/dunai-test"},{"key":"S0956796820000210_ref30","unstructured":"Perez, I. (2018a) Extensible and robust functional reactive programming. Ph.D. thesis, School of Computer Science, University of Nottingham."},{"key":"S0956796820000210_ref4","unstructured":"Carmack, J. (1998) John Carmack archive -.plan. Available at: http:\/\/fd.fabiensanglard.net\/doom3\/pdfs\/johnc-plan_1998.pdf"},{"key":"S0956796820000210_ref33","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796820000118"},{"key":"S0956796820000210_ref12","doi-asserted-by":"publisher","DOI":"10.1109\/ASE.2001.989841"},{"key":"S0956796820000210_ref35","doi-asserted-by":"publisher","DOI":"10.1145\/3236791"},{"key":"S0956796820000210_ref20","doi-asserted-by":"publisher","DOI":"10.1016\/j.entcs.2012.08.015"},{"key":"S0956796820000210_ref36","doi-asserted-by":"publisher","DOI":"10.1145\/2976002.2976010"},{"key":"S0956796820000210_ref37","doi-asserted-by":"publisher","DOI":"10.1109\/SMC-IT.2019.00011"},{"key":"S0956796820000210_ref3","doi-asserted-by":"publisher","DOI":"10.1145\/3242744.3242757"},{"key":"S0956796820000210_ref39","doi-asserted-by":"publisher","DOI":"10.1093\/acprof:oso\/9780198243113.001.0001"},{"key":"S0956796820000210_ref40","unstructured":"Ronsse, M. , De Bosschere, K. & De Kergommeaux, J. C. (2000) Execution replay and debugging. arxiv preprint cs\/0011006."},{"key":"S0956796820000210_ref41","unstructured":"Sculthorpe, N. (2011) Towards safe and efficient functional reactive programming. Ph.D. thesis, University of Nottingham."},{"key":"S0956796820000210_ref9","doi-asserted-by":"publisher","DOI":"10.1145\/871895.871897"},{"key":"S0956796820000210_ref43","doi-asserted-by":"publisher","DOI":"10.1145\/2503778.2503783"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796820000210","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:52Z","timestamp":1779835012000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796820000210\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020]]},"references-count":47,"alternative-id":["S0956796820000210"],"URL":"https:\/\/doi.org\/10.1017\/s0956796820000210","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020]]},"article-number":"e28"}}