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

Function lean_expr_to_zexpr_cached

crates/kernel/src/ingress.rs:2250–2288  ·  view source on GitHub ↗
(
  expr: &LeanExpr,
  param_names: &[Name],
  binder_names: &mut Vec<Name>,
  intern: &mut InternTable<Meta>,
  n2a: Option<&DashMap<Name, Address>>,
  aux_n2a: Option<&DashMap<Name, Address>>,
  mut

Source from the content-addressed store, hash-verified

2248 // Returns `TcError::NonCanonicalBlock` on failure, propagated as the
2249 // string error variant `ingress_muts_block` already returns.
2250 let mut indcs: Vec<(KId<M>, &KConst<M>)> = Vec::new();
2251 for (id, c) in &results {
2252 if matches!(c, KConst::Indc { .. }) {
2253 indcs.push((id.clone(), c));
2254 }
2255 }
2256 let all_primary_indc = !indcs.is_empty()
2257 && indcs.len()
2258 == members.iter().filter(|m| matches!(m, IxonMutConst::Indc(_))).count();
2259 if all_primary_indc
2260 && members.iter().all(|m| matches!(m, IxonMutConst::Indc(_)))
2261 {
2262 // Resolve a ctor by id by scanning the ingested results — simpler
2263 // than threading the env, since the comparator only needs Ctor
2264 // payloads for Indc ctors.
2265 let results_ref: &Vec<(KId<M>, KConst<M>)> = &results;
2266 let resolve_ctor = |cid: &KId<M>| -> Option<KConst<M>> {
2267 results_ref.iter().find(|(rid, _)| rid == cid).map(|(_, c)| c.clone())
2268 };
2269 crate::canonical_check::validate_canonical_block_single_pass::<M>(
2270 entry_addr,
2271 &indcs,
2272 &resolve_ctor,
2273 )
2274 .map_err(|e| format!("{e}"))?;
2275 }
2276
2277 Ok(results)
2278}
2279
2280// ============================================================================
2281// Lightweight LeanExpr → KExpr ingress (compile-side)
2282// ============================================================================
2283
2284use ix_common::env::{
2285 Expr as LeanExpr, ExprData as LeanExprData, Level, LevelData,
2286};
2287
2288/// Convert a Lean Level to KUniv<Meta>, mapping named params to positional indices.
2289pub fn lean_level_to_kuniv(lvl: &Level, param_names: &[Name]) -> KUniv<Meta> {
2290 match lvl.as_data() {
2291 LevelData::Succ(l, _) => KUniv::succ(lean_level_to_kuniv(l, param_names)),

Callers 3

lean_expr_to_zexpr_rawFunction · 0.85

Calls 6

lean_expr_to_zexpr_rawFunction · 0.85
get_hashMethod · 0.80
intern_exprMethod · 0.80
getMethod · 0.45
cloneMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected