428 val thm1 = make_cnfx_disj_thm x' y1 |
428 val thm1 = make_cnfx_disj_thm x' y1 |
429 val thm2 = make_cnfx_disj_thm x' y2 |
429 val thm2 = make_cnfx_disj_thm x' y2 |
430 in |
430 in |
431 make_cnf_disj_conj_r OF [thm1, thm2] (* (x' | (y1 & y2)) = ((x' | y1)' & (x' | y2)') *) |
431 make_cnf_disj_conj_r OF [thm1, thm2] (* (x' | (y1 & y2)) = ((x' | y1)' & (x' | y2)') *) |
432 end |
432 end |
433 | make_cnfx_disj_thm (Const (@{const_name Ex}, _) $ x') y' = |
433 | make_cnfx_disj_thm (@{term "Ex::(bool => bool) => bool"} $ x') y' = |
434 let |
434 let |
435 val thm1 = inst_thm thy [x', y'] make_cnfx_disj_ex_l (* ((Ex x') | y') = (Ex (x' | y')) *) |
435 val thm1 = inst_thm thy [x', y'] make_cnfx_disj_ex_l (* ((Ex x') | y') = (Ex (x' | y')) *) |
436 val var = new_free () |
436 val var = new_free () |
437 val thm2 = make_cnfx_disj_thm (betapply (x', var)) y' (* (x' | y') = body' *) |
437 val thm2 = make_cnfx_disj_thm (betapply (x', var)) y' (* (x' | y') = body' *) |
438 val thm3 = Thm.forall_intr (cterm_of thy var) thm2 (* !!v. (x' | y') = body' *) |
438 val thm3 = Thm.forall_intr (cterm_of thy var) thm2 (* !!v. (x' | y') = body' *) |
439 val thm4 = Thm.strip_shyps (thm3 COMP allI) (* ALL v. (x' | y') = body' *) |
439 val thm4 = Thm.strip_shyps (thm3 COMP allI) (* ALL v. (x' | y') = body' *) |
440 val thm5 = Thm.strip_shyps (thm4 RS make_cnfx_ex_cong) (* (EX v. (x' | y')) = (EX v. body') *) |
440 val thm5 = Thm.strip_shyps (thm4 RS make_cnfx_ex_cong) (* (EX v. (x' | y')) = (EX v. body') *) |
441 in |
441 in |
442 iff_trans OF [thm1, thm5] (* ((Ex x') | y') = (Ex v. body') *) |
442 iff_trans OF [thm1, thm5] (* ((Ex x') | y') = (Ex v. body') *) |
443 end |
443 end |
444 | make_cnfx_disj_thm x' (Const (@{const_name Ex}, _) $ y') = |
444 | make_cnfx_disj_thm x' (@{term "Ex::(bool => bool) => bool"} $ y') = |
445 let |
445 let |
446 val thm1 = inst_thm thy [x', y'] make_cnfx_disj_ex_r (* (x' | (Ex y')) = (Ex (x' | y')) *) |
446 val thm1 = inst_thm thy [x', y'] make_cnfx_disj_ex_r (* (x' | (Ex y')) = (Ex (x' | y')) *) |
447 val var = new_free () |
447 val var = new_free () |
448 val thm2 = make_cnfx_disj_thm x' (betapply (y', var)) (* (x' | y') = body' *) |
448 val thm2 = make_cnfx_disj_thm x' (betapply (y', var)) (* (x' | y') = body' *) |
449 val thm3 = Thm.forall_intr (cterm_of thy var) thm2 (* !!v. (x' | y') = body' *) |
449 val thm3 = Thm.forall_intr (cterm_of thy var) thm2 (* !!v. (x' | y') = body' *) |