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

Function reject_bool_rec_with_swapped_rules

crates/kernel/src/inductive.rs:6752–6832  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

6750 let rec_block = mk_id("Bool.rec.block");
6751
6752 // Rebuild recursor type and rule-body domains exactly as `bool_env`
6753 // does, then swap which Var is returned in each rule.
6754 let motive_ty = pi(cnst("Bool", &[]), AE::sort(param(0)));
6755 let minor_true = app(var(0), cnst("Bool.true", &[]));
6756 let minor_false = app(var(1), cnst("Bool.false", &[]));
6757 let major_ty = cnst("Bool", &[]);
6758 let ret = app(var(3), var(0));
6759 let rec_ty = pi(
6760 motive_ty.clone(),
6761 pi(minor_true.clone(), pi(minor_false.clone(), pi(major_ty, ret))),
6762 );
6763
6764 // SWAPPED rules: rule 0 returns `h_false` (var 0), rule 1 returns `h_true` (var 1).
6765 // Canonical: rule 0 returns `h_true` (var 1), rule 1 returns `h_false` (var 0).
6766 let motive_dom = motive_ty;
6767 let h_true_dom = minor_true;
6768 let h_false_dom = minor_false;
6769 let rule_true_rhs_swapped = lam(
6770 motive_dom.clone(),
6771 lam(
6772 h_true_dom.clone(),
6773 lam(h_false_dom.clone(), var(0)), // wrong: should be var(1)
6774 ),
6775 );
6776 let rule_false_rhs_swapped = lam(
6777 motive_dom,
6778 lam(
6779 h_true_dom,
6780 lam(h_false_dom, var(1)), // wrong: should be var(0)
6781 ),
6782 );
6783
6784 env.insert(
6785 mk_id("Bool.rec"),
6786 KConst::Recr {
6787 name: (),
6788 level_params: (),
6789 k: false,
6790 is_unsafe: false,
6791 lvls: 1,
6792 params: 0,
6793 indices: 0,
6794 motives: 1,
6795 minors: 2,
6796 block: rec_block,
6797 member_idx: 0,
6798 ty: rec_ty,
6799 rules: vec![
6800 super::super::constant::RecRule {
6801 ctor: (),
6802 fields: 0,
6803 rhs: rule_true_rhs_swapped,
6804 },
6805 super::super::constant::RecRule {
6806 ctor: (),
6807 fields: 0,
6808 rhs: rule_false_rhs_swapped,
6809 },

Callers

nothing calls this directly

Calls 12

sortFunction · 0.85
check_constMethod · 0.80
bool_envFunction · 0.70
mk_idFunction · 0.70
piFunction · 0.70
cnstFunction · 0.70
paramFunction · 0.70
appFunction · 0.70
varFunction · 0.70
lamFunction · 0.70
cloneMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected