Clamp, materialize, and contain via conversio and continet.
Syntax:
Category
range
Related
Examples
examples/corpus/intervallum/algebra.fab (canonical · type)
Interval algebra: intersection, union, and span count.
# intervallum — range algebra (inter, union, longitudo)
#
# `inter` / `union` return `intervallum<numerus> ∪ nihil` (nihil when disjoint
# or non-adjacent). `longitudo` returns discrete bound-count for numerus v1.
#
# EXPECTED OUTPUT:
# none — stdout not pinned for this exemplum.
incipit {
fixum intervallum<numerus> morning ← 0‥6
fixum intervallum<numerus> afternoon ← 4‥10
fixum intervallum<numerus> overlap ← morning.inter(afternoon) vel 0‥0
fixum intervallum<numerus> early ← 0‥5
fixum intervallum<numerus> late ← 5‥10
fixum intervallum<numerus> workday ← early.union(late) vel 0‥0
fixum _ overlap_span ← overlap.longitudo()
fixum _ workday_span ← workday.longitudo()
adfirma overlap_span ≡ 2
adfirma workday_span ≡ 10
fixum intervallum<numerus> gap_left ← 0‥3
fixum intervallum<numerus> gap_right ← 6‥9
fixum _ no_union ← gap_left.union(gap_right)
adfirma no_union est nihil
}examples/corpus/intervallum/conversio.fab (canonical · type)
Clamp, materialize, and contain via conversio and continet.
# intervallum — conversio clamp, materialize, and continet
#
# Value clamp result type is bound `numerus` (refinement-target special case).
# Range materialize honors declared inclusivity on `‥` / `…`.
#
# EXPECTED OUTPUT:
# none — stdout not pinned for this exemplum.
incipit {
# --- value clamp (half-open interior vs inclusive endpoint) ---
fixum _ half ← 15 ↦ 0‥10
fixum _ closed ← 15 ↦ 0…10
adfirma half ≡ 9
adfirma closed ≡ 10
# --- materialize to lista or 1-d tensor ---
fixum lista<numerus> half_list ← 0‥10 ↦ lista<numerus>
fixum lista<numerus> closed_list ← 0…3 ↦ lista<numerus>
fixum tensor<numerus, [10]> half_grid ← 0‥10 ↦ tensor<numerus, [10]>
fixum tensor<numerus, [4]> closed_grid ← 0…3 ↦ tensor<numerus, [4]>
fixum lista<numerus> half_flat ← half_grid.planata()
fixum lista<numerus> closed_flat ← closed_grid.planata()
adfirma half_list.longitudo() ≡ 10
adfirma closed_list.longitudo() ≡ 4
adfirma half_flat.longitudo() ≡ 10
adfirma closed_flat.longitudo() ≡ 4
# --- range-to-range clamp inherits target inclusivity ---
fixum intervallum<numerus> wide ← 0‥100
fixum intervallum<numerus> narrow ← wide ↦ 10…50
adfirma narrow.longitudo() ≡ 41
# --- stored containment via continet (intra desugars to the same surface) ---
fixum intervallum<numerus> fines ← 0‥10
fixum _ inside ← fines.continet(5)
adfirma inside
}