Introduction

Imandra Rule Synth is an API for synthesizing rules from log files.

Installation

To use the Imandra Rule Synth API, first install the Imandra CLI tool, imandra.

On MacOS/Unix:

Ready!
sh <(curl -s "https://storage.googleapis.com/imandra-do/install.sh")

On Windows (Powershell):

Ready!
(Invoke-WebRequest "https://storage.googleapis.com/imandra-do/install.ps1").Content | powershell -

Then add %LOCALAPPDATA%\Imandra to your PATH as prompted by the installer, and make sure your ExecutionPolicy allows %LOCALAPPDATA%\Imandra\imandra.ps1 to run.

Authentication

We will need to authenticate you for the use of the rule synth cloud API. Create an account by typing:

Ready!
imandra auth login

Submitting logs for rule synthesis

Submit your log file using the imandra rule-synth synth command. The log file should be newline delimited JSON objects representing your log entries.

Ready!
imandra rule-synth synth --file path/to/log.json

Log format

The JSON format Imandra Rule Synth expects is as follows:

  • There should be one JSON object per line in the .json file.
  • Each JSON object should represent a pair of FIX messages - the incoming message (key in_msg) and the associated outgoing message (key out_msg):
  • The value for each of these message keys should be an array of tag objects that make up the message.
{ "in_msg": [ ... <tag objects> ... ], "out_msg": [ ... <tag objects> ... ]}
{ "in_msg": [ ... <tag objects> ... ], "out_msg": [ ... <tag objects> ... ]}
  • Each tag object should have the following structure:
{
  "tag": int, // the FIX tag number
  "type": string, // the type of the value in the tag represented as a string, e.g. "string", "int" or "float"
  "option": boolean, // true if the tag is optional, false otherwise
  "value": * // the actual tag value for the message
}
  • A full (with most tags removed for brevity) example of a single line in the file would look like this:
{"in_msg": [{"tag": 8, "type": "string", "option": false, "value": "FIX.4.2"}, {"tag": 9, "type": "int", "option": false, "value": 233}, {"tag": 35, "type": "string", "option": false, "value": "D"}, ... <other tags> ...], "out_msg": [{"tag": 8, "type": "string", "option": false, "value": "FIX.4.4"}, {"tag": 9, "type": "int", "option": false, "value": 251}, {"tag": 35, "type": "string", "option": false, "value": "D"}, ... <other tags> ...]}