src/HOL/Prolog/Test.thy
author wenzelm
Thu, 28 Feb 2013 14:29:54 +0100
changeset 51311 337cfc42c9c8
parent 46473 a687b75f9fa8
child 58889 5b7a9633cfa8
permissions -rw-r--r--
eliminated legacy 'axioms';
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13208
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     1
(*  Title:    HOL/Prolog/Test.thy
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     2
    Author:   David von Oheimb (based on a lecture on Lambda Prolog by Nadathur)
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     3
*)
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     4
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     5
header {* Basic examples *}
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     6
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     7
theory Test
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     8
imports HOHH
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     9
begin
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    10
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    11
typedecl nat
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    12
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    13
typedecl 'a list
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    14
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    15
consts
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    16
  Nil   :: "'a list"                                  ("[]")
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    17
  Cons  :: "'a => 'a list => 'a list"                 (infixr "#"  65)
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    18
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    19
syntax
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    20
  (* list Enumeration *)
35109
0015a0a99ae9 modernized syntax/translations;
wenzelm
parents: 34974
diff changeset
    21
  "_list"     :: "args => 'a list"                          ("[(_)]")
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    22
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    23
translations
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    24
  "[x, xs]"     == "x#[xs]"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    25
  "[x]"         == "x#[]"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    26
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    27
typedecl person
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    28
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    29
axiomatization
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    30
  append  :: "['a list, 'a list, 'a list]            => bool" and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    31
  reverse :: "['a list, 'a list]                     => bool" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    32
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    33
  mappred :: "[('a => 'b => bool), 'a list, 'b list] => bool" and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    34
  mapfun  :: "[('a => 'b), 'a list, 'b list]         => bool" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    35
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    36
  bob     :: person and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    37
  sue     :: person and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    38
  ned     :: person and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    39
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    40
  nat23   :: nat          ("23") and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    41
  nat24   :: nat          ("24") and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    42
  nat25   :: nat          ("25") and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    43
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    44
  age     :: "[person, nat]                          => bool" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    45
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    46
  eq      :: "['a, 'a]                               => bool" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    47
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    48
  empty   :: "['b]                                   => bool" and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    49
  add     :: "['a, 'b, 'b]                           => bool" and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    50
  remove  :: "['a, 'b, 'b]                           => bool" and
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    51
  bag_appl:: "['a, 'a, 'a, 'a]                       => bool"
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    52
where
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    53
        append:  "\<And>x xs ys zs. append  []    xs  xs    ..
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    54
                  append (x#xs) ys (x#zs) :- append xs ys zs" and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    55
        reverse: "\<And>L1 L2. reverse L1 L2 :- (!rev_aux.
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    56
                  (!L.          rev_aux  []    L  L )..
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    57
                  (!X L1 L2 L3. rev_aux (X#L1) L2 L3 :- rev_aux L1 L2 (X#L3))
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    58
                  => rev_aux L1 L2 [])" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    59
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    60
        mappred: "\<And>x xs y ys P. mappred P  []     []    ..
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    61
                  mappred P (x#xs) (y#ys) :- P x y  &  mappred P xs ys" and
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    62
        mapfun:  "\<And>x xs ys f. mapfun f  []     []      ..
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    63
                  mapfun f (x#xs) (f x#ys) :- mapfun f xs ys" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    64
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    65
        age:     "age bob 24 ..
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    66
                  age sue 23 ..
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    67
                  age ned 23" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    68
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    69
        eq:      "\<And>x. eq x x" and
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    70
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    71
(* actual definitions of empty and add is hidden -> yields abstract data type *)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    72
51311
337cfc42c9c8 eliminated legacy 'axioms';
wenzelm
parents: 46473
diff changeset
    73
        bag_appl: "\<And>A B X Y. bag_appl A B X Y:- (? S1 S2 S3 S4 S5.
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    74
                                empty    S1    &
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    75
                                add A    S1 S2 &
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    76
                                add B    S2 S3 &
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    77
                                remove X S3 S4 &
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    78
                                remove Y S4 S5 &
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    79
                                empty    S5)"
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    80
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    81
lemmas prog_Test = append reverse mappred mapfun age eq bag_appl
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    82
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
    83
schematic_lemma "append ?x ?y [a,b,c,d]"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    84
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    85
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    86
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    87
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    88
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    89
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    90
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
    91
schematic_lemma "append [a,b] y ?L"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    92
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    93
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    94
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
    95
schematic_lemma "!y. append [a,b] y (?L y)"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    96
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    97
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
    98
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
    99
schematic_lemma "reverse [] ?L"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   100
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   101
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   102
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   103
schematic_lemma "reverse [23] ?L"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   104
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   105
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   106
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   107
schematic_lemma "reverse [23,24,?x] ?L"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   108
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   109
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   110
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   111
schematic_lemma "reverse ?L [23,24,?x]"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   112
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   113
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   114
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   115
schematic_lemma "mappred age ?x [23,24]"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   116
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   117
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   118
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   119
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   120
schematic_lemma "mappred (%x y. ? z. age z y) ?x [23,24]"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   121
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   122
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   123
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   124
schematic_lemma "mappred ?P [bob,sue] [24,23]"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   125
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   126
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   127
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   128
schematic_lemma "mapfun f [bob,bob,sue] [?x,?y,?z]"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   129
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   130
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   131
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   132
schematic_lemma "mapfun (%x. h x 25) [bob,sue] ?L"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   133
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   134
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   135
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   136
schematic_lemma "mapfun ?F [24,25] [h bob 24,h bob 25]"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   137
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   138
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   139
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   140
schematic_lemma "mapfun ?F [24] [h 24 24]"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   141
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   142
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   143
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   144
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   145
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   146
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   147
lemma "True"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   148
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   149
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   150
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   151
schematic_lemma "age ?x 24 & age ?y 23"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   152
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   153
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   154
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   155
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   156
schematic_lemma "age ?x 24 | age ?x 23"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   157
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   158
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   159
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   160
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   161
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   162
lemma "? x y. age x y"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   163
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   164
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   165
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   166
lemma "!x y. append [] x x"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   167
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   168
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   169
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   170
schematic_lemma "age sue 24 .. age bob 23 => age ?x ?y"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   171
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   172
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   173
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   174
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   175
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   176
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   177
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   178
(*set trace_DEPTH_FIRST;*)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   179
lemma "age bob 25 :- age bob 24 => age bob 25"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   180
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   181
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   182
(*reset trace_DEPTH_FIRST;*)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   183
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   184
schematic_lemma "(!x. age x 25 :- age x 23) => age ?x 25 & age ?y 25"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   185
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   186
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   187
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   188
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   189
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   190
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   191
lemma "!x. ? y. eq x y"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   192
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   193
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   194
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   195
schematic_lemma "? P. P & eq P ?x"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   196
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   197
(*
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   198
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   199
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   200
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   201
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   202
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   203
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   204
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   205
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   206
*)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   207
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   208
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   209
lemma "? P. eq P (True & True) & P"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   210
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   211
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   212
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   213
lemma "? P. eq P op | & P k True"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   214
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   215
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   216
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   217
lemma "? P. eq P (Q => True) & P"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   218
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   219
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   220
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   221
(* P flexible: *)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   222
lemma "(!P k l. P k l :- eq P Q) => Q a b"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   223
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   224
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   225
(*
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   226
loops:
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   227
lemma "(!P k l. P k l :- eq P (%x y. x | y)) => a | b"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   228
*)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   229
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   230
(* implication and disjunction in atom: *)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   231
lemma "? Q. (!p q. R(q :- p) => R(Q p q)) & Q (t | s) (s | t)"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   232
  by fast
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   233
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   234
(* disjunction in atom: *)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   235
lemma "(!P. g P :- (P => b | a)) => g(a | b)"
42793
88bee9f6eec7 proper Proof.context for classical tactics;
wenzelm
parents: 41310
diff changeset
   236
  apply (tactic "step_tac (put_claset HOL_cs @{context}) 1")
88bee9f6eec7 proper Proof.context for classical tactics;
wenzelm
parents: 41310
diff changeset
   237
  apply (tactic "step_tac (put_claset HOL_cs @{context}) 1")
88bee9f6eec7 proper Proof.context for classical tactics;
wenzelm
parents: 41310
diff changeset
   238
  apply (tactic "step_tac (put_claset HOL_cs @{context}) 1")
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   239
   prefer 2
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   240
   apply fast
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   241
  apply fast
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   242
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   243
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   244
(*
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   245
hangs:
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   246
lemma "(!P. g P :- (P => b | a)) => g(a | b)"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   247
  by fast
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   248
*)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   249
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   250
schematic_lemma "!Emp Stk.(
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   251
                       empty    (Emp::'b) .. 
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   252
         (!(X::nat) S. add    X (S::'b)         (Stk X S)) .. 
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   253
         (!(X::nat) S. remove X ((Stk X S)::'b) S))
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   254
 => bag_appl 23 24 ?X ?Y"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   255
  oops
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   256
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   257
schematic_lemma "!Qu. ( 
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   258
          (!L.            empty    (Qu L L)) .. 
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   259
          (!(X::nat) L K. add    X (Qu L (X#K)) (Qu L K)) ..
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   260
          (!(X::nat) L K. remove X (Qu (X#L) K) (Qu L K)))
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   261
 => bag_appl 23 24 ?X ?Y"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   262
  oops
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   263
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   264
lemma "D & (!y. E) :- (!x. True & True) :- True => D"
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   265
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   266
  done
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   267
36319
8feb2c4bef1a mark schematic statements explicitly;
wenzelm
parents: 35109
diff changeset
   268
schematic_lemma "P x .. P y => P ?X"
21425
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   269
  apply (prolog prog_Test)
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   270
  back
c11ab38b78a7 HOL-Prolog: converted legacy ML scripts;
wenzelm
parents: 17311
diff changeset
   271
  done
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
   272
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   273
end