CalendarEvidence

CalendarEvidence :: # (opaque)

Explicit finite admissible values for a qualified calendar description. The caller supplies alternatives; no tolerance, distribution or probability is inferred. Exactly one alternative is the actual civil selection. Each selection retains its full preimage, including disconnected fold components. This native model is not an EDTF parser or general interval-reasoning engine.

All alternatives retain the description's calendar and resolution. Components without a qualification must equal the described value unless Whole is qualified. Both uncertain and approximate components may vary only because the caller supplied this model. A model may include the described value.

At most 4096 input alternatives, before deduplication. Construction validates fields and exclusive civil bounds once, then sorts/deduplicates in O(n log n), without zone interpretation or enumeration. Canonical order is local position, not resolved timeline order.

new : QualifiedCalendarValue, List(CalendarValue) -> Try(CalendarEvidence, [InconsistentEvidence, TooManyAlternatives, CalendarMismatch(U64), ResolutionMismatch(U64), UnqualifiedComponent({ index : U64, scope : Scope }), CandidateOutOfRange(U64), ..])
description : CalendarEvidence -> QualifiedCalendarValue
alternatives : CalendarEvidence -> List(CalendarValue)

Materialize the canonical alternatives as a caller-owned list, O(n).

query : CalendarEvidence, ZoneRules, PosixBoundary -> Try(Query, [OutsideValidity, OutOfRange, ..])

Is this one POSIX instant inside the unknown actual selection? Only the point must lie within the rules' validity; no claim about full preimages outside that validity is made. Projection is O(log transition_count). Each subsequent work unit checks one alternative's civil bounds in O(1). Rules, point and model are immutable across resumptions. No coverage list is built. Construction rejects an unrepresentable exclusive civil bound before any query can stop early on sufficient witnesses.

is_eq : CalendarEvidence, CalendarEvidence -> Bool
Truth : [Definite, Possible, Impossible]
Batch : { examined : U64, status : [Complete(Truth), Limited(Query)] }