Skip to content

Implementation of Basic Inductive Miner#47

Open
Kuhlkrypto wants to merge 3 commits intoaarkue:mainfrom
Kuhlkrypto:main
Open

Implementation of Basic Inductive Miner#47
Kuhlkrypto wants to merge 3 commits intoaarkue:mainfrom
Kuhlkrypto:main

Conversation

@Kuhlkrypto
Copy link
Copy Markdown

Summary

This Pull request aims to introduce the basic inductive miner to the rust4pm library.
The implementation provides a discovery foundation for the Rust ecosystem that outputs a Process Tree, following the formal definitions of the Inductive Miner in literature.

Motivation

The goal was to write a "true to the source" implementation of the Inductive Miner in Rust, i.e. an implementation that combines the algorithmic ideas and clean recursive structure of the Inductive Miner while benefiting from Rust's memory safety and performance.

Scope of Work

The discovery logic is based on the Inductive Miner as described in Chapter 6.1 in "Robust Process Mining with Guarantees" by Sander J. J. Leemans.
This includes:

  • Discovery of all basic Cuts:
    • Exclusive Choice
    • Sequence
    • Parallel
    • Redo Loop
  • Base Cases: Empty Log and Single Activity
  • Fallthroughs:
    • Empty trace
    • Activity Once per Trace
    • Activity Concurrent
    • Tau Loop (Strict & Standard)
    • Flower Model: final fallback to ensure a sound process model is always returned
  • Log Splitting Logic: log partitioning logic for each cut type

Unit Tests and Documentation

Each file contains a test mod containing basic unit test, verifying the correctness of cut detection, log splitting, fallthroughs etc. against test logs. Furthermore, all important functions and structs have been documented with "doc-comments"

Implementation Notes

In some cases the implementation ports logic from the ProM workbench, those files have been marked accordingly.


Contributor:
I conducted this work while employed at TU Dresden.

@aarkue
Copy link
Copy Markdown
Owner

aarkue commented Apr 30, 2026

Hi @Kuhlkrypto,
Thanks for this contribution; the inductive miner would really be a great addition to Rust4PM! 😄
It will likely take a bit of time to review everything. Before that, I also have two small general questions:

  1. Have you already validated/tested against the current implementation of the IM in ProM / PM4Py? It would be good to know exactly if there are differences in behavior and what they are. I believe there are also instances where the IM(f) in ProM/PM4Py do not produce the same output.
  2. I think direct ports from the ProM IM implementation might be problematic to publish with the MIT/Apache license the Rust4PM project carries. Are those really direct ports or just inspired by the ProM code? There are probably a few different options (e.g., I/someone else does a clean-room implementation of them based on tests/paper specifications only, I/we get permission from the original copyright author, ...) to mitigate this either way, but it would be good to make sure everything is 100% safe.

Thanks again for your work and Cheers,
Aaron

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants