src/FOL/FOL.thy
author nipkow
Mon, 06 Aug 2001 13:43:24 +0200
changeset 11464 ddea204de5bc
parent 11096 bedfd42db838
child 11678 6aa3e2d26683
permissions -rw-r--r--
turned translation for 1::nat into def. introduced 1' and replaced most occurrences of 1 by 1'.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     1
(*  Title:      FOL/FOL.thy
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     2
    ID:         $Id$
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     3
    Author:     Lawrence C Paulson and Markus Wenzel
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     4
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     5
Classical first-order logic.
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     6
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     7
This may serve as a good example of initializing all the tools and
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     8
packages required for a reasonable working environment.  Please go
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
     9
elsewhere to see actual applications!
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    10
*)
4093
5e8f3d57dee7 added claset thy_data;
wenzelm
parents: 0
diff changeset
    11
7355
4c43090659ca proper bootstrap of IFOL/FOL theories and packages;
wenzelm
parents: 5887
diff changeset
    12
theory FOL = IFOL
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    13
files
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    14
  ("FOL_lemmas1.ML") ("cladata.ML") ("blastdata.ML")
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    15
  ("simpdata.ML") ("FOL_lemmas2.ML"):
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    16
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    17
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    18
subsection {* The classical axiom *}
4093
5e8f3d57dee7 added claset thy_data;
wenzelm
parents: 0
diff changeset
    19
7355
4c43090659ca proper bootstrap of IFOL/FOL theories and packages;
wenzelm
parents: 5887
diff changeset
    20
axioms
4c43090659ca proper bootstrap of IFOL/FOL theories and packages;
wenzelm
parents: 5887
diff changeset
    21
  classical: "(~P ==> P) ==> P"
4093
5e8f3d57dee7 added claset thy_data;
wenzelm
parents: 0
diff changeset
    22
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    23
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    24
subsection {* Setup of several proof tools *}
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    25
7355
4c43090659ca proper bootstrap of IFOL/FOL theories and packages;
wenzelm
parents: 5887
diff changeset
    26
use "FOL_lemmas1.ML"
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    27
10430
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    28
lemma atomize_all: "(!!x. P(x)) == Trueprop (ALL x. P(x))"
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    29
proof (rule equal_intr_rule)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    30
  assume "!!x. P(x)"
10383
a092ae7bb2a6 "atomize" for classical tactics;
wenzelm
parents: 10130
diff changeset
    31
  show "ALL x. P(x)" by (rule allI)
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    32
next
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    33
  assume "ALL x. P(x)"
10383
a092ae7bb2a6 "atomize" for classical tactics;
wenzelm
parents: 10130
diff changeset
    34
  thus "!!x. P(x)" by (rule allE)
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    35
qed
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    36
10430
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    37
lemma atomize_imp: "(A ==> B) == Trueprop (A --> B)"
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    38
proof (rule equal_intr_rule)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    39
  assume r: "A ==> B"
10383
a092ae7bb2a6 "atomize" for classical tactics;
wenzelm
parents: 10130
diff changeset
    40
  show "A --> B" by (rule impI) (rule r)
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    41
next
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    42
  assume "A --> B" and A
10383
a092ae7bb2a6 "atomize" for classical tactics;
wenzelm
parents: 10130
diff changeset
    43
  thus B by (rule mp)
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    44
qed
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    45
10430
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    46
lemma atomize_eq: "(x == y) == Trueprop (x = y)"
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    47
proof (rule equal_intr_rule)
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    48
  assume "x == y"
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    49
  show "x = y" by (unfold prems) (rule refl)
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    50
next
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    51
  assume "x = y"
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    52
  thus "x == y" by (rule eq_reflection)
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    53
qed
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    54
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    55
lemmas atomize = atomize_all atomize_imp
d3f780c3af0c added atomize_eq;
wenzelm
parents: 10383
diff changeset
    56
lemmas atomize' = atomize atomize_eq
9525
46fb9ccae463 lemmas atomize = all_eq imp_eq;
wenzelm
parents: 9487
diff changeset
    57
10383
a092ae7bb2a6 "atomize" for classical tactics;
wenzelm
parents: 10130
diff changeset
    58
use "cladata.ML"
a092ae7bb2a6 "atomize" for classical tactics;
wenzelm
parents: 10130
diff changeset
    59
setup Cla.setup
a092ae7bb2a6 "atomize" for classical tactics;
wenzelm
parents: 10130
diff changeset
    60
setup clasetup
a092ae7bb2a6 "atomize" for classical tactics;
wenzelm
parents: 10130
diff changeset
    61
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    62
use "blastdata.ML"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    63
setup Blast.setup
7355
4c43090659ca proper bootstrap of IFOL/FOL theories and packages;
wenzelm
parents: 5887
diff changeset
    64
use "FOL_lemmas2.ML"
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    65
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    66
use "simpdata.ML"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    67
setup simpsetup
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    68
setup "Simplifier.method_setup Splitter.split_modifiers"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    69
setup Splitter.setup
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    70
setup Clasimp.setup
9885
34494703d283 setup Rulify.setup;
wenzelm
parents: 9713
diff changeset
    71
setup Rulify.setup
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    72
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    73
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    74
subsection {* Calculational rules *}
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    75
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    76
lemma forw_subst: "a = b ==> P(b) ==> P(a)"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    77
  by (rule ssubst)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    78
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    79
lemma back_subst: "P(a) ==> a = b ==> P(b)"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    80
  by (rule subst)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    81
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    82
text {*
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    83
  Note that this list of rules is in reverse order of priorities.
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    84
*}
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    85
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    86
lemmas trans_rules [trans] =
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    87
  forw_subst
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    88
  back_subst
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    89
  rev_mp
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    90
  mp
11096
bedfd42db838 tuned trans rules;
wenzelm
parents: 10430
diff changeset
    91
  transitive
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    92
  trans
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    93
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    94
lemmas [elim?] = sym
4093
5e8f3d57dee7 added claset thy_data;
wenzelm
parents: 0
diff changeset
    95
4854
d1850e0964f2 tuned setup;
wenzelm
parents: 4793
diff changeset
    96
end