Skip to content

Discovery and the artifact DAG

Plugin Runtime Produces Use it for
Inductive Miner (IM, IMf) Rust → wasm ProcessTree The default. Guarantees soundness; noise controls generalization.
Inductive Miner (pm4py) Python → Pyodide ProcessTree, AcceptingPetriNet Cross-checking against the reference implementation.
Heuristics Miner Rust → wasm CausalNet, AcceptingPetriNet Noisy logs where frequency thresholds beat structural cuts.
Alpha Miner (Classic) Rust → wasm AcceptingPetriNet Teaching, and demonstrating its own limitations.
Directly-Follows Graph Rust → wasm DFG The honest first look, and the shared input behind the others.

The Alpha Miner is deliberately not a default: no noise tolerance, no short loops, no duplicate labels. It is in the library because it is worth showing students what those limitations look like on real data.

Two implementations of the same algorithm, on purpose

Section titled “Two implementations of the same algorithm, on purpose”

Both a Rust and a pm4py Inductive Miner ship. That is not redundancy — it is how you check yourself. Discovering with both on the same log and diffing the resulting trees is a cheap sanity check when a model surprises you, and a reasonable thing to report in a paper.

Re-running a miner with a different noise threshold produces a new artifact, a sibling of the first, with its parameters recorded on the execution node. Nothing is overwritten.

Practically, this means the workflow is:

  1. Discover at noise = 0.0 — everything the log contains.
  2. Discover at noise = 0.2 — the readable version.
  3. Keep both. The difference between them is exactly the infrequent behavior, which is often the finding.

Because every artifact carries the parameters and runtime version that produced it, the set stays interpretable a week later, and a reviewer opening the workspace sees the same thing you did.

Intermediate artifacts stay out of the way

Section titled “Intermediate artifacts stay out of the way”

Some plugins produce artifacts internally — a metro-map view discovers an object-centric Petri net on the way, for example. Those intermediates are hidden from the tree and reused rather than recomputed, so a parameter change does not litter the workspace with near-duplicate by-products.

ProcessTree → AcceptingPetriNet is available, and matters: several conformance techniques want a net rather than a tree. The conversion is a recorded action like any other, so the provenance of a conformance result still leads back to the log through the miner that produced the tree.

Exact alignment conformance.