src/FOL/FOL.thy
author wenzelm
Tue, 01 Aug 2000 11:58:14 +0200
changeset 9487 7e377f912629
parent 8643 331f0c75e3dc
child 9525 46fb9ccae463
permissions -rw-r--r--
improved comments; added all_eq, imp_eq (for blast); basic calculational rules;
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
use "cladata.ML"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    28
setup Cla.setup
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    29
setup clasetup
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    30
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    31
lemma all_eq: "(!!x. P(x)) == Trueprop (ALL x. P(x))"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    32
proof (rule equal_intr_rule)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    33
  assume "!!x. P(x)"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    34
  show "ALL x. P(x)" ..
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    35
next
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    36
  assume "ALL x. P(x)"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    37
  thus "!!x. P(x)" ..
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    38
qed
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    39
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    40
lemma imp_eq: "(A ==> B) == Trueprop (A --> B)"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    41
proof (rule equal_intr_rule)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    42
  assume r: "A ==> B"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    43
  show "A --> B"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    44
    by (rule) (rule r)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    45
next
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    46
  assume "A --> B" and A
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    47
  thus B ..
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    48
qed
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    49
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    50
use "blastdata.ML"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    51
setup Blast.setup
7355
4c43090659ca proper bootstrap of IFOL/FOL theories and packages;
wenzelm
parents: 5887
diff changeset
    52
use "FOL_lemmas2.ML"
9487
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    53
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    54
use "simpdata.ML"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    55
setup simpsetup
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    56
setup cong_attrib_setup
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    57
setup "Simplifier.method_setup Splitter.split_modifiers"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    58
setup Splitter.setup
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    59
setup Clasimp.setup
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    60
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    61
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    62
subsection {* Calculational rules *}
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    63
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    64
lemma forw_subst: "a = b ==> P(b) ==> P(a)"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    65
  by (rule ssubst)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    66
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    67
lemma back_subst: "P(a) ==> a = b ==> P(b)"
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    68
  by (rule subst)
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    69
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    70
text {*
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    71
  Note that this list of rules is in reverse order of priorities.
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
lemmas trans_rules [trans] =
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    75
  forw_subst
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    76
  back_subst
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    77
  rev_mp
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    78
  mp
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    79
  trans
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    80
7e377f912629 improved comments;
wenzelm
parents: 8643
diff changeset
    81
lemmas [elim?] = sym
4093
5e8f3d57dee7 added claset thy_data;
wenzelm
parents: 0
diff changeset
    82
4854
d1850e0964f2 tuned setup;
wenzelm
parents: 4793
diff changeset
    83
end