equal
deleted
inserted
replaced
368 val t = HOLogic.mk_not prem; |
368 val t = HOLogic.mk_not prem; |
369 in HOLogic.mk_Trueprop t end; |
369 in HOLogic.mk_Trueprop t end; |
370 in map mk_dist (sym_product cos) end; |
370 in map mk_dist (sym_product cos) end; |
371 |
371 |
372 local |
372 local |
|
373 val not_sym = thm "HOL.not_sym"; |
373 val not_false_true = iffD2 OF [nth (thms "HOL.simp_thms") 7, TrueI]; |
374 val not_false_true = iffD2 OF [nth (thms "HOL.simp_thms") 7, TrueI]; |
374 in fun get_eq thy dtco = |
375 in fun get_eq thy dtco = |
375 let |
376 let |
376 val SOME (vs, cs) = DatatypePackage.get_datatype_spec thy dtco; |
377 val SOME (vs, cs) = DatatypePackage.get_datatype_spec thy dtco; |
377 fun mk_triv_inject co = |
378 fun mk_triv_inject co = |
394 val tac = ALLGOALS (simp_tac simpset) |
395 val tac = ALLGOALS (simp_tac simpset) |
395 THEN ALLGOALS (ProofContext.fact_tac [not_false_true, TrueI]); |
396 THEN ALLGOALS (ProofContext.fact_tac [not_false_true, TrueI]); |
396 val distinct = |
397 val distinct = |
397 mk_distinct cos |
398 mk_distinct cos |
398 |> map (fn t => Goal.prove_global thy [] [] t (K tac)) |
399 |> map (fn t => Goal.prove_global thy [] [] t (K tac)) |
|
400 |> (fn thms => thms @ map (fn thm => not_sym OF [thm]) thms) |
399 in inject1 @ inject2 @ distinct end; |
401 in inject1 @ inject2 @ distinct end; |
400 end (*local*); |
402 end (*local*); |
401 |
403 |
402 fun datatype_tac thy dtco = |
404 fun datatype_tac thy dtco = |
403 let |
405 let |