Mimics Lean.Syntax structure: a type `Syn` that nests with `List (Pair Name Syn)` — testing multi-level transitive nesting. Syn : Sort 1 Syn.atom : Syn Syn.node : List (Pair Name Syn) → Syn This should create a flat block: [Syn, List (Pair Name Syn), Pair (Name, Syn)] with 3 motives.
()
| 5571 | let count_binders = |e: &AE| -> usize { |
| 5572 | let mut n = 0; |
| 5573 | let mut c = e.clone(); |
| 5574 | while let ExprData::All(_, _, _, b, _) = c.data() { |
| 5575 | n += 1; |
| 5576 | c = b.clone(); |
| 5577 | } |
| 5578 | n |
| 5579 | }; |
| 5580 | |
| 5581 | // PTree.rec: 1 param + 2 motives + 4 minors + 0 indices + 1 major = 8 |
| 5582 | let n = count_binders(&generated[0].ty); |
| 5583 | assert_eq!(n, 8, "PTree.rec should have 8 binders, got {n}"); |
| 5584 | } |
| 5585 | |
| 5586 | /// Mimics Lean.Syntax structure: a type `Syn` that nests with |
| 5587 | /// `List (Pair Name Syn)` — testing multi-level transitive nesting. |
| 5588 | /// |
| 5589 | /// Syn : Sort 1 |
| 5590 | /// Syn.atom : Syn |
| 5591 | /// Syn.node : List (Pair Name Syn) → Syn |
| 5592 | /// |
| 5593 | /// This should create a flat block: |
| 5594 | /// [Syn, List (Pair Name Syn), Pair (Name, Syn)] |
| 5595 | /// with 3 motives. |
| 5596 | fn syntax_like_env() -> KEnv<Anon> { |
| 5597 | let mut env = KEnv::new(); |
| 5598 | let block = mk_id("Syn"); |
| 5599 | let syn = || cnst("Syn", &[]); |
| 5600 | |
| 5601 | // Name : Sort 1 (axiom, external) |
| 5602 | env.insert( |
| 5603 | mk_id("Name"), |
| 5604 | KConst::Axio { |
| 5605 | name: (), |
| 5606 | level_params: (), |
| 5607 | is_unsafe: false, |
| 5608 | lvls: 0, |
| 5609 | ty: sort1(), |
| 5610 | }, |
| 5611 | ); |
| 5612 | |
| 5613 | // Pair.{u,v} : Sort u → Sort v → Sort (max u v) |
| 5614 | // Pair.mk.{u,v} : ∀ (α : Sort u) (β : Sort v), α → β → Pair.{u,v} α β |
| 5615 | let pair_ty = pi( |
| 5616 | AE::sort(param(0)), |
| 5617 | pi(AE::sort(param(1)), AE::sort(AU::max(param(0), param(1)))), |
| 5618 | ); |
| 5619 | env.insert( |
| 5620 | mk_id("Pair"), |
| 5621 | KConst::Indc { |
| 5622 | name: (), |
| 5623 | level_params: (), |
| 5624 | lvls: 2, |
| 5625 | params: 2, |
| 5626 | indices: 0, |
| 5627 | is_unsafe: false, |
| 5628 | block: mk_id("Pair"), |
| 5629 | member_idx: 0, |
| 5630 | ty: pair_ty, |