This class represents a reduction that replaces symbolic parameters with
their constraint values.

```
# S4 method for Chain
as.character(x)
# S4 method for Chain,Problem
accepts(object, problem)
# S4 method for Chain,Problem
perform(object, problem)
# S4 method for Chain,SolutionORList,list
invert(object, solution, inverse_data)
```

## Arguments

- x, object
A Chain object.

- problem
A Problem object to check.

- solution
A Solution or list.

- inverse_data
A list that contains the data encoding the original problem.

## Methods (by generic)

`accepts(object = Chain, problem = Problem)`

: A problem is accepted if the sequence of reductions is valid. In particular, the i-th reduction must accept the output of the i-1th
reduction, with the first reduction (self.reductions[0]) in the sequence taking as input the supplied problem.

`perform(object = Chain, problem = Problem)`

: Applies the chain to a problem and returns an equivalent problem.

`invert(object = Chain, solution = SolutionORList, inverse_data = list)`

: Performs the reduction on a problem and returns an equivalent problem.