src/HOL/Refute.thy
author webertj
Wed, 10 Mar 2004 22:35:37 +0100
changeset 14457 6d5d6e78d851
parent 14350 41b32020d0b3
child 14463 ed09706ecc5d
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     1
(*  Title:      HOL/Refute.thy
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     2
    ID:         $Id$
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     3
    Author:     Tjark Weber
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     4
    Copyright   2003-2004
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     5
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     6
Basic setup and documentation for the 'refute' (and 'refute_params') command.
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     7
*)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     8
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
     9
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    10
(* REFUTE                                                                    *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    11
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    12
(* We use a SAT solver to search for a (finite) model that refutes a given   *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    13
(* HOL formula.                                                              *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    14
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    15
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    16
(* ------------------------------------------------------------------------- *)
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    17
(* NOTE                                                                      *)
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    18
(*                                                                           *)
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    19
(* I strongly recommend that you install a stand-alone SAT solver if you     *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    20
(* want to use 'refute'.  For details see 'HOL/Tools/sat_solver.ML'.         *)
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    21
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    22
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    23
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    24
(* USAGE                                                                     *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    25
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    26
(* See the file 'HOL/ex/Refute_Examples.thy' for examples.  The supported    *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    27
(* parameters are explained below.                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    28
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    29
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    30
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    31
(* CURRENT LIMITATIONS                                                       *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    32
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    33
(* 'refute' currently accepts formulas of higher-order predicate logic (with *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    34
(* equality), including free/bound/schematic variables, lambda abstractions, *)
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    35
(* sets and set membership, "arbitrary", "The", and "Eps".  Constants for    *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    36
(* which a defining equation exists are unfolded automatically.              *)
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    37
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    38
(* NOT (YET) SUPPORTED ARE                                                   *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    39
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    40
(* - schematic type variables                                                *)
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    41
(* - type constructors other than bool, =>, set                              *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    42
(* - other constants, including constructors of inductive datatypes,         *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    43
(*   inductively defined sets and recursive functions                        *)
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    44
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    45
(* For formulas that contain (variables of) an inductive datatype, a         *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    46
(* spurious countermodel may be returned.  Currently no warning is issued in *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    47
(* this case.                                                                *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    48
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    49
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    50
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    51
(* PARAMETERS                                                                *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    52
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    53
(* The following global parameters are currently supported (and required):   *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    54
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    55
(* Name          Type    Description                                         *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    56
(*                                                                           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    57
(* "minsize"     int     Only search for models with size at least           *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    58
(*                       'minsize'.                                          *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    59
(* "maxsize"     int     If >0, only search for models with size at most     *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    60
(*                       'maxsize'.                                          *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    61
(* "maxvars"     int     If >0, use at most 'maxvars' boolean variables      *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    62
(*                       when transforming the term into a propositional     *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    63
(*                       formula.                                            *)
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    64
(* "satsolver"   string  Name of the SAT solver to be used.                  *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    65
(*                                                                           *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    66
(* See 'HOL/Main.thy' for default values.                                    *)
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    67
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    68
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    69
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    70
(* FILES                                                                     *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    71
(*                                                                           *)
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    72
(* HOL/Tools/prop_logic.ML    Propositional logic                            *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    73
(* HOL/Tools/sat_solver.ML    SAT solvers                                    *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    74
(* HOL/Tools/refute.ML        Translation HOL -> propositional logic and     *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    75
(*                            boolean assignment -> HOL model                *)
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    76
(* HOL/Tools/refute_isar.ML   Adds 'refute'/'refute_params' to Isabelle's    *)
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    77
(*                            syntax                                         *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    78
(* HOL/Refute.thy             This file: loads the ML files, basic setup,    *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    79
(*                            documentation                                  *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    80
(* HOL/Main.thy               Sets default parameters                        *)
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    81
(* HOL/ex/RefuteExamples.thy  Examples                                       *)
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    82
(* ------------------------------------------------------------------------- *)
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    83
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    84
header {* Refute *}
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    85
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    86
theory Refute = Map
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    87
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    88
files "Tools/prop_logic.ML"
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    89
      "Tools/sat_solver.ML"
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    90
      "Tools/refute.ML"
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    91
      "Tools/refute_isar.ML":
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    92
14457
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    93
use "Tools/prop_logic.ML"
6d5d6e78d851 *** empty log message ***
webertj
parents: 14350
diff changeset
    94
use "Tools/sat_solver.ML"
14350
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    95
use "Tools/refute.ML"
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    96
use "Tools/refute_isar.ML"
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    97
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    98
setup Refute.setup
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
    99
41b32020d0b3 Adding 'refute' to HOL.
webertj
parents:
diff changeset
   100
end