Computes a lower bound of the span of the chain, taking into account only
the first nonchain task.
For more accurate results, this should be called after Precedences(),
otherwise the lower bound might be lower than feasible.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-08-06 UTC."],[[["The `DisjunctivePropagator` class in C++ acts as a constraint programming propagator, refining the possible values for task start, duration, and end times."],["It employs various propagation methods, including edge-finding, precedences, and forbidden intervals, to reduce the search space for feasible solutions."],["The propagator can handle chains of tasks with precedence constraints and considers time windows for non-chain tasks during propagation."],["It offers functionalities like mirroring tasks for time symmetry and computing lower bounds for the chain span."],["Users can iteratively call the `Propagate` method to further refine task bounds and detect infeasibility."]]],["The `DisjunctivePropagator` class manages tasks defined by start, duration, and end times, refining their value ranges. Key actions include propagating precedence deductions (`Precedences`), computing new task bounds (`Propagate`), and finding lower bounds for chain spans (`ChainSpanMin`, `ChainSpanMinDynamic`). It also handles edge-finding (`EdgeFinding`), detectable precedences with chains (`DetectablePrecedencesWithChain`), enforces domain holes (`ForbiddenIntervals`), mirrors tasks with time symmetry (`MirrorTasks`), and propagates distance duration constraints (`DistanceDuration`). `Clear` clears internal state.\n"]]