src/HOL/Proofs/ex/Hilbert_Classical.thy
changeset 61986 2461779da2b8
parent 58889 5b7a9633cfa8
child 64473 6eff987ab718
equal deleted inserted replaced
61985:a63a11b09335 61986:2461779da2b8
     1 (*  Title:      HOL/Proofs/ex/Hilbert_Classical.thy
     1 (*  Title:      HOL/Proofs/ex/Hilbert_Classical.thy
     2     Author:     Stefan Berghofer and Markus Wenzel, TU Muenchen
     2     Author:     Stefan Berghofer and Markus Wenzel, TU Muenchen
     3 *)
     3 *)
     4 
     4 
     5 section {* Hilbert's choice and classical logic *}
     5 section \<open>Hilbert's choice and classical logic\<close>
     6 
     6 
     7 theory Hilbert_Classical
     7 theory Hilbert_Classical
     8 imports Main
     8 imports Main
     9 begin
     9 begin
    10 
    10 
    11 text {*
    11 text \<open>
    12   Derivation of the classical law of tertium-non-datur by means of
    12   Derivation of the classical law of tertium-non-datur by means of
    13   Hilbert's choice operator (due to M. J. Beeson and J. Harrison).
    13   Hilbert's choice operator (due to M. J. Beeson and J. Harrison).
    14 *}
    14 \<close>
    15 
    15 
    16 
    16 
    17 subsection {* Proof text *}
    17 subsection \<open>Proof text\<close>
    18 
    18 
    19 theorem tnd: "A \<or> \<not> A"
    19 theorem tnd: "A \<or> \<not> A"
    20 proof -
    20 proof -
    21   let ?P = "\<lambda>X. X = False \<or> X = True \<and> A"
    21   let ?P = "\<lambda>X. X = False \<or> X = True \<and> A"
    22   let ?Q = "\<lambda>X. X = False \<and> A \<or> X = True"
    22   let ?Q = "\<lambda>X. X = False \<and> A \<or> X = True"
    92     qed
    92     qed
    93   qed
    93   qed
    94 qed
    94 qed
    95 
    95 
    96 
    96 
    97 subsection {* Proof term of text *}
    97 subsection \<open>Proof term of text\<close>
    98 
    98 
    99 prf tnd
    99 prf tnd
   100 
   100 
   101 
   101 
   102 subsection {* Proof script *}
   102 subsection \<open>Proof script\<close>
   103 
   103 
   104 theorem tnd': "A \<or> \<not> A"
   104 theorem tnd': "A \<or> \<not> A"
   105   apply (subgoal_tac
   105   apply (subgoal_tac
   106     "(((SOME x. x = False \<or> x = True \<and> A) = False) \<or>
   106     "(((SOME x. x = False \<or> x = True \<and> A) = False) \<or>
   107       ((SOME x. x = False \<or> x = True \<and> A) = True) \<and> A) \<and>
   107       ((SOME x. x = False \<or> x = True \<and> A) = True) \<and> A) \<and>
   151   apply (erule conjI)
   151   apply (erule conjI)
   152   apply assumption
   152   apply assumption
   153   done
   153   done
   154 
   154 
   155 
   155 
   156 subsection {* Proof term of script *}
   156 subsection \<open>Proof term of script\<close>
   157 
   157 
   158 prf tnd'
   158 prf tnd'
   159 
   159 
   160 end
   160 end