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

Method try_reduce_bitvec_to_nat

crates/kernel/src/whnf.rs:2575–2608  ·  view source on GitHub ↗
(
    &mut self,
    value: &KExpr<M>,
  )

Source from the content-addressed store, hash-verified

2573 };
2574 if id.addr != self.prims.nat_rec.addr {
2575 return Ok(None);
2576 }
2577
2578 let Some(KConst::Recr { params, motives, minors, indices, .. }) =
2579 self.try_get_const(id)?
2580 else {
2581 return Ok(None);
2582 };
2583 let params = u64_to_usize::<M>(params)?;
2584 let motives = u64_to_usize::<M>(motives)?;
2585 let minors = u64_to_usize::<M>(minors)?;
2586 let indices = u64_to_usize::<M>(indices)?;
2587 if minors < 2 {
2588 return Ok(None);
2589 }
2590
2591 let base_idx = params + motives;
2592 let step_idx = base_idx + 1;
2593 let major_idx = params + motives + minors + indices;
2594 let Some(major) = spine.get(major_idx) else {
2595 return Ok(None);
2596 };
2597 let ExprData::Nat(major, _, _) = major.data() else {
2598 return Ok(None);
2599 };
2600 let major = major.clone();
2601
2602 Ok(Some(NatRecLiteralParts { spine, major, base_idx, step_idx, major_idx }))
2603 }
2604
2605 fn is_nat_succ_ih_step(
2606 &mut self,
2607 step: &KExpr<M>,
2608 ) -> Result<bool, TcError<M>> {
2609 let step = self.whnf(step)?;
2610 let ExprData::Lam(_, _, _, body, _) = step.data() else {
2611 return Ok(false);

Callers 2

try_reduce_bitvecMethod · 0.80
bitvec_to_nat_exprMethod · 0.80

Calls 6

extract_nat_valueFunction · 0.85
bitvec_of_nat_argsMethod · 0.80
whnfMethod · 0.80
nat_literalMethod · 0.80
nat_expr_from_valueMethod · 0.80

Tested by

no test coverage detected