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

Function good_n_rec_reduction

crates/kernel/src/tutorial/reduction.rs:613–668  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

611
612 // N.add : N → N → N :=
613 // N.rec.{1} (motive := fun _ => N → N)
614 // (fun m => m) -- zero case
615 // (fun n ih m => N.succ (ih m)) -- succ case
616 let motive = nlam("_", nat(), pi(nat(), nat())); // fun _ => N → N
617
618 // zero case: fun m => m
619 let zero_case = nlam("m", nat(), var(0));
620
621 // succ case: fun n ih m => N.succ (ih m)
622 // depth 3: m=var(0), ih=var(1) : N → N, n=var(2) : N
623 let succ_case = nlam(
624 "n",
625 nat(),
626 nlam(
627 "ih",
628 pi(nat(), nat()),
629 nlam("m", nat(), app(cnst("N.succ", &[]), app(var(1), var(0)))),
630 ),
631 );
632
633 let add_val =
634 apps(cnst("N.rec", &[usucc(uzero())]), &[motive, zero_case, succ_case]);
635 let (add_id, add_c) = mk_defn(
636 "N.add",
637 0,
638 vec![],
639 pi(nat(), pi(nat(), nat())),
640 add_val,
641 ReducibilityHints::Abbrev,
642 );
643 env.insert(add_id, add_c);
644
645 // Test 1: ∀ m, N.add N.zero m = m
646 // N.add N.zero = (N.rec ...) N.zero → reduces zero case → fun m => m
647 // So N.add N.zero m = m
648 let ty1 = npi(
649 "m",
650 nat(),
651 eq_expr(
652 usucc(uzero()),
653 nat(),
654 app(app(cnst("N.add", &[]), cnst("N.zero", &[])), var(0)),
655 var(0),
656 ),
657 );
658 let val1 = nlam("m", nat(), eq_refl_expr(usucc(uzero()), nat(), var(0)));
659 let (id1, c1) = mk_thm("nAddZero", 0, vec![], ty1, val1);
660 env.insert(id1.clone(), c1);
661 check_accepts(&mut env, &id1);
662 }
663
664 /// N.add N.succ reduction: N.add (N.succ n) m = N.succ (N.add n m)
665 #[test]
666 fn good_n_rec_reduction_succ() {
667 let mut env = nat_env();
668 let nat = || cnst("N", &[]);
669
670 let motive = nlam("_", nat(), pi(nat(), nat()));

Callers

nothing calls this directly

Calls 15

nlamFunction · 0.85
appsFunction · 0.85
usuccFunction · 0.85
uzeroFunction · 0.85
mk_defnFunction · 0.85
npiFunction · 0.85
eq_exprFunction · 0.85
eq_refl_exprFunction · 0.85
mk_thmFunction · 0.85
check_acceptsFunction · 0.85
nat_envFunction · 0.70
cnstFunction · 0.50

Tested by

no test coverage detected