src/Tools/Metis/src/Thm.sig
author wenzelm
Sat, 07 Apr 2012 16:41:59 +0200
changeset 47389 e8552cba702d
parent 39502 cffceed8e7fa
child 72004 913162a47d9f
permissions -rw-r--r--
explicit checks stable_finished_theory/stable_command allow parallel asynchronous command transactions; tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
39348
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     1
(* ========================================================================= *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     2
(* A LOGICAL KERNEL FOR FIRST ORDER CLAUSAL THEOREMS                         *)
39502
cffceed8e7fa fix license
blanchet
parents: 39501
diff changeset
     3
(* Copyright (c) 2001 Joe Hurd, distributed under the BSD License            *)
39348
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     4
(* ========================================================================= *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     5
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     6
signature Thm =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     7
sig
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     8
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     9
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    10
(* An abstract type of first order logic theorems.                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    11
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    12
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    13
type thm
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    14
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    15
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    16
(* Theorem destructors.                                                      *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    17
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    18
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    19
type clause = LiteralSet.set
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    20
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    21
datatype inferenceType =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    22
    Axiom
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    23
  | Assume
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    24
  | Subst
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    25
  | Factor
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    26
  | Resolve
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    27
  | Refl
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    28
  | Equality
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    29
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    30
type inference = inferenceType * thm list
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    31
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    32
val clause : thm -> clause
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    33
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    34
val inference : thm -> inference
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    35
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    36
(* Tautologies *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    37
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    38
val isTautology : thm -> bool
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    39
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    40
(* Contradictions *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    41
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    42
val isContradiction : thm -> bool
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    43
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    44
(* Unit theorems *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    45
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    46
val destUnit : thm -> Literal.literal
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    47
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    48
val isUnit : thm -> bool
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    49
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    50
(* Unit equality theorems *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    51
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    52
val destUnitEq : thm -> Term.term * Term.term
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    53
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    54
val isUnitEq : thm -> bool
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    55
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    56
(* Literals *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    57
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    58
val member : Literal.literal -> thm -> bool
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    59
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    60
val negateMember : Literal.literal -> thm -> bool
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    61
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    62
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    63
(* A total order.                                                            *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    64
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    65
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    66
val compare : thm * thm -> order
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    67
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    68
val equal : thm -> thm -> bool
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    69
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    70
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    71
(* Free variables.                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    72
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    73
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    74
val freeIn : Term.var -> thm -> bool
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    75
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    76
val freeVars : thm -> NameSet.set
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    77
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    78
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    79
(* Pretty-printing.                                                          *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    80
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    81
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    82
val ppInferenceType : inferenceType Print.pp
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    83
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    84
val inferenceTypeToString : inferenceType -> string
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    85
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    86
val pp : thm Print.pp
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    87
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    88
val toString : thm -> string
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    89
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    90
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    91
(* Primitive rules of inference.                                             *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    92
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    93
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    94
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    95
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    96
(* ----- axiom C                                                             *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    97
(*   C                                                                       *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    98
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    99
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   100
val axiom : clause -> thm
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   101
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   102
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   103
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   104
(* ----------- assume L                                                      *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   105
(*   L \/ ~L                                                                 *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   106
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   107
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   108
val assume : Literal.literal -> thm
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   109
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   110
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   111
(*    C                                                                      *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   112
(* -------- subst s                                                          *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   113
(*   C[s]                                                                    *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   114
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   115
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   116
val subst : Subst.subst -> thm -> thm
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   117
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   118
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   119
(*   L \/ C    ~L \/ D                                                       *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   120
(* --------------------- resolve L                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   121
(*        C \/ D                                                             *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   122
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   123
(* The literal L must occur in the first theorem, and the literal ~L must    *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   124
(* occur in the second theorem.                                              *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   125
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   126
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   127
val resolve : Literal.literal -> thm -> thm -> thm
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   128
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   129
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   130
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   131
(* --------- refl t                                                          *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   132
(*   t = t                                                                   *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   133
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   134
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   135
val refl : Term.term -> thm
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   136
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   137
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   138
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   139
(* ------------------------ equality L p t                                   *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   140
(*   ~(s = t) \/ ~L \/ L'                                                    *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   141
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   142
(* where s is the subterm of L at path p, and L' is L with the subterm at    *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   143
(* path p being replaced by t.                                               *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   144
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   145
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   146
val equality : Literal.literal -> Term.path -> Term.term -> thm
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   147
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   148
end