MCPcopy Create free account
hub / github.com/argumentcomputer/ix / normalize_imax_dispatch

Function normalize_imax_dispatch

crates/kernel/src/level.rs:466–503  ·  view source on GitHub ↗

Dispatch `imax(a, b)` normalization based on `b`'s shape.

(
  a: &KUniv<M>,
  b: &KUniv<M>,
  path: &[u64],
  k: u64,
  acc: &mut NormLevel,
)

Source from the content-addressed store, hash-verified

464 path: &[u64],
465 k: u64,
466 acc: &mut NormLevel,
467) {
468 normalize_imax_dispatch(u, v, path, k, acc);
469 normalize_imax_dispatch(u, w, path, k, acc);
470}
471
472/// Handle `imax(u, imax(v, w))` = `max(imax(u, w), imax(v, w))`.
473fn normalize_imax_imax<M: KernelMode>(
474 u: &KUniv<M>,
475 v: &KUniv<M>,
476 w: &KUniv<M>,
477 path: &[u64],
478 k: u64,
479 acc: &mut NormLevel,
480) {
481 normalize_imax_dispatch(u, w, path, k, acc);
482 normalize_imax_dispatch(v, w, path, k, acc);
483}
484
485/// Dispatch `imax(a, b)` normalization based on `b`'s shape.
486fn normalize_imax_dispatch<M: KernelMode>(
487 a: &KUniv<M>,
488 b: &KUniv<M>,
489 path: &[u64],
490 k: u64,
491 acc: &mut NormLevel,
492) {
493 if b.is_zero() {
494 norm_add_const(acc, k, path);
495 } else if let UnivData::Succ(v, _) = b.data() {
496 normalize_aux(a, path, k, acc);
497 normalize_aux(v, path, k + 1, acc);
498 } else if let UnivData::Max(v, w, _) = b.data() {
499 normalize_imax_max(a, v, w, path, k, acc);
500 } else if let UnivData::IMax(v, w, _) = b.data() {
501 normalize_imax_imax(a, v, w, path, k, acc);
502 } else if let UnivData::Param(idx, _, _) = b.data() {
503 let idx = *idx;
504 if let Some(new_path) = ordered_insert(idx, path) {
505 // When param(idx) = 0, imax(a, 0) = 0, contributing k from outer succs.
506 norm_add_const(acc, k, path);

Callers 2

normalize_imax_maxFunction · 0.85
normalize_imax_imaxFunction · 0.85

Calls 9

norm_add_constFunction · 0.85
normalize_auxFunction · 0.85
normalize_imax_maxFunction · 0.85
normalize_imax_imaxFunction · 0.85
ordered_insertFunction · 0.85
norm_add_nodeFunction · 0.85
norm_add_varFunction · 0.85
is_zeroMethod · 0.80
dataMethod · 0.45

Tested by

no test coverage detected