src/Pure/Isar/auto_bind.ML
author wenzelm
Sun, 11 Nov 2001 21:32:12 +0100
changeset 12140 a987beab002d
parent 11764 fd780dd6e0b4
child 12241 c4a2a0686238
permissions -rw-r--r--
facts: multiple args;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6783
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/Isar/auto_bind.ML
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
8807
wenzelm
parents: 8612
diff changeset
     4
    License:    GPL (GNU GENERAL PUBLIC LICENSE)
6783
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
     5
10359
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
     6
Logic specific patterns and automatic term bindings.
7675
c859160e78b0 added atomic_thesis;
wenzelm
parents: 7599
diff changeset
     7
8227
d67db92897df add_judgment;
wenzelm
parents: 7675
diff changeset
     8
Note: the current implementation is not quite 'generic', but works
10359
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
     9
fine with common object-logics (HOL, FOL, ZF etc.).
6783
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    10
*)
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    11
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    12
signature AUTO_BIND =
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    13
sig
12140
a987beab002d facts: multiple args;
wenzelm
parents: 11764
diff changeset
    14
  val goal: Sign.sg -> term list -> (indexname * term option) list
a987beab002d facts: multiple args;
wenzelm
parents: 11764
diff changeset
    15
  val facts: Sign.sg -> term list -> (indexname * term option) list
9296
0d2b31e1ea1b export thesisN separately;
wenzelm
parents: 8807
diff changeset
    16
  val thesisN: string
6783
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    17
end;
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    18
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    19
structure AutoBind: AUTO_BIND =
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    20
struct
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    21
10359
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    22
(** bindings **)
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    23
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    24
val thesisN = "thesis";
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    25
val thisN = "this";
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    26
11764
fd780dd6e0b4 use ObjectLogic;
wenzelm
parents: 10808
diff changeset
    27
fun strip_judgment sg = ObjectLogic.drop_judgment sg o Logic.strip_assums_concl;
fd780dd6e0b4 use ObjectLogic;
wenzelm
parents: 10808
diff changeset
    28
fd780dd6e0b4 use ObjectLogic;
wenzelm
parents: 10808
diff changeset
    29
fun statement_binds sg name prop =
fd780dd6e0b4 use ObjectLogic;
wenzelm
parents: 10808
diff changeset
    30
  [((name, 0), Some (Term.list_abs (Logic.strip_params prop, strip_judgment sg prop)))];
10359
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    31
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    32
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    33
(* goal *)
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    34
12140
a987beab002d facts: multiple args;
wenzelm
parents: 11764
diff changeset
    35
fun goal sg props = statement_binds sg thesisN (Library.last_elem props);
10359
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    36
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    37
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    38
(* facts *)
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    39
11764
fd780dd6e0b4 use ObjectLogic;
wenzelm
parents: 10808
diff changeset
    40
fun get_arg sg prop =
fd780dd6e0b4 use ObjectLogic;
wenzelm
parents: 10808
diff changeset
    41
  (case strip_judgment sg prop of
10808
cc4a3ed7e70b added drop_judgment;
wenzelm
parents: 10377
diff changeset
    42
    _ $ t => Some (Term.list_abs (Logic.strip_params prop, t))
10359
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    43
  | _ => None);
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    44
12140
a987beab002d facts: multiple args;
wenzelm
parents: 11764
diff changeset
    45
fun facts _ [] = []
a987beab002d facts: multiple args;
wenzelm
parents: 11764
diff changeset
    46
  | facts sg props =
10359
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    47
      let val prop = Library.last_elem props
11764
fd780dd6e0b4 use ObjectLogic;
wenzelm
parents: 10808
diff changeset
    48
      in [(Syntax.dddot_indexname, get_arg sg prop)] @ statement_binds sg thisN prop end;
10359
445e3b87f28b improved statement bindings for props;
wenzelm
parents: 9464
diff changeset
    49
10808
cc4a3ed7e70b added drop_judgment;
wenzelm
parents: 10377
diff changeset
    50
6783
9cf9c17d9e35 renamed object_logic.ML to Isar/auto_bind.ML and tuned this module;
wenzelm
parents:
diff changeset
    51
end;