()
| 391 | let mut env = bool_env(); |
| 392 | |
| 393 | // Test: Bool.rec (motive := fun _ => Bool) Bool.false Bool.true Bool.false = Bool.false |
| 394 | // i.e., the recursor on false returns the false-case value |
| 395 | // |
| 396 | // ∀ {motive : Bool → Sort 1} (hf : motive Bool.false) (ht : motive Bool.true), |
| 397 | // Eq.{1} (motive Bool.false) (Bool.rec hf ht Bool.false) hf |
| 398 | // |
| 399 | // Simplified: test with concrete motive = fun _ => Bool |
| 400 | let motive = nlam("_", cnst("Bool", &[]), cnst("Bool", &[])); // fun _ => Bool |
| 401 | let rec_app = apps( |
| 402 | cnst("Bool.rec", &[usucc(uzero())]), |
| 403 | &[ |
| 404 | motive.clone(), |
| 405 | cnst("Bool.false", &[]), // false case returns Bool.false |
| 406 | cnst("Bool.true", &[]), // true case returns Bool.true |
| 407 | cnst("Bool.false", &[]), // major: false |
| 408 | ], |
| 409 | ); |
| 410 | // After reduction: Bool.rec ... false = false-case = Bool.false |
| 411 | let ty = eq_expr( |
| 412 | usucc(uzero()), |
| 413 | cnst("Bool", &[]), |
| 414 | rec_app, |
| 415 | cnst("Bool.false", &[]), |
| 416 | ); |
| 417 | let val = |
| 418 | eq_refl_expr(usucc(uzero()), cnst("Bool", &[]), cnst("Bool.false", &[])); |
| 419 | let (id, c) = mk_thm("boolRecFalse", 0, vec![], ty, val); |
| 420 | env.insert(id.clone(), c); |
| 421 | check_accepts(&mut env, &id); |
| 422 | } |
| 423 | |
| 424 | /// Bool.rec on true returns the true-case value |
| 425 | #[test] |
| 426 | fn good_bool_rec_reduction_true() { |
| 427 | let mut env = bool_env(); |
| 428 |
nothing calls this directly
no test coverage detected