Packages
fixpoint
0.11.7
0.22.1
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.6
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.18.2
0.18.1
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.13.5
0.13.4
0.13.2
0.13.1
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.2
0.12.1
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.46
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.28
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.1.3
0.1.2
0.1.1
0.1.0
Constraint Programming Solver
Current section
Files
Jump to
Current section
Files
lib/solver/constraints/reified.ex
defmodule CPSolver.Constraint.Reified do
@moduledoc """
Reified (equivalence) constraint.
Extends constraint C to constraint R(C, b),
where 'b' is a boolean variable, and
C holds iff b is fixed to true
"""
use CPSolver.Constraint
alias CPSolver.Propagator.Reified, as: ReifPropagator
def new(constraint, b) do
new([constraint, b])
end
@impl true
def propagators([constraint, b]) do
[reified_propagator(constraint, b, :full)]
end
def reified_propagator(constraint, b, mode) when mode in [:full, :half, :inverse_half] do
ReifPropagator.new(Constraint.constraint_to_propagators(constraint), b, mode)
end
end
defmodule CPSolver.Constraint.HalfReified do
@moduledoc """
Half-reified (implication) constraint.
Extends constraint C to constraint R(C, b),
where 'b' is a boolean variable, and
b is fixed to true if C holds
"""
use CPSolver.Constraint
alias CPSolver.Constraint.Reified
def new(constraint, b) do
new([constraint, b])
end
@impl true
def propagators([constraint, b]) do
[Reified.reified_propagator(constraint, b, :half)]
end
end
defmodule CPSolver.Constraint.InverseHalfReified do
@moduledoc """
Inverse half-reified (inverse implication) constraint.
Extends constraint C to constraint R(C, b),
where 'b' is a boolean variable, and
C holds if b is fixed to true.
"""
use CPSolver.Constraint
alias CPSolver.Constraint.Reified
def new(constraint, b) do
new([constraint, b])
end
@impl true
def propagators([constraint, b]) do
[Reified.reified_propagator(constraint, b, :inverse_half)]
end
end