aboutsummaryrefslogtreecommitdiff
path: root/lib/rites/rite_of
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rites/rite_of')
-rw-r--r--lib/rites/rite_of/precedence_of.ml26
-rw-r--r--lib/rites/rite_of/precedence_of.mli15
2 files changed, 32 insertions, 9 deletions
diff --git a/lib/rites/rite_of/precedence_of.ml b/lib/rites/rite_of/precedence_of.ml
index fb26d64..5d32ee2 100644
--- a/lib/rites/rite_of/precedence_of.ml
+++ b/lib/rites/rite_of/precedence_of.ml
@@ -226,13 +226,27 @@ let admit ~(observed : Vocab_of.rank Precedence.candidate)
can be orphaned by its feast moving: Normae n. 11 gives solemnities First
Vespers and n. 13 denies them to feasts, but neither creates a separate
celebration that could survive or fail independently of the day it precedes.
- The one OF celebration whose slug says "vigil" -- the Nativity's, which
- Temporal_of emits as "of-nativity-vigil" -- is a MASS FORMULARY of the
- solemnity itself (IGMR n. 346's own Christmas-Mass series: ad vigiliam, in
- nocte, in aurora, in die), not a distinct celebration.
+ This is why the hook exists at all and why it returns [None] for every
+ OTHER candidate -- there is no OF office this rule could ever apply to.
- So [None] unconditionally, and Calendar's RG 33 suppression pass never
- fires for this rite. *)
+ "of-nativity-vigil" itself needs a narrower, structural argument, not that
+ general one: Temporal_of.named (temporal_of.ml:230) DOES construct it as
+ its own Sollemnitas-rank candidate on 24 December, independent of
+ "of-nativity" on the 25th -- it is a genuine contestant in [band]/[resolve],
+ not merely a Mass formulary with no life of its own on the precedence axis.
+
+ What makes [None] safe here is that the feast it precedes can never be
+ orphaned. The Nativity is Tabula entry 2 (band 20); the only entry that
+ bands lower is entry 1, the Paschal Triduum (band 10, [is_triduum] above).
+ Gregorian Easter falls in [22 March, 25 April] for EVERY year 1583-9999 --
+ measured exhaustively, not assumed (test_computus.ml's
+ [test_gregorian_invariants_exhaustive]) -- so the Triduum's own band-10
+ window (Easter-2 .. Easter) is confined to 20 March-25 April and can never
+ reach 25 December. Nothing else in the Tabula bands below entry 2. So
+ "of-nativity" is unconditionally the observed office on its own day, its
+ vigil can never be orphaned by a transfer or reduction, and [None] is the
+ correct answer for it too -- not because it lacks standing as a candidate,
+ but because the day it precedes can never lose. *)
let vigil_feast (_ : Vocab_of.rank Precedence.candidate) : Slug.t option = None
(* The assembled record Precedence.resolve consumes. Kept here rather than in
diff --git a/lib/rites/rite_of/precedence_of.mli b/lib/rites/rite_of/precedence_of.mli
index 6b30dad..e81d35e 100644
--- a/lib/rites/rite_of/precedence_of.mli
+++ b/lib/rites/rite_of/precedence_of.mli
@@ -69,9 +69,18 @@ val admit :
(Vocab_of.rank Precedence.candidate * Precedence.privilege) list
(** [vigil_feast]: always [None]. RG 33's third omission trigger is EF-only;
- the OF has no vigil OFFICE that its feast's movement could orphan. The
- Nativity's "of-nativity-vigil" is a Mass formulary of the solemnity, not a
- separate celebration. *)
+ the OF has no vigil OFFICE that its feast's movement could orphan --
+ Normae nn. 11/13 create no such independent celebration for anything
+ other than "of-nativity-vigil". THAT candidate is not exempt by lacking
+ standing: {!Rite_of.Temporal_of.named} constructs it as its own
+ Sollemnitas-rank candidate on 24 December, a genuine contestant in
+ {!band}/{!Colitur_kernel.Precedence.resolve}. It is exempt structurally
+ instead -- the Nativity (Tabula entry 2, band 20) can only ever be beaten
+ by the Triduum (entry 1, band 10), whose window (Easter-2..Easter) is
+ confined to 20 March-25 April because Gregorian Easter never falls outside
+ [22 March, 25 April] (measured exhaustively, 1583-9999, not assumed), so
+ it can never reach 25 December. The Nativity therefore always keeps its
+ own day, and its vigil can never be orphaned. *)
val vigil_feast : Vocab_of.rank Precedence.candidate -> Slug.t option
(** The four functions assembled for {!Colitur_kernel.Precedence.resolve}. *)