()
| 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], |
nothing calls this directly
no test coverage detected