# User's Manual

## 1 Short Description

`APHzip` is a collection of tools to generate, manipulate, and compress acyclic phase-type representations. The toolsuite can generate simple exponential or Erlang distributions, and by using the disabling operator (`cox`) can even generate the whole acyclic phase-type representations. To manipulate acyclic phase-type representations, `APHzip` provides three stochastic operations: `con`volution, `max`imum, and `min`imum. `APHzip` also implements an algorithm that almost always reduces any given acyclic phase-type representation to its minimal representation.

## 2 Input

To invoke the tool a user must provide the following input information:

### 2.1 Expression

`APHzip` accepts as input any expression written in the following grammar:

 `P ::= exp(λ) | erl(n, λ) | con(P, P) | max(P, P) | min(P, P) | cox(μ, λ, P)`

`exp(λ)` represents a delay governed by an exponential distribution with rate `λ`. `erl(n, λ)` represents a delay governed by an Erlang distribution with rate `λ` and shape `n`. These two delays are the building blocks of more complex delays constructed by using operators `con, max, min,` and `cox`.

`cox(μ, λ, P)` is a disabling operator, where delay `μ` forces a preemptive termination, unless delay `λ` finishes first. Delay `λ.P` behaves as delay `P` after an exponentially distributed duration with rate `λ`. Delays `μ` and `λ.P` disable each other, in the sense that the termination of delay `μ` cancels delay `λ.P` and terminates, while the occurrence of delay `λ` cancels delay `μ` and continues with delay `P`.

`con(P, P)` is the convolution operator of two delays; namely putting two delays in sequence one after another. `min(P, P)` is the minimum operator, namely it produces the minimum of two delays. `max(P, P)` is the maximum operator, which produces the maximum of two delays.

### 2.2 Output Format

There are two output formats of model produced by the tool, namely as a simple list of transitions (similar to a .tra file format) and as a nested disabling (`cox`) operators. Using the latter format allows the user to cut and paste the output of the tool to build further and more complex expressions.

### 2.3 Email Address

If the user provide an email address, then the resulting model will be sent directly to the provided address. This is especially useful when dealing with large models, since web browsers may experience timeouts when the computation time is long (minutes).

## 3 Output

The output of the tool is a reduced acyclic phase-type representation having the same distribution as the distribution of the expression. The output is presented in the format selected by the user. If an email address is provided, the output will be sent to the address; otherwise, the user can view the output directly on the same webpage.

## 4 Expression Examples

To enable users to assess the quality of the tool and its compression capabilities, we provide here several expression examples that can be copied and then pasted on the form in the main page.

 `No` `Expression` `Original Size` `Reduced Size` `1` `min(min(max(max(exp(0.2),exp(0.2)),exp(0.2)),max(exp(0.3),exp(0.3))),exp(0.14))` `22` `7` `2` `min(con(min(exp(10),min(exp(6),min(exp(6),con(exp(6),min(exp(2),exp(6)))))),con(exp(200),con(exp(200),con(min(con(exp(0.002),con(exp(0.01),exp(0.1))),con(exp(0.01),exp(0.01))),exp(0.01))))),con(min(con(exp(0.002),con(exp(0.01),exp(0.1))),con(exp(0.01),exp(0.01))),min(con(min(exp(10),min(exp(6),min(exp(6),con(exp(6),min(exp(2),exp(6)))))),exp(10)),con(exp(6),exp(0.1)))))` `132` `108` `3` `max(min(exp(0.2),erl(19,0.2)),con(erl(5,0.2),exp(0.6)))` `140` `67` `4` `min(con(min(exp(10),min(exp(6),min(exp(6),con(exp(6),min(exp(2),exp(6)))))),min(exp(20),exp(0.01))),min(con(min(exp(10),min(exp(6),min(exp(6),con(exp(6),min(exp(2),exp(6)))))),con(exp(200),con(exp(200),con(min(con(exp(0.002),con(exp(0.01),exp(0.1))),con(exp(0.01),exp(0.01))),exp(0.01))))),con(min(con(exp(0.002),con(exp(0.01),exp(0.1))),con(exp(0.01),exp(0.01))),min(con(min(exp(10),min(exp(6),min(exp(6),con(exp(6),min(exp(2),exp(6)))))),exp(10)),con(exp(6),exp(0.1))))))` `396` `276` `5` `min(con(exp(0.5),min(con(exp(0.002),con(exp(0.01),exp(0.1))),con(exp(0.01),exp(0.01)))),min(con(exp(60),con(exp(30),con(min(exp(100),min(exp(2),exp(20))),con(min(exp(6),exp(6)),exp(20))))),min(min(con(min(exp(10),min(exp(6),min(exp(6),con(exp(6),min(exp(2),exp(6)))))),exp(10)),con(exp(2),exp(0.004))),min(con(min(exp(6),min(exp(6),con(exp(6),min(exp(2),exp(6))))),min(exp(20),con(exp(0.2),exp(100)))),con(exp(0.2),exp(120))))))` `1680` `1260` `6` `min(min(max(max(erl(5,1),erl(5,1)),erl(5,1)),max(erl(5,1.5),erl(5,1.5))),erl(5,0.7))` `37625` `114`