src/FOL/ex/Miniscope.thy
author wenzelm
Tue, 05 Nov 2019 14:28:00 +0100
changeset 71047 87c132cf5860
parent 69593 3dda49e08b9d
permissions -rw-r--r--
more options;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     1
(*  Title:      FOL/ex/Miniscope.thy
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     2
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     3
    Copyright   1994  University of Cambridge
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     4
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     5
Classical First-Order Logic.
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     6
Conversion to nnf/miniscope format: pushing quantifiers in.
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     7
Demonstration of formula rewriting by proof.
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     8
*)
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
     9
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    10
theory Miniscope
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    11
imports FOL
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    12
begin
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    13
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    14
lemmas ccontr = FalseE [THEN classical]
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    15
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 59498
diff changeset
    16
subsection \<open>Negation Normal Form\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    17
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 59498
diff changeset
    18
subsubsection \<open>de Morgan laws\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    19
68536
e14848001c4c avoid pending shyps in global theory facts;
wenzelm
parents: 61489
diff changeset
    20
lemma demorgans1:
69590
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    21
  \<open>\<not> (P \<and> Q) \<longleftrightarrow> \<not> P \<or> \<not> Q\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    22
  \<open>\<not> (P \<or> Q) \<longleftrightarrow> \<not> P \<and> \<not> Q\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    23
  \<open>\<not> \<not> P \<longleftrightarrow> P\<close>
68536
e14848001c4c avoid pending shyps in global theory facts;
wenzelm
parents: 61489
diff changeset
    24
  by blast+
e14848001c4c avoid pending shyps in global theory facts;
wenzelm
parents: 61489
diff changeset
    25
e14848001c4c avoid pending shyps in global theory facts;
wenzelm
parents: 61489
diff changeset
    26
lemma demorgans2:
69590
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    27
  \<open>\<And>P. \<not> (\<forall>x. P(x)) \<longleftrightarrow> (\<exists>x. \<not> P(x))\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    28
  \<open>\<And>P. \<not> (\<exists>x. P(x)) \<longleftrightarrow> (\<forall>x. \<not> P(x))\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    29
  by blast+
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    30
68536
e14848001c4c avoid pending shyps in global theory facts;
wenzelm
parents: 61489
diff changeset
    31
lemmas demorgans = demorgans1 demorgans2
e14848001c4c avoid pending shyps in global theory facts;
wenzelm
parents: 61489
diff changeset
    32
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    33
(*** Removal of --> and <-> (positive and negative occurrences) ***)
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    34
(*Last one is important for computing a compact CNF*)
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    35
lemma nnf_simps:
69590
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    36
  \<open>(P \<longrightarrow> Q) \<longleftrightarrow> (\<not> P \<or> Q)\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    37
  \<open>\<not> (P \<longrightarrow> Q) \<longleftrightarrow> (P \<and> \<not> Q)\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    38
  \<open>(P \<longleftrightarrow> Q) \<longleftrightarrow> (\<not> P \<or> Q) \<and> (\<not> Q \<or> P)\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    39
  \<open>\<not> (P \<longleftrightarrow> Q) \<longleftrightarrow> (P \<or> Q) \<and> (\<not> P \<or> \<not> Q)\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    40
  by blast+
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    41
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    42
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    43
(* BEWARE: rewrite rules for <-> can confuse the simplifier!! *)
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    44
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 59498
diff changeset
    45
subsubsection \<open>Pushing in the existential quantifiers\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    46
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    47
lemma ex_simps:
69590
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    48
  \<open>(\<exists>x. P) \<longleftrightarrow> P\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    49
  \<open>\<And>P Q. (\<exists>x. P(x) \<and> Q) \<longleftrightarrow> (\<exists>x. P(x)) \<and> Q\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    50
  \<open>\<And>P Q. (\<exists>x. P \<and> Q(x)) \<longleftrightarrow> P \<and> (\<exists>x. Q(x))\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    51
  \<open>\<And>P Q. (\<exists>x. P(x) \<or> Q(x)) \<longleftrightarrow> (\<exists>x. P(x)) \<or> (\<exists>x. Q(x))\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    52
  \<open>\<And>P Q. (\<exists>x. P(x) \<or> Q) \<longleftrightarrow> (\<exists>x. P(x)) \<or> Q\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    53
  \<open>\<And>P Q. (\<exists>x. P \<or> Q(x)) \<longleftrightarrow> P \<or> (\<exists>x. Q(x))\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    54
  by blast+
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    55
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    56
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 59498
diff changeset
    57
subsubsection \<open>Pushing in the universal quantifiers\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    58
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    59
lemma all_simps:
69590
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    60
  \<open>(\<forall>x. P) \<longleftrightarrow> P\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    61
  \<open>\<And>P Q. (\<forall>x. P(x) \<and> Q(x)) \<longleftrightarrow> (\<forall>x. P(x)) \<and> (\<forall>x. Q(x))\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    62
  \<open>\<And>P Q. (\<forall>x. P(x) \<and> Q) \<longleftrightarrow> (\<forall>x. P(x)) \<and> Q\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    63
  \<open>\<And>P Q. (\<forall>x. P \<and> Q(x)) \<longleftrightarrow> P \<and> (\<forall>x. Q(x))\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    64
  \<open>\<And>P Q. (\<forall>x. P(x) \<or> Q) \<longleftrightarrow> (\<forall>x. P(x)) \<or> Q\<close>
e65314985426 isabelle update_inner_syntax_cartouches;
wenzelm
parents: 68536
diff changeset
    65
  \<open>\<And>P Q. (\<forall>x. P \<or> Q(x)) \<longleftrightarrow> P \<or> (\<forall>x. Q(x))\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    66
  by blast+
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    67
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    68
lemmas mini_simps = demorgans nnf_simps ex_simps all_simps
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    69
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 59498
diff changeset
    70
ML \<open>
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 69590
diff changeset
    71
val mini_ss = simpset_of (\<^context> addsimps @{thms mini_simps});
59498
50b60f501b05 proper context for resolve_tac, eresolve_tac, dresolve_tac, forward_tac etc.;
wenzelm
parents: 58838
diff changeset
    72
fun mini_tac ctxt =
50b60f501b05 proper context for resolve_tac, eresolve_tac, dresolve_tac, forward_tac etc.;
wenzelm
parents: 58838
diff changeset
    73
  resolve_tac ctxt @{thms ccontr} THEN' asm_full_simp_tac (put_simpset mini_ss ctxt);
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 59498
diff changeset
    74
\<close>
19820
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    75
0d7564c798d0 removed obsolete ML files;
wenzelm
parents:
diff changeset
    76
end