{"id":19362652,"url":"https://github.com/imdea-software/hlola","last_synced_at":"2025-04-23T12:32:58.710Z","repository":{"id":79163315,"uuid":"215856912","full_name":"imdea-software/hlola","owner":"imdea-software","description":"A Runtime Verification Engine","archived":false,"fork":false,"pushed_at":"2025-03-27T18:53:52.000Z","size":13430,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-27T19:41:40.850Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imdea-software.png","metadata":{"files":{"readme":null,"changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-17T18:12:33.000Z","updated_at":"2025-03-27T18:53:56.000Z","dependencies_parsed_at":"2023-06-29T18:15:07.433Z","dependency_job_id":"1779c468-e171-4feb-acc5-0a0d66d7debf","html_url":"https://github.com/imdea-software/hlola","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fhlola","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fhlola/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fhlola/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fhlola/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imdea-software","download_url":"https://codeload.github.com/imdea-software/hlola/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250435212,"owners_count":21430237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T07:29:49.233Z","updated_at":"2025-04-23T12:32:58.684Z","avatar_url":"https://github.com/imdea-software.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![HLola logo](hlola.png)](https://software.imdea.org/hlola/)\n# HLola\n\n**HLola** is a Haskell implementation of the Stream Runtime Verification language [Lola](https://software.imdea.org/~cesar/publication/2005-dangelo05lola/).\nIn this repository, you will find the source code of **HLola**, example specifications, and the steps to use the engine and define new specifications.\nFor more information, visit the [HLola official website](https://software.imdea.org/hlola).\n\n## Docker image\n\nWe provide a [Docker image](https://hub.docker.com/r/imdeasoftware/hlola) ready to build and execute **HLola** specifications out of the box.\n\nYou can run the image with no arguments to execute a batch of specifications:\n```bash\n$\u003e docker run imdeasoftware/hlola:tacas\n```\nor you can run a set of specifications passing [their ids](#list-of-example-specifications) as arguments. You can also pass the argument `--live` to see the monitors work online. For example:\n```bash\n$\u003e docker run imdeasoftware/hlola:tacas --live PLTLCSV # or\n$\u003e docker run imdeasoftware/hlola:tacas MTLJSON # or\n$\u003e docker run imdeasoftware/hlola:tacas --live UAV2\n```\nSee the following section to find out the specification ids.\n\n## List of example specifications\n- [PLTLCSV](https://software.imdea.org/hlola/specs.html#PLTLCSV): PLTL example in CSV format\n- [PLTLJSON](https://software.imdea.org/hlola/specs.html#PLTLJSON): PLTL example in JSON format\n- [MTLCSV](https://software.imdea.org/hlola/specs.html#MTLCSV): MTL example in CSV format\n- [MTLJSON](https://software.imdea.org/hlola/specs.html#MTLJSON): MTL example in JSON format\n- [PinescriptCSV](https://software.imdea.org/hlola/specs.html#PinescriptCSV): Pinescript example in CSV format\n- [PinescriptJSON](https://software.imdea.org/hlola/specs.html#PinescriptJSON): Pinescript example in JSON format\n- [UAV1](https://software.imdea.org/hlola/specs.html#UAV1): UAV monitor example 1\n- [UAV2](https://software.imdea.org/hlola/specs.html#UAV2): UAV monitor example 2\n- [Libraries](https://software.imdea.org/hlola/specs.html#Libraries)\n\n## Description of example specifications\n- [PLTL example](https://software.imdea.org/hlola/specs.html#PLTLCSV): a Past-Linear Temporal Logic (PLTL) property for a sender/receiver model taken from [[1]](#references):\n  ```\n    G (sender.state = waitForAck =\u003e Y (H sender.state != waitForAck))\n  ```\n  which states that, it **G**lobally holds that if the _sender_ is *wait*ing*ForAck*, then **Y**esterday (i.e. at the previous instant), **H**istorically it held that the _sender state_ was not *wait*ing*ForAck*.\n  In other words, the sender waits for acknowledgement at most once during the execution.\n  The only input stream is the state of the sender at each instant.\n  The only output stream is the value of the property at each instant. (TOFIX)\n\n- [MTL example](https://software.imdea.org/hlola/specs.html#MTLCSV): a Metric Temporal Logic (MTL) property to establish deadlines between environment events and the corresponding system responses taken from [[2]](#references):\n  ```\n  G (alarm =\u003e (F[0,10] allclear || F[10,10] shutdown))\n  ```\n  The property assesses that an _alarm_ is followed by a _shutdown_ event in exactly 10 time units unless _all clear_ is sounded first.\n  The only input stream is the event happening at each instant.\n  The only output stream is the value of the property at each instant.\n\n- [Pinescript example](https://software.imdea.org/hlola/specs.html#PinescriptCSV): [TradingView](https://www.tradingview.com/) is an online charting platform for stock exchange, which offers a series-oriented language to create customized studies and signals (called Pinescript) and run them in the company servers.\n  We have implemented the indicators of Pinescript in **HLola** as a [library](https://software.imdea.org/hlola/specs.html#Libraries), and we show the implementation of [a trading strategy](https://www.tradingview.com/script/DushajXt-MACD-Strategy/) using the **HLola** Pinescript library.\n  The input streams are the _close_ and _high_ values of a stock at each day.\n  The output streams indicate how much stock to _buy_ or _sell_ every day.\n\n- [UAV specification 1](https://software.imdea.org/hlola/specs.html#UAV1): This specification is an online monitor to assess two properties over the flight of an UAV in real time:\n  1. That the UAV does not fly over forbidden regions, and\n  2. That the UAV is in good position when it takes a picture.\n\n  The input streams of this specification consist of the state of the UAV at every instant and the onboard camera events to detect when a picture is being captured.\n  The output streams are the values of properties 1. and 2.\n\n- [UAV specification 2](https://software.imdea.org/hlola/specs.html#UAV2): This specification estimates the trajectory of a flying UAV to assess if it will reach its target destination.\n  ![Fly gif](fly.gif \"Fly gif\")\n\n  The input streams are data on the state of the vehicle at every instant and its target destination.\n  The output stream shows how close to the target destination will the vehicle fly.\n\n- [Libraries](https://software.imdea.org/hlola/specs.html#Libraries): These files encompass the implementations of the libraries PLTL, MTL, Quantitative Metric Temporal Logic (QMTL) and Pinescript.\n\n## References\n[1]: Alessandro Cimatti, Marco Roveri and Daniel Sheridan \"[Bounded Verification of Past LTL](https://link.springer.com/chapter/10.1007/978-3-540-30494-4_18)\".  In Proc. of the 5th Int'l  Conf on Formal Methods in Computer-Aided Design\n(FMCAD'04)', pp 245-259, vol 3312 of LNCS, Springer, 2004.\n\n[2]: Ouaknine J., Worrell J. (2008) [Some Recent Results in Metric Temporal Logic](https://link.springer.com/chapter/10.1007/978-3-540-85778-5_1). In: Cassez F., Jard C. (eds) Formal Modeling and Analysis of Timed Systems. FORMATS 2008. Lecture Notes in Computer Science, vol 5215. Springer, Berlin, Heidelberg.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimdea-software%2Fhlola","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimdea-software%2Fhlola","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimdea-software%2Fhlola/lists"}