[Topl] add doc and change TOPL -> Topl

Summary:
Copied the documentation from a document created by rgrig
(thanks!!).

Reviewed By: rgrig

Differential Revision: D27325829

fbshipit-source-id: 118e1a2be
master
Jules Villard 4 years ago committed by Facebook GitHub Bot
parent 6f83c45e47
commit f9b6f2bdf1

@ -0,0 +1,97 @@
# Topl
## What is it?
Topl is an analysis framework, built on top of Infer, for statically finding violations of temporal properties. Many analyses can be encoded as temporal properties supported by Topl, such as taint analysis. As a simple example, suppose that we don't want a value returned by method `source()` to be sent as an argument to a method `sink()`. This can be specified as follows:
```
property Taint
prefix "Main"
start -> start: *
start -> tracking: source(Ret) => x := Ret
tracking -> error: sink(Arg, VoidRet) when x == Arg
```
This specifies an automaton called `Taint` that has three states (`start`, `tracking`, `error`). Two of those states (`start` and `error`) have special meaning; other states (`tracking`) can have any names. The first transition (`start → tracking`) is taken when a method called `source()` is called, and its return value is stored in a register called `x`; the second transition (`tracking → error`) is taken when a method called `sink()` is called, but only if its argument equals what was previously saved in register `x`.
This property is violated in the following Java code:
```
public class Main {
static void f() { g(tito(source())); }
static void g(Object x) { h(x); }
static void h(Object x) { sink(x); }
static Object tito(Object x) { return x; }
static Object source() { return "dirty"; }
static void sink(Object x) {}
}
```
Note that `source()` and `sink()` are not called from the same method, and that the “dirty” object is passed around a few times before finally reaching the sink. Assuming that the property is in a file `taint.topl` and the Java code in a file `Main.java`, you can invoke Infer with the following command:
```
infer --topl --topl-properties taint.topl -- javac Main.java
```
It will display the following error:
```
Main.java:2: error: Topl Error
property Taint reaches state error.
1. public class Main {
2. > static void f() { g(tito(source())); }
3. static void g(Object x) { h(x); }
4. static void h(Object x) { sink(x); }
```
To get a full trace, use the command
```
infer explore
```
## Specifying Properties
A property is a nondeterministic automaton that can remember values in registers. An execution that drives the automaton from the start state to the error state will make Infer report an issue, and the trace that it produces will indicate which parts of the program drive which transitions of the automaton.
The general form of a property is the following:
```
property *Name
* message "Optional error message" // This line can be missing
prefix "Prefix" // There can be zero, one, or more prefix declarations
sourceState -> targetState: *Pattern*(Arg1,...,ArgN,Ret) when *Condition* => *Action*
```
The property name and the optional error message are used for reporting issues. The prefix declarations are used to simplify Patterns. The core of the property is the list of transitions.
Each transition has a source state and a target state. The special transition label * means that the transition is always taken. Typically, there is a transition
```
start -> start: *
```
meaning that the property can start anywhere, not just at the beginning of a method.
Otherwise, the label on a transition contains:
* a *Pattern*, which indicates what kind of instruction in the program drives this transition;
* a list of transition variable bindings (above named Arg1, ..., but any identifier starting with uppercase letters works);
* possibly a boolean Condition, which can refer to transition variables and to registers;
* possibly and Action, which is a list sequence of assignments of the form *register* := *TransitionVariable* (registers do not need to be declared, and any identifier starting with a lowercase letter works).
There are two types of patterns:
* a regex that matches method names
* if the regex uses non-letters (such as dots) it must be within double-quotes; otherwise, double quotes are optional
* the prefix declarations are used to add potential prefixes to the regex. The combine regex is essentially “(prefix_regex_a | prefix_regex_b) transition_pattern_regex“
* for a method with n arguments, there must be n+1 transition variables to get a match. The first n transition variables get bound to the argument values, and the last transition variable gets bound to the return value. *This is true even for the case in which the return type is void*.
* the special keyword **#ArrayWrite**. In that case, there should be two transition variables like “(Array, Index)” — Array gets bound to the array object, and Index gets bound to the index at which the write happens.
For several examples, see https://github.com/facebook/infer/tree/master/infer/tests/codetoanalyze/java/topl
## Limitations
* By design, some problems may be missed. Topl is built on Pulse, which attempts to minimize false positives, at the cost of sometimes having false negatives.
* Analysis time increases exponentially with the number of registers used in properties.
* In theory, there should be no significant slowdown if registers belong to different properties, but the implementation is not yet optimized.
* If there are many registers within the same property, then the slowdown is unavoidable (without some significant breakthrough). However, the maximum number of registers we ever used for one practical property was 3.

@ -411,9 +411,9 @@ OPTIONS
(Conversely: --no-starvation-only)
--topl
Activates: checker topl: Detects errors based on user-provided
state machines describing multi-object monitors. (Conversely:
--no-topl)
Activates: checker topl: Detect errors based on user-provided
state machines describing temporal properties over multiple
objects. (Conversely: --no-topl)
--topl-only
Activates: Enable topl and disable all other checkers (Conversely:

@ -1257,9 +1257,9 @@ OPTIONS
@ThreadSafe See also infer-analyze(1).
--topl
Activates: checker topl: Detects errors based on user-provided
state machines describing multi-object monitors. (Conversely:
--no-topl) See also infer-analyze(1).
Activates: checker topl: Detect errors based on user-provided
state machines describing temporal properties over multiple
objects. (Conversely: --no-topl) See also infer-analyze(1).
--topl-only
Activates: Enable topl and disable all other checkers (Conversely:
@ -2126,7 +2126,7 @@ INTERNAL OPTIONS
scheduler. (Conversely: --no-trace-ondemand)
--trace-topl
Activates: Detailed tracing information during TOPL analysis
Activates: Detailed tracing information during Topl analysis
(Conversely: --no-trace-topl)
--tv-commit commit

@ -1257,9 +1257,9 @@ OPTIONS
@ThreadSafe See also infer-analyze(1).
--topl
Activates: checker topl: Detects errors based on user-provided
state machines describing multi-object monitors. (Conversely:
--no-topl) See also infer-analyze(1).
Activates: checker topl: Detect errors based on user-provided
state machines describing temporal properties over multiple
objects. (Conversely: --no-topl) See also infer-analyze(1).
--topl-only
Activates: Enable topl and disable all other checkers (Conversely:

@ -10,9 +10,9 @@
(:standard -open Core -open IStdlib -open IStd -open OpenSource -open
ATDGenerated -open IBase -open IR -open Absint -open Biabduction -open BO
-open Nullsafe -open Pulselib -open Checkers -open Costlib -open Quandary
-open TOPLlib -open Concurrency -open Labs -open Dotnet))
-open Topllib -open Concurrency -open Labs -open Dotnet))
(libraries core memtrace IStdlib ATDGenerated IBase IR Absint Biabduction
Nullsafe BO Checkers Costlib Quandary TOPLlib Concurrency Labs Dotnet)
Nullsafe BO Checkers Costlib Quandary Topllib Concurrency Labs Dotnet)
(preprocess
(pps ppx_compare ppx_fields_conv ppx_yojson_conv)))

