Thomas Tuerk
3c35cc25c3
cleaned-up the sources of the ITP course - remove internal notes - remove exercise solutions - remove KTH logo - add Creative Commons license
66 lines
2.3 KiB
Standard ML
66 lines
2.3 KiB
Standard ML
open HolKernel Parse boolLib bossLib;
|
|
|
|
val _ = new_theory "e2";
|
|
|
|
val _ = Datatype `Philosopher = diogenes | platon | euklid`;
|
|
val Philosopher_nchotomy = DB.fetch "-" "Philosopher_nchotomy";
|
|
val Philosopher_distinct = DB.fetch "-" "Philosopher_distinct";
|
|
|
|
|
|
val PHIL_KNOWLEDGE = new_specification ("PHIL_KNOWLEDGE", ["At", "Sp", "W", "B"],
|
|
prove (``?At Sp W B.
|
|
(!p. (Sp p ==> B p)) /\
|
|
(!p. (At p ==> W p)) /\
|
|
(!p. ~(Sp p) \/ ~(At p)) /\
|
|
(!p. (Sp p) \/ (At p)) /\
|
|
((Sp platon) ==> ~(W diogenes)) /\
|
|
((Sp euklid) ==> ~(B diogenes)) /\
|
|
((At diogenes) ==> ~(B euklid)) /\
|
|
((At platon) ==> ~(W euklid))``,
|
|
|
|
Q.EXISTS_TAC `\p. Philosopher_CASE p F F T` THEN
|
|
Q.EXISTS_TAC `\p. Philosopher_CASE p T T F` THEN
|
|
Q.EXISTS_TAC `\p. Philosopher_CASE p F T T` THEN
|
|
Q.EXISTS_TAC `\p. Philosopher_CASE p T T F` THEN
|
|
SIMP_TAC (srw_ss()++DatatypeSimps.expand_type_quants_ss [``:Philosopher``]) []));
|
|
|
|
|
|
val PHIL_KNOWLEDGE_a = store_thm ("PHIL_KNOWLEDGE_a", ``!p. Sp p ==> B p``,
|
|
REWRITE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_b = store_thm ("PHIL_KNOWLEDGE_b", ``!p. At p ==> W p``,
|
|
REWRITE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_c = store_thm ("PHIL_KNOWLEDGE_b", ``!p. ~(Sp p) \/ ~(At p)``,
|
|
REWRITE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_c1 = store_thm ("PHIL_KNOWLEDGE_c1", ``!p. Sp p ==> ~(At p)``,
|
|
PROVE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_c2 = store_thm ("PHIL_KNOWLEDGE_c2", ``!p. At p ==> ~(Sp p)``,
|
|
PROVE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_d = store_thm ("PHIL_KNOWLEDGE_d", ``!p. (Sp p) \/ (At p)``,
|
|
REWRITE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_d1 = store_thm ("PHIL_KNOWLEDGE_d1", ``!p. ~(Sp p) ==> At p``,
|
|
PROVE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_d2 = store_thm ("PHIL_KNOWLEDGE_d2", ``!p. ~(At p) ==> Sp p``,
|
|
PROVE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_e = store_thm ("PHIL_KNOWLEDGE_e", ``(Sp platon) ==> ~(W diogenes)``,
|
|
REWRITE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_f = store_thm ("PHIL_KNOWLEDGE_f", ``(Sp euklid) ==> ~(B diogenes)``,
|
|
REWRITE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_g = store_thm ("PHIL_KNOWLEDGE_g", ``(At diogenes) ==> ~(B euklid)``,
|
|
REWRITE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val PHIL_KNOWLEDGE_h = store_thm ("PHIL_KNOWLEDGE_g", ``(At platon) ==> ~(W euklid)``,
|
|
REWRITE_TAC[PHIL_KNOWLEDGE]);
|
|
|
|
val _ = export_theory();
|
|
|