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

Function good_proj_red

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

Source from the content-addressed store, hash-verified

1264 // .proj Prod 1 pair = false
1265 let proj = ME::prj(mk_id("Prod"), 1, pair);
1266 // Eq.{1} Bool (.proj Prod 1 (mk true false)) false
1267 let ty =
1268 eq_expr(usucc(uzero()), cnst("Bool", &[]), proj, cnst("Bool.false", &[]));
1269 let val =
1270 eq_refl_expr(usucc(uzero()), cnst("Bool", &[]), cnst("Bool.false", &[]));
1271
1272 let (id, c) = mk_thm("projRed", 0, vec![], ty, val);
1273 env.insert(id.clone(), c);
1274 check_accepts(&mut env, &id);
1275 }
1276
1277 /// structEta : ∀ (x : Prod Bool Bool), x = Prod.mk (.proj Prod 0 x) (.proj Prod 1 x)
1278 /// Structure eta: a value of a structure type equals the constructor applied to its projections.
1279 #[test]
1280 fn good_struct_eta() {
1281 let mut env = prod_env();
1282
1283 let prod_bb = app(
1284 app(cnst("Prod", &[uzero(), uzero()]), cnst("Bool", &[])),
1285 cnst("Bool", &[]),
1286 );
1287
1288 // depth 1: x=var(0) : Prod Bool Bool
1289 let proj0 = ME::prj(mk_id("Prod"), 0, var(0));
1290 let proj1 = ME::prj(mk_id("Prod"), 1, var(0));
1291 let reconstructed = apps(
1292 cnst("Prod.mk", &[uzero(), uzero()]),
1293 &[cnst("Bool", &[]), cnst("Bool", &[]), proj0, proj1],

Callers

nothing calls this directly

Calls 12

prod_envFunction · 0.85
appsFunction · 0.85
uzeroFunction · 0.85
eq_exprFunction · 0.85
usuccFunction · 0.85
eq_refl_exprFunction · 0.85
mk_thmFunction · 0.85
check_acceptsFunction · 0.85
cnstFunction · 0.50
mk_idFunction · 0.50
insertMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected