Minimal Quot env: Quot / Quot.mk / Quot.lift / Quot.ind as axioms.
()
| 4520 | let char_ty = AE::cnst(prims.char_type.clone(), Box::new([])); |
| 4521 | let char_of_nat = AE::cnst(prims.char_of_nat.clone(), Box::new([])); |
| 4522 | let list_nil = AE::cnst(list_nil_id.clone(), Box::new([])); |
| 4523 | let list_cons = AE::cnst(list_cons_id.clone(), Box::new([])); |
| 4524 | let nil_char = app(list_nil, char_ty.clone()); |
| 4525 | let char_a = app(char_of_nat, mk_nat(65)); |
| 4526 | let one_char_list = |
| 4527 | apps_ae(list_cons, &[char_ty.clone(), char_a, nil_char]); |
| 4528 | env.insert( |
| 4529 | string_to_list_id.clone(), |
| 4530 | KConst::Defn { |
| 4531 | name: (), |
| 4532 | level_params: (), |
| 4533 | kind: DefKind::Definition, |
| 4534 | safety: DefinitionSafety::Safe, |
| 4535 | hints: ReducibilityHints::Regular(0), |
| 4536 | lvls: 0, |
| 4537 | ty: sort0(), |
| 4538 | val: lam(sort0(), one_char_list), |
| 4539 | lean_all: (), |
| 4540 | block: string_to_list_id.clone(), |
| 4541 | }, |
| 4542 | ); |
| 4543 | |
| 4544 | let nat_succ = AE::cnst(prims.nat_succ.clone(), Box::new([])); |
| 4545 | let motive = lam(sort0(), nat()); |
| 4546 | let cons_case = lam( |
| 4547 | var(1), |
| 4548 | lam(app(list_const.clone(), var(2)), lam(nat(), app(nat_succ, var(0)))), |
| 4549 | ); |
| 4550 | let length_body = |
| 4551 | apps_ae(rec_const, &[var(1), motive, mk_nat(0), cons_case, var(0)]); |
| 4552 | env.insert( |
| 4553 | list_length_id.clone(), |
| 4554 | KConst::Defn { |
| 4555 | name: (), |
| 4556 | level_params: (), |
| 4557 | kind: DefKind::Definition, |
| 4558 | safety: DefinitionSafety::Safe, |
| 4559 | hints: ReducibilityHints::Regular(0), |
| 4560 | lvls: 1, |
| 4561 | ty: sort0(), |
| 4562 | val: lam(sort0(), lam(app(list_const, var(0)), length_body)), |
| 4563 | lean_all: (), |
| 4564 | block: list_length_id.clone(), |
| 4565 | }, |
| 4566 | ); |
| 4567 | |
| 4568 | let mut tc = TypeChecker::new(&mut env); |
| 4569 | let string_to_list = AE::cnst(string_to_list_id, Box::new([])); |
| 4570 | let list_length = AE::cnst(list_length_id, Box::new([KUniv::zero()])); |
| 4571 | let nat_ble = AE::cnst(tc.prims.nat_ble.clone(), Box::new([])); |
| 4572 | |
| 4573 | let sample = " 0123abcABC:,;`\\/"; |