Concurrent execution of tasks can significantly improve its performance and efficiency. However, identifying which tasks can be executed concurrently and which tasks need to be executed sequentially can be a challenging task. In this talk, I propose using Inductive Logic Programming (ILP) to create a dynamic dependency graph for a given program. The graph can be used to identify which tasks can be executed concurrently and which tasks need to be executed sequentially. I demonstrate the effectiveness of this approach by applying it to a sample program and comparing its performance with a version that does not utilize concurrent execution. This talk presents a novel approach to creating a dynamic dependency graph for programs and highlights the potential benefits of using ILP for optimizing the performance of complex software systems.