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

Function syntax_like_env

crates/kernel/src/inductive.rs:5573–5773  ·  view source on GitHub ↗

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.

()

Source from the content-addressed store, hash-verified

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,

Calls 10

sortFunction · 0.85
mk_idFunction · 0.70
cnstFunction · 0.70
sort1Function · 0.70
piFunction · 0.70
paramFunction · 0.70
varFunction · 0.70
appFunction · 0.70
insertMethod · 0.45
cloneMethod · 0.45

Tested by 3

syntax_like_flat_blockFunction · 0.68