[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tlaplus] TLC simulation mode



You can get distinct state counts with a JVM system property and a small amount of TLA+.

Step 1: Enable extended statistics

Pass `-Dtlc2.tool.Simulator.extendedStatistics=true` to the JVM. 

`java -Dtlc2.tool.Simulator.extendedStatistics=true -jar tla2tools.jar -simulate num=10000 MySpec`

This uses a HyperLogLog (constant space, approximate count) per worker to track distinct states. If you want exact counts and don't mind even more overhead, also pass `-Dtlc2.tool.Simulator.extendedStatistics.naive=true`

Step 2: Read the count via TLCGet("stats").distinct

With extended statistics enabled, TLCGet("stats").distinct returns the number of distinct states seen (instead of -1). You can use _PERIODIC to monitor it during simulation and POSTCONDITION to report it at the end.

Add to your spec:

```tla
SimStats ==
    LET s == TLCGet("stats")
    IN PrintT(<<"traces", s.traces,
                "generated", s.generated,
                "distinct", s.distinct>>)
```

Both need to be declared in the .cfg file:

```
_PERIODIC SimStats
POSTCONDITION SimStats
```

This will print something like the following at every progress interval and once at the end.

<<"traces", 10000, "generated", 2067418, "distinct", 8374>>

Caveats: The distinct count is per worker thread, not globally deduplicated across workers. With -workers 1 (the default) this doesn't matter. With multiple workers, each maintains its own counter. The HyperLogLog approximation is usually within a few percent of the true count. Use the naive flag if you need exactness.

M.

PS: TLCGet("stats”) also includes per-action counts, per-variable distinct values, and trace length statistics. I've used this (https://github.com/microsoft/CCF/issues/6537) to serialize the full record to ndjson and plot coverage over time.


> On Apr 15, 2026, at 12:49 AM, Igor Konnov <igor.konnov@xxxxxxxxx> wrote:
> 
> Is there an easy way to count how many distinct states the simulator visited?

-- 
You received this message because you are subscribed to the Google Groups "tlaplus" group.
To unsubscribe from this group and stop receiving emails from it, send an email to tlaplus+unsubscribe@xxxxxxxxxxxxxxxx.
To view this discussion visit https://groups.google.com/d/msgid/tlaplus/0CDF0FD4-E507-4BF0-B1FD-81405E049A6B%40lemmster.de.