Network Calculus is a mathematical formalism that underpins many timing verification algorithms. For example, it has been used in the design and certification of avionics AFDX networks for the past 15 years. Our tool, RTaW-Pegase, relies on Network Calculus to predict the worst-case behavior of networks.

At the core of Network Calculus is the (min,+) algebra. To learn this algebra or develop new Network Calculus timing verification algorithms, an interpreter is essential—one that is easy to use, offers graphical outputs for quick understanding of results, and is comprehensive in its available mathematical operators.

Today, we are pleased to announce the release of the (Min,+) Playground, a web service that allows you to write and execute (min,+) algebra calculations without any installation.

To get you started, you’ll find a quick reference guide on this page, listing the mathematical functions and operators available in the interpreter. You can also execute the (min,+) script below by clicking on the Run button.

Function constructors


// Create three affine functions:
f := affine(7/4, 2)
g := affine(4/5, 3)
h := affine(2/5, 5)

// and use them to create an arrival function defined as their minimum:
arrival := f /\ g /\ h

// Plot the arrival function and the affine functions from which it has been defined:
plot(arrival, f, g, h)

// Create a "rate latency" service function: we need to take the maximum with
// a horizontal line to obtain the first horizontal segment:
service1 := affine(2, -4) \/ affine(0, 0)

// Plot the service function:
plot(service1)
plot(arrival, service1)

// Create some other service function:
service2 := affine(3.1, -12) \/ affine(0, 0)
plot(service2, service1, xlim=[-0.3, 15], ylim=[-0.3, 15])

// Compute the difference between two functions:
service3 := service1 - service2
plot(service3, service1, service2)

// Compute the convolution of two service functions:
convService := service1 * service2
plot(convService, service2, service1)

// Compute the convolution of two arrival functions:
convArrival := f * g
plot(convArrival, f, g)

// Compute the deconvolution of an arrival function by a service function:
deconf := arrival / service1
plot(deconf, arrival)

// Compute the subadditive closure:
closure := star(deconf)
plot(deconf, closure)