Mimics Lean.Doc.Inline: parameterized type with Array nesting. Inl.{u} (i : Sort (u+1)) : Sort (u+1) Inl.text.{u} : ∀ (i : Sort (u+1)), String → Inl.{u} i Inl.emph.{u} : ∀ (i : Sort (u+1)), Array.{u+1} (Inl.{u} i) → Inl.{u} i Inl.other.{u} : ∀ (i : Sort (u+1)), i → Array.{u+1} (Inl.{u} i) → Inl.{u} i
()
| 5938 | "Nat.succ rule should have 4 lambdas (0p + 1m + 2min + 1f), got {n_lams}" |
| 5939 | ); |
| 5940 | } |
| 5941 | |
| 5942 | /// Build env with List (1 param, 2 ctors including recursive cons). |
| 5943 | /// List.{u} : Sort u → Sort u |
| 5944 | /// List.nil.{u} : ∀ (α : Sort u), List.{u} α |
| 5945 | /// List.cons.{u} : ∀ (α : Sort u), α → List.{u} α → List.{u} α |
| 5946 | fn list_env() -> KEnv<Anon> { |
| 5947 | let mut env = KEnv::new(); |
| 5948 | let block = mk_id("List"); |
| 5949 | |
| 5950 | // List : Sort u → Sort u (1 lvl param) |
| 5951 | let list_ty = pi(AE::sort(param(0)), AE::sort(param(0))); |
| 5952 | env.insert( |
| 5953 | mk_id("List"), |
| 5954 | KConst::Indc { |
| 5955 | name: (), |
| 5956 | level_params: (), |
| 5957 | lvls: 1, |
| 5958 | params: 1, |
| 5959 | indices: 0, |
| 5960 | is_unsafe: false, |
| 5961 | block: block.clone(), |
| 5962 | member_idx: 0, |
| 5963 | ty: list_ty, |
| 5964 | ctors: vec![mk_id("List.nil"), mk_id("List.cons")], |
| 5965 | lean_all: (), |
| 5966 | }, |
| 5967 | ); |
| 5968 | |
| 5969 | // List.nil : ∀ (α : Sort u), List α |
| 5970 | let list_a = app(cnst("List", &[param(0)]), var(0)); // List.{u} α |
| 5971 | let nil_ty = pi(AE::sort(param(0)), list_a.clone()); |
| 5972 | env.insert( |
| 5973 | mk_id("List.nil"), |
| 5974 | KConst::Ctor { |
| 5975 | name: (), |
| 5976 | level_params: (), |
| 5977 | is_unsafe: false, |
| 5978 | lvls: 1, |
| 5979 | induct: mk_id("List"), |
| 5980 | cidx: 0, |
| 5981 | params: 1, |
| 5982 | fields: 0, |
| 5983 | ty: nil_ty, |
| 5984 | }, |
| 5985 | ); |
| 5986 | |
| 5987 | // List.cons : ∀ (α : Sort u) (head : α) (tail : List α), List α |
| 5988 | let cons_ty = pi( |
| 5989 | AE::sort(param(0)), // α |
| 5990 | pi( |
| 5991 | var(0), // head : α |
| 5992 | pi( |
| 5993 | app(cnst("List", &[param(0)]), var(1)), // tail : List α |
| 5994 | app(cnst("List", &[param(0)]), var(2)), // List α |
| 5995 | ), |
| 5996 | ), |
| 5997 | ); |