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

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