# Why Diffkt?

**DiffKt** is a Kotlin library for building mathematical functions that can be
automatically differentiated. Automatic differentiation is a software method that
can take a mathematical function represented as a software function
and produce the derivative of the function using the
chain rule and elementary arithmetic operations in the functions.

There are many automatic differentiation packages
in other language such as Fortran, C++, or Python. **DiffKt** brings automatic
differentiation to Kotlin. We believe **DiffKt** is one of the most advanced automatic
differentiation packages in the open source community, and for the JVM. **DiffKt**
incorporates the latest research in automatic differentiation.

**DiffKt** can be used for scientific computing, deep neural networks, machine learning,
statistics, optimization, or physical systems modeling. **DiffKt** provides a framework to
build functions over multi-dimensional arrays, called tensors, and lets you build complex data
structures with its user defined types.