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

Function lean_expr_to_zexpr_raw

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

Source from the content-addressed store, hash-verified

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)),
2292 LevelData::Max(a, b, _) => KUniv::max(
2293 lean_level_to_kuniv(a, param_names),
2294 lean_level_to_kuniv(b, param_names),
2295 ),
2296 LevelData::Imax(a, b, _) => KUniv::imax(
2297 lean_level_to_kuniv(a, param_names),
2298 lean_level_to_kuniv(b, param_names),
2299 ),
2300 LevelData::Param(name, _) => {
2301 let idx =
2302 param_names.iter().position(|n| n == name).unwrap_or_else(|| {
2303 panic!(
2304 "unknown level param `{}` not found in param_names {:?}",
2305 name.pretty(),
2306 param_names.iter().map(|n| n.pretty()).collect::<Vec<_>>()
2307 )
2308 }) as u64;
2309 KUniv::param(idx, name.clone())
2310 },
2311 LevelData::Zero(_) => KUniv::zero(),
2312 LevelData::Mvar(name, _) => {
2313 panic!(
2314 "unexpected level metavariable `{}` in elaborated kernel term",
2315 name.pretty()
2316 );
2317 },
2318 }
2319}
2320
2321/// Resolve a Lean Name to an Address, using real Ixon address if available.
2322///
2323/// Checks `name_to_ixon_addr` first (real compiled address), falls back to
2324/// `Address::from_blake3_hash(*name.get_hash())` for constants not yet compiled.
2325pub fn resolve_lean_name_addr(
2326 name: &Name,
2327 name_to_ixon_addr: Option<&DashMap<Name, Address>>,
2328 aux_n2a: Option<&DashMap<Name, Address>>,
2329) -> Address {
2330 if let Some(map) = name_to_ixon_addr
2331 && let Some(entry) = map.get(name)
2332 {
2333 return entry.value().clone();
2334 }
2335 if let Some(map) = aux_n2a
2336 && let Some(entry) = map.get(name)
2337 {
2338 return entry.value().clone();
2339 }
2340 Address::from_blake3_hash(*name.get_hash())
2341}
2342
2343/// Convert a LeanExpr to KExpr<Meta>.
2344///
2345/// `param_names` provides the positional mapping for universe level params.
2346/// `name_to_ixon_addr` maps Lean names to real Ixon addresses for already-compiled
2347/// constants. Falls back to name hash for constants not yet compiled.
2348/// Compute a stable hash for a `param_names` slice, used as part of the

Callers 2

lean_expr_to_zexprFunction · 0.85

Calls 10

lean_level_to_kunivFunction · 0.85
resolve_lean_name_addrFunction · 0.85
as_dataMethod · 0.80
pushMethod · 0.80
as_bytesMethod · 0.80
cloneMethod · 0.45
lenMethod · 0.45
getMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected