( 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
| 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 | |
| 2284 | use 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. |
| 2289 | pub 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)), |
no test coverage detected