Skip to content

Conflict set is too small when solver enforces the single instance restriction #2843

Closed
@grayjay

Description

@grayjay

Here is a test case where the solver can't find a solution:
grayjay@2b4d027

targets: A, B
constraints: 
  stanzas A test (unknown source)
  stanzas B test (unknown source)
  stanzas C test (unknown source)
  stanzas D test (unknown source)
  stanzas D test (unknown source)
  stanzas E test (unknown source)
preferences: 
strategy: PreferLatestForSelected
[__0] trying: 0.A-1.0.0 (user goal)
[__1] next goal: 0.D (dependency of 0.A-1.0.0)
[__1] rejecting: 0.D-2.0.0 (conflict: 0.A => 0.D==1.0.0)
[__1] trying: 0.D-1.0.0
[__2] trying: 0.C-1.0.0 (dependency of 0.A-1.0.0)
[__3] trying: 1.B-1.0.0 (user goal)
[__4] next goal: 1.D (dependency of 1.B-1.0.0)
[__4] rejecting: 1.D~>0.D-1.0.0 (conflict: 1.B => 1.D==2.0.0)
[__4] trying: 1.D-2.0.0
[__5] trying: 1.B-1.0.0:-flagA
[__6] trying: 1.B-1.0.0:-flagB
[__7] next goal: 1.C (dependency of 1.B-1.0.0:-flagB)
[__7] rejecting: 1.C~>0.C-1.0.0 (dependencies not linked: cannot merge {*1.D-2.0.0} and {*0.D-1.0.0}; conflict set: 0.D, 1.C, 1.D)
[__7] rejecting: 1.C-1.0.0 (multiple instances)
[__5] fail (backjumping, conflict set: 0.C, 0.D, 1.C, 1.D)
[__4] rejecting: 1.D-1.0.0 (multiple instances)
[__2] fail (backjumping, conflict set: 0.C, 0.D, 1.B, 1.C, 1.D)
[__0] fail (backjumping, conflict set: 0.A, 0.C, 0.D, 1.B, 1.C, 1.D)

I think that both conflict sets at level 7 should contain the variables flagA and flagB, because those flags are responsible for B's dependency on C.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions