Skip to main content

Crate ucal_core

Crate ucal_core 

Source
Expand description

§ucal-core — absolute time in Planck ticks

An unsigned integer count of Planck-time units since a stipulated datum, and a positional calendar over that integer in base 5. Implements Part A of RFC UCAL-1 for profile UC-1.

§What tick 0 is

Tick 0 is a stipulated datum, conventionally identified with the FLRW t→0 limit. It is exact by declaration and unrevisable within a profile. It is not a measurement, not a derivation, and not an observed event (Rule Q, N17).

The stipulation is a necessity rather than a shortcut, for three independent reasons, each sufficient:

  1. Exactness cannot come from measurement. The published age carries ±0.020 Gyr — about 1.17×10⁵⁸ ticks, 0.145% of the span. A datum inheriting that error bar would make every timestamp uncertain relative to zero.
  2. The t→0 limit is not an observable event; it is where the FLRW extrapolation’s coordinates degenerate, and classical time is undefined below roughly one tick.
  3. The extrapolation is model-dependent. Under inflation the FLRW t→0 limit is not a physical event at all.

This puts the datum in ordinary company: TAI’s 1958-01-01, the Julian Day epoch, the Unix epoch. The parallel to the SI second is exact — 9 192 631 770 caesium cycles was chosen to match the ephemeris second, and the definition does not inherit that provenance.

What a profile does assert about physics is carried separately, as profile::Profile::big_bang_claim, and no arithmetic can consume it.

§What this crate does not contain

Rule A.2: no Earth-derived quantity is referenced, named or defined here. The Julian year, the day, the hour and every civil calendar live outside, in ucal-civil. The single exception is the declared bridge constant (profile::Bridge), which exists precisely so that the boundary is visible.

Rule E: no floating-point type appears in any signature, field, constant or intermediate. A CI lint enforces it.

§Layout

  • backend — the integer backend and the backend::TickInt surface. Rule W keeps the domain [0, 2^512) on both backends.
  • error — Appendix E diagnostics.
  • tier — the 5^(5k) grid (Rule G) and tier naming (Rule N).
  • valuevalue::Instant, value::Delta, value::Window and the inert value::SignedWindow.
  • codec — the two text forms (§6, Rule D) and the Appendix F group codec.
  • ident — canonical binary (§7.1) and UCID (§7.2), and the Rule S ordering property both depend on.
  • locale — tier-name tables (Appendix D). Names are display-only (Rule N), so adding one cannot change what a value means.
  • num — Appendix H: widening mul_div, directed isqrt, exact rationals, interval arithmetic, continued fractions.
  • profileprofile::UC1, the datum, and provenance.
  • qualifiedqualified::Kind and the calendar qualifier every local rendering must carry (§6.6, §13.4).

Rule S in one sentence: the binary form and UCID sort lexicographically in chronological order; the text forms do not, unless zero-padded to a fixed tier width.

Re-exports§

pub use backend::TickInt;
pub use backend::Ticks;
pub use backend::CANONICAL_BYTES;
pub use backend::DOMAIN_BITS;
pub use codec::Fmt;
pub use codec::Form;
pub use codec::parse;
pub use codec::render;
pub use error::Code;
pub use error::TimeError;
pub use error::Warning;
pub use ident::Ucid;
pub use ident::CROCKFORD;
pub use ident::UCID_BITS;
pub use ident::UCID_LEN;
pub use locale::LocaleId;
pub use num::isqrt_ceil;
pub use num::isqrt_floor;
pub use num::mul_div;
pub use num::RatInterval;
pub use num::Ratio;
pub use num::cf_expand;
pub use num::convergents;
pub use profile::Bridge;
pub use profile::Citation;
pub use profile::Frame;
pub use profile::MeasuredValue;
pub use profile::Profile;
pub use profile::Provenance;
pub use profile::UC1;
pub use qualified::CalendarIdentity;
pub use qualified::CalendarQualifier;
pub use qualified::Kind;
pub use qualified::Qualified;
pub use tier::Tier;
pub use tier::TierName;
pub use tier::TierTable;
pub use tier::GROUP_BASE;
pub use value::Delta;
pub use value::Instant;
pub use value::IntervalOrdering;
pub use value::Precision;
pub use value::Rounding;
pub use value::Sign;
pub use value::Signed;
pub use value::SignedWindow;
pub use value::Span;
pub use value::Stated;
pub use value::Window;

Modules§

backend
The integer backend.
codec
Text codecs (§6, Appendix F) — the two forms of one value (Rule D).
error
Diagnostics (Appendix E).
ident
Canonical binary (§7.1) and UCID (§7.2).
locale
Locale tables for tier names (Appendix D, Rule N).
num
Exact integer numerics (Appendix H).
profile
Profiles (§2, Rule P) and the datum (Rule Q).
qualified
Calendar-qualified renderings (§6.6, §13.4).
tier
The tier grid (§4, Rule G) and tier naming (Rule N).
value
The value types (§5): Instant, Delta, Signed, SignedWindow, Window, Precision, Rounding.

Constants§

RFC
The RFC revision this crate implements.
SPEC_DELTAS
Deltas applied against the RFC text; see spec/SPEC-DELTAS.md.