()
| 1293 | &[cnst("Bool", &[]), cnst("Bool", &[]), proj0, proj1], |
| 1294 | ); |
| 1295 | |
| 1296 | // ∀ (x : Prod Bool Bool), Eq.{1} (Prod Bool Bool) x (Prod.mk (x.1) (x.2)) |
| 1297 | let ty = npi( |
| 1298 | "x", |
| 1299 | prod_bb.clone(), |
| 1300 | eq_expr(usucc(uzero()), prod_bb.clone(), var(0), reconstructed), |
| 1301 | ); |
| 1302 | |
| 1303 | // fun x => Eq.refl.{1} (Prod Bool Bool) x |
| 1304 | let val = |
| 1305 | nlam("x", prod_bb.clone(), eq_refl_expr(usucc(uzero()), prod_bb, var(0))); |
| 1306 | |
| 1307 | let (id, c) = mk_thm("structEta", 0, vec![], ty, val); |
| 1308 | env.insert(id.clone(), c); |
| 1309 | check_accepts(&mut env, &id); |
| 1310 | } |
| 1311 | |
| 1312 | /// prodRecEqns: Prod.rec f (Prod.mk true false) = f true false = true |
| 1313 | #[test] |
| 1314 | fn good_prod_rec_reduction() { |
| 1315 | let mut env = prod_env(); |
| 1316 | let u1 = usucc(uzero()); |
| 1317 | |
| 1318 | let prod_bb = app( |
| 1319 | app(cnst("Prod", &[uzero(), uzero()]), cnst("Bool", &[])), |
| 1320 | cnst("Bool", &[]), |
| 1321 | ); |
| 1322 | let motive = nlam("_", prod_bb, cnst("Bool", &[])); |
| 1323 | let f_case = |
| 1324 | nlam("a", cnst("Bool", &[]), nlam("b", cnst("Bool", &[]), var(1))); |
| 1325 | let pair = apps( |
| 1326 | cnst("Prod.mk", &[uzero(), uzero()]), |
| 1327 | &[ |
| 1328 | cnst("Bool", &[]), |
nothing calls this directly
no test coverage detected