@ -37,7 +37,7 @@ type t =
| SIOF
| SelfInBlock
| Starvation
| TOPL
| Topl
| Uninit
[@@deriving equal, enumerate]
@ -409,12 +409,14 @@ let config_unsafe checker =
; cli_flags= Some {deprecated= []; show_in_help= true}
; enabled_by_default= true
; activates= [] }
| TOPL ->
| Topl ->
{ id= "topl"
; kind= UserFacing {title= "TOPL"; markdown_body= ""}
; kind=
UserFacing {title= "Topl"; markdown_body= [%blob "../../documentation/checkers/Topl.md"]}
; support= supports_clang_and_java_experimental
; short_documentation=
"Detects errors based on user-provided state machines describing multi-object monitors."
"Detect errors based on user-provided state machines describing temporal properties over \
multiple objects."
; cli_flags= Some {deprecated= []; show_in_help= true}
; enabled_by_default= false
; activates= [Pulse] }

@ -36,7 +36,7 @@ type t =
| SIOF
| SelfInBlock
| Starvation
| TOPL
| Topl
| Uninit
[@@deriving equal, enumerate]

@ -2500,7 +2500,7 @@ and trace_ondemand =
and trace_topl =
CLOpt.mk_bool ~long:"trace-topl" "Detailed tracing information during TOPL analysis"
CLOpt.mk_bool ~long:"trace-topl" "Detailed tracing information during Topl analysis"
and tv_commit =

@ -920,7 +920,10 @@ let complexity_increase ~kind ~is_on_ui_thread =
register_cost ~kind ~is_on_ui_thread "%s_COMPLEXITY_INCREASE"
let topl_error = register ~id:"TOPL_ERROR" Error TOPL ~user_documentation:"Experimental."
let topl_error =
register ~id:"TOPL_ERROR" Error Topl
~user_documentation:"A violation of a Topl property (user-specified)."
let uninitialized_value =
register ~id:"UNINITIALIZED_VALUE" Error Uninit

@ -99,7 +99,7 @@ let infertop_stanza =
(modes byte_complete)
(modules Infertop)
(flags (:standard -open Core -open IStdlib -open IStd))
(libraries %s utop Absint ASTLanguage ATDGenerated Backend IBase Biabduction BO Checkers Concurrency Costlib CStubs IR IStdlib Labs Dotnet Nullsafe Pulselib Quandary Integration TestDeterminators TOPLlib UnitTests)
(libraries %s utop Absint ASTLanguage ATDGenerated Backend IBase Biabduction BO Checkers Concurrency Costlib CStubs IR IStdlib Labs Dotnet Nullsafe Pulselib Quandary Integration TestDeterminators Topllib UnitTests)
(link_flags (-linkall -warn-error -31))
(preprocess (pps ppx_compare))
(promote (until-clean) (into ../bin))

@ -99,7 +99,7 @@ type t =
[@@deriving compare, equal, yojson_of]
let pp f {post; pre; topl; path_condition; skipped_calls} =
F.fprintf f "@[<v>%a@;%a@;PRE=[%a]@;skipped_calls=%a@;TOPL=%a@]" PathCondition.pp path_condition
F.fprintf f "@[<v>%a@;%a@;PRE=[%a]@;skipped_calls=%a@;Topl=%a@]" PathCondition.pp path_condition
PostDomain.pp post PreDomain.pp pre SkippedCalls.pp skipped_calls PulseTopl.pp_state topl

@ -246,7 +246,7 @@ let get env x =
| Some v ->
v
| None ->
L.die InternalError "TOPL: Cannot find %s. Should be caught by static checks" x
L.die InternalError "Topl: Cannot find %s. Should be caught by static checks" x
let set = List.Assoc.add ~equal:String.equal
@ -378,7 +378,7 @@ let dummy_tenv = Tenv.create ()
let is_unsat_expensive path_condition pruned =
let _path_condition, unsat, _new_eqs =
(* Not enabling dynamic type reasoning in TOPL for now *)
(* Not enabling dynamic type reasoning in Topl for now *)
PathCondition.is_unsat_expensive dummy_tenv
~get_dynamic_type:(fun _ -> None)
(Constraint.prune_path pruned path_condition)
@ -614,6 +614,6 @@ let report_errors proc_desc err_log state =
let loc = Procdesc.get_loc proc_desc in
let ltr = make_trace 0 [] q in
let message = Format.asprintf "%a" ToplAutomaton.pp_message_of_state (a, q.post.vertex) in
Reporting.log_issue proc_desc err_log ~loc ~ltr TOPL IssueType.topl_error message
Reporting.log_issue proc_desc err_log ~loc ~ltr Topl IssueType.topl_error message
in
List.iter ~f:report_simple_state state

@ -8,7 +8,7 @@
(public_name infer.Pulselib)
(flags
(:standard -open Core -open IR -open IStdlib -open IStd -open ATDGenerated
-open IBase -open Absint -open BO -open TOPLlib -open Nullsafe))
(libraries core IStdlib ATDGenerated IBase IR Absint BO TOPLlib Nullsafe)
-open IBase -open Absint -open BO -open Topllib -open Nullsafe))
(libraries core IStdlib ATDGenerated IBase IR Absint BO Topllib Nullsafe)
(preprocess
(pps ppx_yojson_conv ppx_compare ppx_variants_conv)))

@ -25,4 +25,4 @@ let properties = lazy (List.concat_map ~f:parse Config.topl_properties)
let automaton () = ToplAutomaton.make (Lazy.force properties)
let is_active () = Config.is_checker_enabled TOPL && not (List.is_empty (Lazy.force properties))
let is_active () = Config.is_checker_enabled Topl && not (List.is_empty (Lazy.force properties))

@ -7,7 +7,7 @@
open! IStd
(* An automaton is a different representation for a set of TOPL properties: states and transitions
(* An automaton is a different representation for a set of Topl properties: states and transitions
are identified by nonnegative integers; and transitions are grouped by their source. Also, the
meaning of transition labels does not depend on context (e.g., prefixes are now included).

@ -10,8 +10,8 @@
(modules ToplParser))
(library
(name TOPLlib)
(public_name infer.TOPLlib)
(name Topllib)
(public_name infer.Topllib)
(flags
(:standard -open Core -open IR -open IStdlib -open IStd -open ATDGenerated
-open IBase -open Absint -open Biabduction))

@ -29,7 +29,7 @@ open Pulselib;;
open Checkers;;
open Costlib;;
open Quandary;;
open TOPLlib;;
open Topllib;;
open Concurrency;;
open Labs;;
open OpenSource;;

@ -2230,7 +2230,7 @@ These annotations can be found at `com.facebook.infer.annotation.*`.
Reported as "Topl Error" by [topl](/docs/next/checker-topl).
Experimental.
A violation of a Topl property (user-specified).
## UNINITIALIZED_VALUE
Reported as "Uninitialized Value" by [uninit](/docs/next/checker-uninit).

@ -1,9 +1,9 @@
---
title: "TOPL"
description: "Detects errors based on user-provided state machines describing multi-object monitors."
title: "Topl"
description: "Detect errors based on user-provided state machines describing temporal properties over multiple objects."
---
Detects errors based on user-provided state machines describing multi-object monitors.
Detect errors based on user-provided state machines describing temporal properties over multiple objects.
Activate with `--topl`.
@ -12,6 +12,103 @@ Supported languages:
- Java: Experimental
- C#/.Net: Experimental
# Topl
## What is it?
Topl is an analysis framework, built on top of Infer, for statically finding violations of temporal properties. Many analyses can be encoded as temporal properties supported by Topl, such as taint analysis. As a simple example, suppose that we don't want a value returned by method `source()` to be sent as an argument to a method `sink()`. This can be specified as follows:
```
property Taint
prefix "Main"
start -> start: *
start -> tracking: source(Ret) => x := Ret
tracking -> error: sink(Arg, VoidRet) when x == Arg
```
This specifies an automaton called `Taint` that has three states (`start`, `tracking`, `error`). Two of those states (`start` and `error`) have special meaning; other states (`tracking`) can have any names. The first transition (`start → tracking`) is taken when a method called `source()` is called, and its return value is stored in a register called `x`; the second transition (`tracking → error`) is taken when a method called `sink()` is called, but only if its argument equals what was previously saved in register `x`.
This property is violated in the following Java code:
```
public class Main {
static void f() { g(tito(source())); }
static void g(Object x) { h(x); }
static void h(Object x) { sink(x); }
static Object tito(Object x) { return x; }
static Object source() { return "dirty"; }
static void sink(Object x) {}
}
```
Note that `source()` and `sink()` are not called from the same method, and that the “dirty” object is passed around a few times before finally reaching the sink. Assuming that the property is in a file `taint.topl` and the Java code in a file `Main.java`, you can invoke Infer with the following command:
```
infer --topl --topl-properties taint.topl -- javac Main.java
```
It will display the following error:
```
Main.java:2: error: Topl Error
property Taint reaches state error.
1. public class Main {
2. > static void f() { g(tito(source())); }
3. static void g(Object x) { h(x); }
4. static void h(Object x) { sink(x); }
```
To get a full trace, use the command
```
infer explore
```
## Specifying Properties
A property is a nondeterministic automaton that can remember values in registers. An execution that drives the automaton from the start state to the error state will make Infer report an issue, and the trace that it produces will indicate which parts of the program drive which transitions of the automaton.
The general form of a property is the following:
```
property *Name
* message "Optional error message" // This line can be missing
prefix "Prefix" // There can be zero, one, or more prefix declarations
sourceState -> targetState: *Pattern*(Arg1,...,ArgN,Ret) when *Condition* => *Action*
```
The property name and the optional error message are used for reporting issues. The prefix declarations are used to simplify Patterns. The core of the property is the list of transitions.
Each transition has a source state and a target state. The special transition label * means that the transition is always taken. Typically, there is a transition
```
start -> start: *
```
meaning that the property can start anywhere, not just at the beginning of a method.
Otherwise, the label on a transition contains:
* a *Pattern*, which indicates what kind of instruction in the program drives this transition;
* a list of transition variable bindings (above named Arg1, ..., but any identifier starting with uppercase letters works);
* possibly a boolean Condition, which can refer to transition variables and to registers;
* possibly and Action, which is a list sequence of assignments of the form *register* := *TransitionVariable* (registers do not need to be declared, and any identifier starting with a lowercase letter works).
There are two types of patterns:
* a regex that matches method names
* if the regex uses non-letters (such as dots) it must be within double-quotes; otherwise, double quotes are optional
* the prefix declarations are used to add potential prefixes to the regex. The combine regex is essentially “(prefix_regex_a | prefix_regex_b) transition_pattern_regex“
* for a method with n arguments, there must be n+1 transition variables to get a match. The first n transition variables get bound to the argument values, and the last transition variable gets bound to the return value. *This is true even for the case in which the return type is void*.
* the special keyword **#ArrayWrite**. In that case, there should be two transition variables like “(Array, Index)” — Array gets bound to the array object, and Index gets bound to the index at which the write happens.
For several examples, see https://github.com/facebook/infer/tree/master/infer/tests/codetoanalyze/java/topl
## Limitations
* By design, some problems may be missed. Topl is built on Pulse, which attempts to minimize false positives, at the cost of sometimes having false negatives.
* Analysis time increases exponentially with the number of registers used in properties.
* In theory, there should be no significant slowdown if registers belong to different properties, but the implementation is not yet optimized.
* If there are many registers within the same property, then the slowdown is unavoidable (without some significant breakthrough). However, the maximum number of registers we ever used for one practical property was 3.
## List of Issue Types

@ -720,9 +720,9 @@ and disable all other checkers (Conversely:
<p style="margin-left:11%;"><b>--topl</b></p>
<p style="margin-left:17%;">Activates: checker topl:
Detects errors based on user-provided state machines
describing multi-object monitors. (Conversely:
<p style="margin-left:17%;">Activates: checker topl: Detect
errors based on user-provided state machines describing
temporal properties over multiple objects. (Conversely:
<b>--no-topl</b>)</p>
<p style="margin-left:11%;"><b>--topl-only</b></p>

@ -2176,9 +2176,9 @@ should be considered aliases of @ThreadSafe</p>
<b>infer-analyze</b>(1). <b><br>
--topl</b></p>
<p style="margin-left:17%;">Activates: checker topl:
Detects errors based on user-provided state machines
describing multi-object monitors. (Conversely:
<p style="margin-left:17%;">Activates: checker topl: Detect
errors based on user-provided state machines describing
temporal properties over multiple objects. (Conversely:
<b>--no-topl</b>)</p>
<p style="margin-left:11%;">See also

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Topl (infer.TOPLlib.Topl)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">TOPLlib</a> &#x00BB; Topl</nav><h1>Module <code>TOPLlib.Topl</code></h1></header><dl><dt class="spec value" id="val-automaton"><a href="#val-automaton" class="anchor"></a><code><span class="keyword">val</span> automaton : unit <span>&#45;&gt;</span> <a href="../ToplAutomaton/index.html#type-t">ToplAutomaton.t</a></code></dt><dd><p>Return the automaton representing all Topl properties.</p></dd></dl><dl><dt class="spec value" id="val-is_active"><a href="#val-is_active" class="anchor"></a><code><span class="keyword">val</span> is_active : unit <span>&#45;&gt;</span> bool</code></dt><dd><p>Return whether PulseTopl is active.</p></dd></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Topl (infer.Topllib.Topl)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Topllib</a> &#x00BB; Topl</nav><h1>Module <code>Topllib.Topl</code></h1></header><dl><dt class="spec value" id="val-automaton"><a href="#val-automaton" class="anchor"></a><code><span class="keyword">val</span> automaton : unit <span>&#45;&gt;</span> <a href="../ToplAutomaton/index.html#type-t">ToplAutomaton.t</a></code></dt><dd><p>Return the automaton representing all Topl properties.</p></dd></dl><dl><dt class="spec value" id="val-is_active"><a href="#val-is_active" class="anchor"></a><code><span class="keyword">val</span> is_active : unit <span>&#45;&gt;</span> bool</code></dt><dd><p>Return whether PulseTopl is active.</p></dd></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ToplAstOps (infer.TOPLlib.ToplAstOps)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">TOPLlib</a> &#x00BB; ToplAstOps</nav><h1>Module <code>TOPLlib.ToplAstOps</code></h1></header><dl><dt class="spec value" id="val-pp_label"><a href="#val-pp_label" class="anchor"></a><code><span class="keyword">val</span> pp_label : Stdlib.Format.formatter <span>&#45;&gt;</span> <span><a href="../ToplAst/index.html#type-label">ToplAst.label</a> option</span> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ToplAstOps (infer.Topllib.ToplAstOps)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Topllib</a> &#x00BB; ToplAstOps</nav><h1>Module <code>Topllib.ToplAstOps</code></h1></header><dl><dt class="spec value" id="val-pp_label"><a href="#val-pp_label" class="anchor"></a><code><span class="keyword">val</span> pp_label : Stdlib.Format.formatter <span>&#45;&gt;</span> <span><a href="../ToplAst/index.html#type-label">ToplAst.label</a> option</span> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ToplAutomaton (infer.TOPLlib.ToplAutomaton)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">TOPLlib</a> &#x00BB; ToplAutomaton</nav><h1>Module <code>TOPLlib.ToplAutomaton</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt><dt class="spec type" id="type-vindex"><a href="#type-vindex" class="anchor"></a><code><span class="keyword">type</span> vindex</code><code> = int</code></dt><dd><p>from 0 to vcount()-1, inclusive</p></dd></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare_vindex"><a href="#val-compare_vindex" class="anchor"></a><code><span class="keyword">val</span> compare_vindex : <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec type" id="type-tindex"><a href="#type-tindex" class="anchor"></a><code><span class="keyword">type</span> tindex</code><code> = int</code></dt><dd><p>from 0 to tcount()-1, inclusive</p></dd></dl><dl><dt class="spec type" id="type-transition"><a href="#type-transition" class="anchor"></a><code><span class="keyword">type</span> transition</code><code> = </code><code>{</code><table class="record"><tr id="type-transition.source" class="anchored"><td class="def field"><a href="#type-transition.source" class="anchor"></a><code>source : <a href="index.html#type-vindex">vindex</a>;</code></td></tr><tr id="type-transition.target" class="anchored"><td class="def field"><a href="#type-transition.target" class="anchor"></a><code>target : <a href="index.html#type-vindex">vindex</a>;</code></td></tr><tr id="type-transition.label" class="anchored"><td class="def field"><a href="#type-transition.label" class="anchor"></a><code>label : <span><a href="../ToplAst/index.html#type-label">ToplAst.label</a> option</span>;</code></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <span><a href="../ToplAst/index.html#type-t">ToplAst.t</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-vcount"><a href="#val-vcount" class="anchor"></a><code><span class="keyword">val</span> vcount : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt><dt class="spec value" id="val-tfilter_map"><a href="#val-tfilter_map" class="anchor"></a><code><span class="keyword">val</span> tfilter_map : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span>f:<span>(<a href="index.html#type-transition">transition</a> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> option</span>)</span></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> list</span></code></dt><dt class="spec value" id="val-registers"><a href="#val-registers" class="anchor"></a><code><span class="keyword">val</span> registers : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="../ToplAst/index.html#type-register_name">ToplAst.register_name</a> list</span></code></dt><dt class="spec value" id="val-pp_message_of_state"><a href="#val-pp_message_of_state" class="anchor"></a><code><span class="keyword">val</span> pp_message_of_state : Stdlib.Format.formatter <span>&#45;&gt;</span> <span>(<a href="index.html#type-t">t</a> * <a href="index.html#type-tindex">tindex</a>)</span> <span>&#45;&gt;</span> unit</code></dt><dd><p>Print &quot;property P reaches state E&quot;.</p></dd></dl><dl><dt class="spec value" id="val-is_start"><a href="#val-is_start" class="anchor"></a><code><span class="keyword">val</span> is_start : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-is_error"><a href="#val-is_error" class="anchor"></a><code><span class="keyword">val</span> is_error : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-pp_transition"><a href="#val-pp_transition" class="anchor"></a><code><span class="keyword">val</span> pp_transition : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-transition">transition</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ToplAutomaton (infer.Topllib.ToplAutomaton)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Topllib</a> &#x00BB; ToplAutomaton</nav><h1>Module <code>Topllib.ToplAutomaton</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt><dt class="spec type" id="type-vindex"><a href="#type-vindex" class="anchor"></a><code><span class="keyword">type</span> vindex</code><code> = int</code></dt><dd><p>from 0 to vcount()-1, inclusive</p></dd></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare_vindex"><a href="#val-compare_vindex" class="anchor"></a><code><span class="keyword">val</span> compare_vindex : <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec type" id="type-tindex"><a href="#type-tindex" class="anchor"></a><code><span class="keyword">type</span> tindex</code><code> = int</code></dt><dd><p>from 0 to tcount()-1, inclusive</p></dd></dl><dl><dt class="spec type" id="type-transition"><a href="#type-transition" class="anchor"></a><code><span class="keyword">type</span> transition</code><code> = </code><code>{</code><table class="record"><tr id="type-transition.source" class="anchored"><td class="def field"><a href="#type-transition.source" class="anchor"></a><code>source : <a href="index.html#type-vindex">vindex</a>;</code></td></tr><tr id="type-transition.target" class="anchored"><td class="def field"><a href="#type-transition.target" class="anchor"></a><code>target : <a href="index.html#type-vindex">vindex</a>;</code></td></tr><tr id="type-transition.label" class="anchored"><td class="def field"><a href="#type-transition.label" class="anchor"></a><code>label : <span><a href="../ToplAst/index.html#type-label">ToplAst.label</a> option</span>;</code></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <span><a href="../ToplAst/index.html#type-t">ToplAst.t</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-vcount"><a href="#val-vcount" class="anchor"></a><code><span class="keyword">val</span> vcount : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt><dt class="spec value" id="val-tfilter_map"><a href="#val-tfilter_map" class="anchor"></a><code><span class="keyword">val</span> tfilter_map : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span>f:<span>(<a href="index.html#type-transition">transition</a> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> option</span>)</span></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> list</span></code></dt><dt class="spec value" id="val-registers"><a href="#val-registers" class="anchor"></a><code><span class="keyword">val</span> registers : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="../ToplAst/index.html#type-register_name">ToplAst.register_name</a> list</span></code></dt><dt class="spec value" id="val-pp_message_of_state"><a href="#val-pp_message_of_state" class="anchor"></a><code><span class="keyword">val</span> pp_message_of_state : Stdlib.Format.formatter <span>&#45;&gt;</span> <span>(<a href="index.html#type-t">t</a> * <a href="index.html#type-tindex">tindex</a>)</span> <span>&#45;&gt;</span> unit</code></dt><dd><p>Print &quot;property P reaches state E&quot;.</p></dd></dl><dl><dt class="spec value" id="val-is_start"><a href="#val-is_start" class="anchor"></a><code><span class="keyword">val</span> is_start : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-is_error"><a href="#val-is_error" class="anchor"></a><code><span class="keyword">val</span> is_error : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-pp_transition"><a href="#val-pp_transition" class="anchor"></a><code><span class="keyword">val</span> pp_transition : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-transition">transition</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ToplLexer (infer.TOPLlib.ToplLexer)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">TOPLlib</a> &#x00BB; ToplLexer</nav><h1>Module <code>TOPLlib.ToplLexer</code></h1></header><div class="spec module" id="module-L"><a href="#module-L" class="anchor"></a><code><span class="keyword">module</span> L = <a href="../../IBase/index.html#module-Logging">IBase.Logging</a></code></div><dl><dt class="spec value" id="val-new_line"><a href="#val-new_line" class="anchor"></a><code><span class="keyword">val</span> new_line : string <span>&#45;&gt;</span> string <span>&#45;&gt;</span> Stdlib.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../ToplParser/index.html#type-token">ToplParser.token</a></code></dt><dt class="spec value" id="val-quoted"><a href="#val-quoted" class="anchor"></a><code><span class="keyword">val</span> quoted : Str.regexp</code></dt><dt class="spec value" id="val-unquote"><a href="#val-unquote" class="anchor"></a><code><span class="keyword">val</span> unquote : string <span>&#45;&gt;</span> string</code></dt></dl><dl><dt class="spec value" id="val-__ocaml_lex_tables"><a href="#val-__ocaml_lex_tables" class="anchor"></a><code><span class="keyword">val</span> __ocaml_lex_tables : <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lex_tables</code></dt><dt class="spec value" id="val-raw_token"><a href="#val-raw_token" class="anchor"></a><code><span class="keyword">val</span> raw_token : <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../ToplParser/index.html#type-token">ToplParser.token</a></code></dt><dt class="spec value" id="val-__ocaml_lex_raw_token_rec"><a href="#val-__ocaml_lex_raw_token_rec" class="anchor"></a><code><span class="keyword">val</span> __ocaml_lex_raw_token_rec : <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> int <span>&#45;&gt;</span> <a href="../ToplParser/index.html#type-token">ToplParser.token</a></code></dt><dt class="spec value" id="val-token"><a href="#val-token" class="anchor"></a><code><span class="keyword">val</span> token : unit <span>&#45;&gt;</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../ToplParser/index.html#type-token">ToplParser.token</a></code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>ToplLexer (infer.Topllib.ToplLexer)</title><link rel="stylesheet" href="../../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../../index.html">infer</a> &#x00BB; <a href="../index.html">Topllib</a> &#x00BB; ToplLexer</nav><h1>Module <code>Topllib.ToplLexer</code></h1></header><div class="spec module" id="module-L"><a href="#module-L" class="anchor"></a><code><span class="keyword">module</span> L = <a href="../../IBase/index.html#module-Logging">IBase.Logging</a></code></div><dl><dt class="spec value" id="val-new_line"><a href="#val-new_line" class="anchor"></a><code><span class="keyword">val</span> new_line : string <span>&#45;&gt;</span> string <span>&#45;&gt;</span> Stdlib.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../ToplParser/index.html#type-token">ToplParser.token</a></code></dt><dt class="spec value" id="val-quoted"><a href="#val-quoted" class="anchor"></a><code><span class="keyword">val</span> quoted : Str.regexp</code></dt><dt class="spec value" id="val-unquote"><a href="#val-unquote" class="anchor"></a><code><span class="keyword">val</span> unquote : string <span>&#45;&gt;</span> string</code></dt></dl><dl><dt class="spec value" id="val-__ocaml_lex_tables"><a href="#val-__ocaml_lex_tables" class="anchor"></a><code><span class="keyword">val</span> __ocaml_lex_tables : <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lex_tables</code></dt><dt class="spec value" id="val-raw_token"><a href="#val-raw_token" class="anchor"></a><code><span class="keyword">val</span> raw_token : <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../ToplParser/index.html#type-token">ToplParser.token</a></code></dt><dt class="spec value" id="val-__ocaml_lex_raw_token_rec"><a href="#val-__ocaml_lex_raw_token_rec" class="anchor"></a><code><span class="keyword">val</span> __ocaml_lex_raw_token_rec : <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> int <span>&#45;&gt;</span> <a href="../ToplParser/index.html#type-token">ToplParser.token</a></code></dt><dt class="spec value" id="val-token"><a href="#val-token" class="anchor"></a><code><span class="keyword">val</span> token : unit <span>&#45;&gt;</span> <a href="../../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../ToplParser/index.html#type-token">ToplParser.token</a></code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>TOPLlib (infer.TOPLlib)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; TOPLlib</nav><h1>Module <code>TOPLlib</code></h1></header><dl><dt class="spec module" id="module-Topl"><a href="#module-Topl" class="anchor"></a><code><span class="keyword">module</span> <a href="Topl/index.html">Topl</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplAst"><a href="#module-ToplAst" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplAst/index.html">ToplAst</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplAstOps"><a href="#module-ToplAstOps" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplAstOps/index.html">ToplAstOps</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplAutomaton"><a href="#module-ToplAutomaton" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplAutomaton/index.html">ToplAutomaton</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplLexer"><a href="#module-ToplLexer" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplLexer/index.html">ToplLexer</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplParser"><a href="#module-ToplParser" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplParser/index.html">ToplParser</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Topllib (infer.Topllib)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; Topllib</nav><h1>Module <code>Topllib</code></h1></header><dl><dt class="spec module" id="module-Topl"><a href="#module-Topl" class="anchor"></a><code><span class="keyword">module</span> <a href="Topl/index.html">Topl</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplAst"><a href="#module-ToplAst" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplAst/index.html">ToplAst</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplAstOps"><a href="#module-ToplAstOps" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplAstOps/index.html">ToplAstOps</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplAutomaton"><a href="#module-ToplAutomaton" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplAutomaton/index.html">ToplAutomaton</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplLexer"><a href="#module-ToplLexer" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplLexer/index.html">ToplLexer</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl><dl><dt class="spec module" id="module-ToplParser"><a href="#module-ToplParser" class="anchor"></a><code><span class="keyword">module</span> <a href="ToplParser/index.html">ToplParser</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></dt><dd></dd></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>TOPLlib__Topl (infer.TOPLlib__Topl)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; TOPLlib__Topl</nav><h1>Module <code>TOPLlib__Topl</code></h1></header><dl><dt class="spec value" id="val-automaton"><a href="#val-automaton" class="anchor"></a><code><span class="keyword">val</span> automaton : unit <span>&#45;&gt;</span> <a href="../TOPLlib/ToplAutomaton/index.html#type-t">TOPLlib.ToplAutomaton.t</a></code></dt><dd><p>Return the automaton representing all Topl properties.</p></dd></dl><dl><dt class="spec value" id="val-is_active"><a href="#val-is_active" class="anchor"></a><code><span class="keyword">val</span> is_active : unit <span>&#45;&gt;</span> bool</code></dt><dd><p>Return whether PulseTopl is active.</p></dd></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Topllib__Topl (infer.Topllib__Topl)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; Topllib__Topl</nav><h1>Module <code>Topllib__Topl</code></h1></header><dl><dt class="spec value" id="val-automaton"><a href="#val-automaton" class="anchor"></a><code><span class="keyword">val</span> automaton : unit <span>&#45;&gt;</span> <a href="../Topllib/ToplAutomaton/index.html#type-t">Topllib.ToplAutomaton.t</a></code></dt><dd><p>Return the automaton representing all Topl properties.</p></dd></dl><dl><dt class="spec value" id="val-is_active"><a href="#val-is_active" class="anchor"></a><code><span class="keyword">val</span> is_active : unit <span>&#45;&gt;</span> bool</code></dt><dd><p>Return whether PulseTopl is active.</p></dd></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>TOPLlib__ToplAstOps (infer.TOPLlib__ToplAstOps)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; TOPLlib__ToplAstOps</nav><h1>Module <code>TOPLlib__ToplAstOps</code></h1></header><dl><dt class="spec value" id="val-pp_label"><a href="#val-pp_label" class="anchor"></a><code><span class="keyword">val</span> pp_label : Stdlib.Format.formatter <span>&#45;&gt;</span> <span><a href="../TOPLlib/ToplAst/index.html#type-label">TOPLlib.ToplAst.label</a> option</span> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Topllib__ToplAstOps (infer.Topllib__ToplAstOps)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; Topllib__ToplAstOps</nav><h1>Module <code>Topllib__ToplAstOps</code></h1></header><dl><dt class="spec value" id="val-pp_label"><a href="#val-pp_label" class="anchor"></a><code><span class="keyword">val</span> pp_label : Stdlib.Format.formatter <span>&#45;&gt;</span> <span><a href="../Topllib/ToplAst/index.html#type-label">Topllib.ToplAst.label</a> option</span> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>TOPLlib__ToplAutomaton (infer.TOPLlib__ToplAutomaton)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; TOPLlib__ToplAutomaton</nav><h1>Module <code>TOPLlib__ToplAutomaton</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt><dt class="spec type" id="type-vindex"><a href="#type-vindex" class="anchor"></a><code><span class="keyword">type</span> vindex</code><code> = int</code></dt><dd><p>from 0 to vcount()-1, inclusive</p></dd></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare_vindex"><a href="#val-compare_vindex" class="anchor"></a><code><span class="keyword">val</span> compare_vindex : <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec type" id="type-tindex"><a href="#type-tindex" class="anchor"></a><code><span class="keyword">type</span> tindex</code><code> = int</code></dt><dd><p>from 0 to tcount()-1, inclusive</p></dd></dl><dl><dt class="spec type" id="type-transition"><a href="#type-transition" class="anchor"></a><code><span class="keyword">type</span> transition</code><code> = </code><code>{</code><table class="record"><tr id="type-transition.source" class="anchored"><td class="def field"><a href="#type-transition.source" class="anchor"></a><code>source : <a href="index.html#type-vindex">vindex</a>;</code></td></tr><tr id="type-transition.target" class="anchored"><td class="def field"><a href="#type-transition.target" class="anchor"></a><code>target : <a href="index.html#type-vindex">vindex</a>;</code></td></tr><tr id="type-transition.label" class="anchored"><td class="def field"><a href="#type-transition.label" class="anchor"></a><code>label : <span><a href="../TOPLlib/ToplAst/index.html#type-label">TOPLlib.ToplAst.label</a> option</span>;</code></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <span><a href="../TOPLlib/ToplAst/index.html#type-t">TOPLlib.ToplAst.t</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-vcount"><a href="#val-vcount" class="anchor"></a><code><span class="keyword">val</span> vcount : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt><dt class="spec value" id="val-tfilter_map"><a href="#val-tfilter_map" class="anchor"></a><code><span class="keyword">val</span> tfilter_map : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span>f:<span>(<a href="index.html#type-transition">transition</a> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> option</span>)</span></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> list</span></code></dt><dt class="spec value" id="val-registers"><a href="#val-registers" class="anchor"></a><code><span class="keyword">val</span> registers : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="../TOPLlib/ToplAst/index.html#type-register_name">TOPLlib.ToplAst.register_name</a> list</span></code></dt><dt class="spec value" id="val-pp_message_of_state"><a href="#val-pp_message_of_state" class="anchor"></a><code><span class="keyword">val</span> pp_message_of_state : Stdlib.Format.formatter <span>&#45;&gt;</span> <span>(<a href="index.html#type-t">t</a> * <a href="index.html#type-tindex">tindex</a>)</span> <span>&#45;&gt;</span> unit</code></dt><dd><p>Print &quot;property P reaches state E&quot;.</p></dd></dl><dl><dt class="spec value" id="val-is_start"><a href="#val-is_start" class="anchor"></a><code><span class="keyword">val</span> is_start : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-is_error"><a href="#val-is_error" class="anchor"></a><code><span class="keyword">val</span> is_error : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-pp_transition"><a href="#val-pp_transition" class="anchor"></a><code><span class="keyword">val</span> pp_transition : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-transition">transition</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Topllib__ToplAutomaton (infer.Topllib__ToplAutomaton)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; Topllib__ToplAutomaton</nav><h1>Module <code>Topllib__ToplAutomaton</code></h1></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> t</code></dt><dt class="spec type" id="type-vindex"><a href="#type-vindex" class="anchor"></a><code><span class="keyword">type</span> vindex</code><code> = int</code></dt><dd><p>from 0 to vcount()-1, inclusive</p></dd></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare_vindex"><a href="#val-compare_vindex" class="anchor"></a><code><span class="keyword">val</span> compare_vindex : <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> int</code></dt></dl></div></div></div><dl><dt class="spec type" id="type-tindex"><a href="#type-tindex" class="anchor"></a><code><span class="keyword">type</span> tindex</code><code> = int</code></dt><dd><p>from 0 to tcount()-1, inclusive</p></dd></dl><dl><dt class="spec type" id="type-transition"><a href="#type-transition" class="anchor"></a><code><span class="keyword">type</span> transition</code><code> = </code><code>{</code><table class="record"><tr id="type-transition.source" class="anchored"><td class="def field"><a href="#type-transition.source" class="anchor"></a><code>source : <a href="index.html#type-vindex">vindex</a>;</code></td></tr><tr id="type-transition.target" class="anchored"><td class="def field"><a href="#type-transition.target" class="anchor"></a><code>target : <a href="index.html#type-vindex">vindex</a>;</code></td></tr><tr id="type-transition.label" class="anchored"><td class="def field"><a href="#type-transition.label" class="anchor"></a><code>label : <span><a href="../Topllib/ToplAst/index.html#type-label">Topllib.ToplAst.label</a> option</span>;</code></td></tr></table><code>}</code></dt></dl><dl><dt class="spec value" id="val-make"><a href="#val-make" class="anchor"></a><code><span class="keyword">val</span> make : <span><a href="../Topllib/ToplAst/index.html#type-t">Topllib.ToplAst.t</a> list</span> <span>&#45;&gt;</span> <a href="index.html#type-t">t</a></code></dt><dt class="spec value" id="val-vcount"><a href="#val-vcount" class="anchor"></a><code><span class="keyword">val</span> vcount : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> int</code></dt><dt class="spec value" id="val-tfilter_map"><a href="#val-tfilter_map" class="anchor"></a><code><span class="keyword">val</span> tfilter_map : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span>f:<span>(<a href="index.html#type-transition">transition</a> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> option</span>)</span></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> list</span></code></dt><dt class="spec value" id="val-registers"><a href="#val-registers" class="anchor"></a><code><span class="keyword">val</span> registers : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <span><a href="../Topllib/ToplAst/index.html#type-register_name">Topllib.ToplAst.register_name</a> list</span></code></dt><dt class="spec value" id="val-pp_message_of_state"><a href="#val-pp_message_of_state" class="anchor"></a><code><span class="keyword">val</span> pp_message_of_state : Stdlib.Format.formatter <span>&#45;&gt;</span> <span>(<a href="index.html#type-t">t</a> * <a href="index.html#type-tindex">tindex</a>)</span> <span>&#45;&gt;</span> unit</code></dt><dd><p>Print &quot;property P reaches state E&quot;.</p></dd></dl><dl><dt class="spec value" id="val-is_start"><a href="#val-is_start" class="anchor"></a><code><span class="keyword">val</span> is_start : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-is_error"><a href="#val-is_error" class="anchor"></a><code><span class="keyword">val</span> is_error : <a href="index.html#type-t">t</a> <span>&#45;&gt;</span> <a href="index.html#type-vindex">vindex</a> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-pp_transition"><a href="#val-pp_transition" class="anchor"></a><code><span class="keyword">val</span> pp_transition : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-transition">transition</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>TOPLlib__ToplLexer (infer.TOPLlib__ToplLexer)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; TOPLlib__ToplLexer</nav><h1>Module <code>TOPLlib__ToplLexer</code></h1></header><div class="spec module" id="module-L"><a href="#module-L" class="anchor"></a><code><span class="keyword">module</span> L = <a href="../IBase/index.html#module-Logging">IBase.Logging</a></code></div><dl><dt class="spec value" id="val-new_line"><a href="#val-new_line" class="anchor"></a><code><span class="keyword">val</span> new_line : string <span>&#45;&gt;</span> string <span>&#45;&gt;</span> Stdlib.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../TOPLlib/ToplParser/index.html#type-token">TOPLlib.ToplParser.token</a></code></dt><dt class="spec value" id="val-quoted"><a href="#val-quoted" class="anchor"></a><code><span class="keyword">val</span> quoted : Str.regexp</code></dt><dt class="spec value" id="val-unquote"><a href="#val-unquote" class="anchor"></a><code><span class="keyword">val</span> unquote : string <span>&#45;&gt;</span> string</code></dt></dl><dl><dt class="spec value" id="val-__ocaml_lex_tables"><a href="#val-__ocaml_lex_tables" class="anchor"></a><code><span class="keyword">val</span> __ocaml_lex_tables : <a href="../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lex_tables</code></dt><dt class="spec value" id="val-raw_token"><a href="#val-raw_token" class="anchor"></a><code><span class="keyword">val</span> raw_token : <a href="../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../TOPLlib/ToplParser/index.html#type-token">TOPLlib.ToplParser.token</a></code></dt><dt class="spec value" id="val-__ocaml_lex_raw_token_rec"><a href="#val-__ocaml_lex_raw_token_rec" class="anchor"></a><code><span class="keyword">val</span> __ocaml_lex_raw_token_rec : <a href="../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> int <span>&#45;&gt;</span> <a href="../TOPLlib/ToplParser/index.html#type-token">TOPLlib.ToplParser.token</a></code></dt><dt class="spec value" id="val-token"><a href="#val-token" class="anchor"></a><code><span class="keyword">val</span> token : unit <span>&#45;&gt;</span> <a href="../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../TOPLlib/ToplParser/index.html#type-token">TOPLlib.ToplParser.token</a></code></dt></dl></div></body></html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Topllib__ToplLexer (infer.Topllib__ToplLexer)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">infer</a> &#x00BB; Topllib__ToplLexer</nav><h1>Module <code>Topllib__ToplLexer</code></h1></header><div class="spec module" id="module-L"><a href="#module-L" class="anchor"></a><code><span class="keyword">module</span> L = <a href="../IBase/index.html#module-Logging">IBase.Logging</a></code></div><dl><dt class="spec value" id="val-new_line"><a href="#val-new_line" class="anchor"></a><code><span class="keyword">val</span> new_line : string <span>&#45;&gt;</span> string <span>&#45;&gt;</span> Stdlib.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../Topllib/ToplParser/index.html#type-token">Topllib.ToplParser.token</a></code></dt><dt class="spec value" id="val-quoted"><a href="#val-quoted" class="anchor"></a><code><span class="keyword">val</span> quoted : Str.regexp</code></dt><dt class="spec value" id="val-unquote"><a href="#val-unquote" class="anchor"></a><code><span class="keyword">val</span> unquote : string <span>&#45;&gt;</span> string</code></dt></dl><dl><dt class="spec value" id="val-__ocaml_lex_tables"><a href="#val-__ocaml_lex_tables" class="anchor"></a><code><span class="keyword">val</span> __ocaml_lex_tables : <a href="../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lex_tables</code></dt><dt class="spec value" id="val-raw_token"><a href="#val-raw_token" class="anchor"></a><code><span class="keyword">val</span> raw_token : <a href="../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../Topllib/ToplParser/index.html#type-token">Topllib.ToplParser.token</a></code></dt><dt class="spec value" id="val-__ocaml_lex_raw_token_rec"><a href="#val-__ocaml_lex_raw_token_rec" class="anchor"></a><code><span class="keyword">val</span> __ocaml_lex_raw_token_rec : <a href="../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> int <span>&#45;&gt;</span> <a href="../Topllib/ToplParser/index.html#type-token">Topllib.ToplParser.token</a></code></dt><dt class="spec value" id="val-token"><a href="#val-token" class="anchor"></a><code><span class="keyword">val</span> token : unit <span>&#45;&gt;</span> <a href="../IStdlib/index.html#module-IStd">IStdlib.IStd</a>.Caml.Lexing.lexbuf <span>&#45;&gt;</span> <a href="../Topllib/ToplParser/index.html#type-token">Topllib.ToplParser.token</a></code></dt></dl></div></body></html>

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save