src/Doc/Isar_Ref/Synopsis.thy
author wenzelm
Mon, 25 Mar 2019 17:21:26 +0100
changeset 69981 3dced198b9ec
parent 69597 ff784d5a5bfb
permissions -rw-r--r--
more strict AFP properties;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
61656
cfabbc083977 more uniform jEdit properties;
wenzelm
parents: 61580
diff changeset
     1
(*:maxLineLen=78:*)
cfabbc083977 more uniform jEdit properties;
wenzelm
parents: 61580
diff changeset
     2
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
     3
theory Synopsis
63531
847eefdca90d clarified imports;
wenzelm
parents: 63039
diff changeset
     4
  imports Main Base
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
     5
begin
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
     6
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
     7
chapter \<open>Synopsis\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
     8
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
     9
section \<open>Notepad\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    10
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    11
text \<open>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    12
  An Isar proof body serves as mathematical notepad to compose logical
42918
wenzelm
parents: 42917
diff changeset
    13
  content, consisting of types, terms, facts.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    14
\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    15
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    16
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    17
subsection \<open>Types and terms\<close>
42918
wenzelm
parents: 42917
diff changeset
    18
wenzelm
parents: 42917
diff changeset
    19
notepad
wenzelm
parents: 42917
diff changeset
    20
begin
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    21
  txt \<open>Locally fixed entities:\<close>
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
    22
  fix x   \<comment> \<open>local constant, without any type information yet\<close>
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
    23
  fix x :: 'a  \<comment> \<open>variant with explicit type-constraint for subsequent use\<close>
42918
wenzelm
parents: 42917
diff changeset
    24
wenzelm
parents: 42917
diff changeset
    25
  fix a b
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
    26
  assume "a = b"  \<comment> \<open>type assignment at first occurrence in concrete term\<close>
42918
wenzelm
parents: 42917
diff changeset
    27
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    28
  txt \<open>Definitions (non-polymorphic):\<close>
63039
1a20fd9cf281 added Isar command 'define';
wenzelm
parents: 62273
diff changeset
    29
  define x :: 'a where "x = t"
42918
wenzelm
parents: 42917
diff changeset
    30
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    31
  txt \<open>Abbreviations (polymorphic):\<close>
42918
wenzelm
parents: 42917
diff changeset
    32
  let ?f = "\<lambda>x. x"
wenzelm
parents: 42917
diff changeset
    33
  term "?f ?f"
wenzelm
parents: 42917
diff changeset
    34
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    35
  txt \<open>Notation:\<close>
42918
wenzelm
parents: 42917
diff changeset
    36
  write x  ("***")
wenzelm
parents: 42917
diff changeset
    37
end
wenzelm
parents: 42917
diff changeset
    38
wenzelm
parents: 42917
diff changeset
    39
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    40
subsection \<open>Facts\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    41
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    42
text \<open>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    43
  A fact is a simultaneous list of theorems.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    44
\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    45
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    46
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    47
subsubsection \<open>Producing facts\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    48
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    49
notepad
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    50
begin
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    51
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    52
  txt \<open>Via assumption (``lambda''):\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    53
  assume a: A
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    54
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    55
  txt \<open>Via proof (``let''):\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
    56
  have b: B \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    57
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    58
  txt \<open>Via abbreviation (``let''):\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    59
  note c = a b
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    60
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    61
end
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    62
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    63
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    64
subsubsection \<open>Referencing facts\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    65
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    66
notepad
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    67
begin
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    68
  txt \<open>Via explicit name:\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    69
  assume a: A
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    70
  note a
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    71
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    72
  txt \<open>Via implicit name:\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    73
  assume A
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    74
  note this
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    75
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    76
  txt \<open>Via literal proposition (unification with results from the proof text):\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    77
  assume A
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    78
  note \<open>A\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    79
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    80
  assume "\<And>x. B x"
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    81
  note \<open>B a\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    82
  note \<open>B b\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    83
end
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    84
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    85
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    86
subsubsection \<open>Manipulating facts\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    87
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    88
notepad
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    89
begin
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    90
  txt \<open>Instantiation:\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    91
  assume a: "\<And>x. B x"
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    92
  note a
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    93
  note a [of b]
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    94
  note a [where x = b]
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    95
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
    96
  txt \<open>Backchaining:\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    97
  assume 1: A
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    98
  assume 2: "A \<Longrightarrow> C"
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    99
  note 2 [OF 1]
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   100
  note 1 [THEN 2]
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   101
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   102
  txt \<open>Symmetric results:\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   103
  assume "x = y"
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   104
  note this [symmetric]
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   105
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   106
  assume "x \<noteq> y"
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   107
  note this [symmetric]
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   108
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   109
  txt \<open>Adhoc-simplification (take care!):\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   110
  assume "P ([] @ xs)"
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   111
  note this [simplified]
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   112
end
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   113
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   114
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   115
subsubsection \<open>Projections\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   116
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   117
text \<open>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   118
  Isar facts consist of multiple theorems.  There is notation to project
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   119
  interval ranges.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   120
\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   121
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   122
notepad
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   123
begin
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   124
  assume stuff: A B C D
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   125
  note stuff(1)
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   126
  note stuff(2-3)
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   127
  note stuff(2-)
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   128
end
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   129
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   130
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   131
subsubsection \<open>Naming conventions\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   132
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   133
text \<open>
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   134
  \<^item> Lower-case identifiers are usually preferred.
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   135
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   136
  \<^item> Facts can be named after the main term within the proposition.
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   137
61477
e467ae7aa808 more control symbols;
wenzelm
parents: 61458
diff changeset
   138
  \<^item> Facts should \<^emph>\<open>not\<close> be named after the command that
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   139
  introduced them (@{command "assume"}, @{command "have"}).  This is
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   140
  misleading and hard to maintain.
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   141
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   142
  \<^item> Natural numbers can be used as ``meaningless'' names (more
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   143
  appropriate than \<open>a1\<close>, \<open>a2\<close> etc.)
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   144
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   145
  \<^item> Symbolic identifiers are supported (e.g. \<open>*\<close>, \<open>**\<close>, \<open>***\<close>).
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   146
\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   147
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   148
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   149
subsection \<open>Block structure\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   150
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   151
text \<open>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   152
  The formal notepad is block structured.  The fact produced by the last
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   153
  entry of a block is exported into the outer context.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   154
\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   155
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   156
notepad
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   157
begin
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   158
  {
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   159
    have a: A \<proof>
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   160
    have b: B \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   161
    note a b
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   162
  }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   163
  note this
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   164
  note \<open>A\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   165
  note \<open>B\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   166
end
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   167
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   168
text \<open>Explicit blocks as well as implicit blocks of nested goal
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   169
  statements (e.g.\ @{command have}) automatically introduce one extra
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   170
  pair of parentheses in reserve.  The @{command next} command allows
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   171
  to ``jump'' between these sub-blocks.\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   172
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   173
notepad
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   174
begin
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   175
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   176
  {
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   177
    have a: A \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   178
  next
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   179
    have b: B
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   180
    proof -
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   181
      show B \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   182
    next
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   183
      have c: C \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   184
    next
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   185
      have d: D \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   186
    qed
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   187
  }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   188
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   189
  txt \<open>Alternative version with explicit parentheses everywhere:\<close>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   190
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   191
  {
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   192
    {
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   193
      have a: A \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   194
    }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   195
    {
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   196
      have b: B
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   197
      proof -
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   198
        {
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   199
          show B \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   200
        }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   201
        {
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   202
          have c: C \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   203
        }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   204
        {
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   205
          have d: D \<proof>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   206
        }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   207
      qed
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   208
    }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   209
  }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   210
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   211
end
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   212
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   213
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   214
section \<open>Calculational reasoning \label{sec:calculations-synopsis}\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   215
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   216
text \<open>
63680
6e1e8b5abbfa more symbols;
wenzelm
parents: 63531
diff changeset
   217
  For example, see \<^file>\<open>~~/src/HOL/Isar_Examples/Group.thy\<close>.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   218
\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   219
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   220
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   221
subsection \<open>Special names in Isar proofs\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   222
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   223
text \<open>
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   224
  \<^item> term \<open>?thesis\<close> --- the main conclusion of the
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   225
  innermost pending claim
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   226
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   227
  \<^item> term \<open>\<dots>\<close> --- the argument of the last explicitly
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   228
  stated result (for infix application this is the right-hand side)
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   229
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   230
  \<^item> fact \<open>this\<close> --- the last result produced in the text
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   231
\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   232
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   233
notepad
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   234
begin
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   235
  have "x = y"
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   236
  proof -
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   237
    term ?thesis
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   238
    show ?thesis \<proof>
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   239
    term ?thesis  \<comment> \<open>static!\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   240
  qed
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   241
  term "\<dots>"
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   242
  thm this
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   243
end
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   244
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   245
text \<open>Calculational reasoning maintains the special fact called
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   246
  ``\<open>calculation\<close>'' in the background.  Certain language
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   247
  elements combine primary \<open>this\<close> with secondary \<open>calculation\<close>.\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   248
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   249
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   250
subsection \<open>Transitive chains\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   251
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   252
text \<open>The Idea is to combine \<open>this\<close> and \<open>calculation\<close>
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   253
  via typical \<open>trans\<close> rules (see also @{command
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   254
  print_trans_rules}):\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   255
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   256
thm trans
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   257
thm less_trans
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   258
thm less_le_trans
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   259
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   260
notepad
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   261
begin
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   262
  txt \<open>Plain bottom-up calculation:\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   263
  have "a = b" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   264
  also
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   265
  have "b = c" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   266
  also
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   267
  have "c = d" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   268
  finally
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   269
  have "a = d" .
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   270
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   271
  txt \<open>Variant using the \<open>\<dots>\<close> abbreviation:\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   272
  have "a = b" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   273
  also
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   274
  have "\<dots> = c" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   275
  also
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   276
  have "\<dots> = d" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   277
  finally
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   278
  have "a = d" .
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   279
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   280
  txt \<open>Top-down version with explicit claim at the head:\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   281
  have "a = d"
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   282
  proof -
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   283
    have "a = b" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   284
    also
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   285
    have "\<dots> = c" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   286
    also
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   287
    have "\<dots> = d" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   288
    finally
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   289
    show ?thesis .
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   290
  qed
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   291
next
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   292
  txt \<open>Mixed inequalities (require suitable base type):\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   293
  fix a b c d :: nat
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   294
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   295
  have "a < b" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   296
  also
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   297
  have "b \<le> c" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   298
  also
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   299
  have "c = d" \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   300
  finally
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   301
  have "a < d" .
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   302
end
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   303
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   304
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   305
subsubsection \<open>Notes\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   306
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   307
text \<open>
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   308
  \<^item> The notion of \<open>trans\<close> rule is very general due to the
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   309
  flexibility of Isabelle/Pure rule composition.
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   310
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   311
  \<^item> User applications may declare their own rules, with some care
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   312
  about the operational details of higher-order unification.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   313
\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   314
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   315
62273
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
   316
subsection \<open>Degenerate calculations\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   317
62273
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
   318
text \<open>The Idea is to append \<open>this\<close> to \<open>calculation\<close>, without rule composition.
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
   319
  This is occasionally useful to avoid naming intermediate facts.\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   320
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   321
notepad
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   322
begin
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   323
  txt \<open>A vacuous proof:\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   324
  have A \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   325
  moreover
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   326
  have B \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   327
  moreover
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   328
  have C \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   329
  ultimately
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   330
  have A and B and C .
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   331
next
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   332
  txt \<open>Slightly more content (trivial bigstep reasoning):\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   333
  have A \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   334
  moreover
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   335
  have B \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   336
  moreover
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   337
  have C \<proof>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   338
  ultimately
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   339
  have "A \<and> B \<and> C" by blast
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   340
end
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   341
62273
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
   342
text \<open>Note that For multi-branch case splitting, it is better to use @{command
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
   343
  consider}.\<close>
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
   344
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   345
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   346
section \<open>Induction\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   347
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   348
subsection \<open>Induction as Natural Deduction\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   349
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   350
text \<open>In principle, induction is just a special case of Natural
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   351
  Deduction (see also \secref{sec:natural-deduction-synopsis}).  For
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   352
  example:\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   353
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   354
thm nat.induct
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   355
print_statement nat.induct
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   356
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   357
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   358
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   359
  fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   360
  have "P n"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   361
  proof (rule nat.induct)  \<comment> \<open>fragile rule application!\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   362
    show "P 0" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   363
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   364
    fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   365
    assume "P n"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   366
    show "P (Suc n)" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   367
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   368
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   369
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   370
text \<open>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   371
  In practice, much more proof infrastructure is required.
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   372
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   373
  The proof method @{method induct} provides:
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   374
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   375
  \<^item> implicit rule selection and robust instantiation
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   376
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   377
  \<^item> context elements via symbolic case names
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   378
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   379
  \<^item> support for rule-structured induction statements, with local
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   380
  parameters, premises, etc.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   381
\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   382
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   383
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   384
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   385
  fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   386
  have "P n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   387
  proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   388
    case 0
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   389
    show ?case \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   390
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   391
    case (Suc n)
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   392
    from Suc.hyps show ?case \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   393
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   394
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   395
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   396
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   397
subsubsection \<open>Example\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   398
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   399
text \<open>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   400
  The subsequent example combines the following proof patterns:
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   401
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   402
  \<^item> outermost induction (over the datatype structure of natural
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   403
  numbers), to decompose the proof problem in top-down manner
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   404
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   405
  \<^item> calculational reasoning (\secref{sec:calculations-synopsis})
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   406
  to compose the result in each case
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   407
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   408
  \<^item> solving local claims within the calculation by simplification
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   409
\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   410
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   411
lemma
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   412
  fixes n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   413
  shows "(\<Sum>i=0..n. i) = n * (n + 1) div 2"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   414
proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   415
  case 0
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   416
  have "(\<Sum>i=0..0. i) = (0::nat)" by simp
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   417
  also have "\<dots> = 0 * (0 + 1) div 2" by simp
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   418
  finally show ?case .
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   419
next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   420
  case (Suc n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   421
  have "(\<Sum>i=0..Suc n. i) = (\<Sum>i=0..n. i) + (n + 1)" by simp
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   422
  also have "\<dots> = n * (n + 1) div 2 + (n + 1)" by (simp add: Suc.hyps)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   423
  also have "\<dots> = (n * (n + 1) + 2 * (n + 1)) div 2" by simp
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   424
  also have "\<dots> = (Suc n * (Suc n + 1)) div 2" by simp
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   425
  finally show ?case .
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   426
qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   427
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   428
text \<open>This demonstrates how induction proofs can be done without
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   429
  having to consider the raw Natural Deduction structure.\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   430
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   431
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   432
subsection \<open>Induction with local parameters and premises\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   433
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   434
text \<open>Idea: Pure rule statements are passed through the induction
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   435
  rule.  This achieves convenient proof patterns, thanks to some
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   436
  internal trickery in the @{method induct} method.
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   437
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   438
  Important: Using compact HOL formulae with \<open>\<forall>/\<longrightarrow>\<close> is a
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   439
  well-known anti-pattern! It would produce useless formal noise.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   440
\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   441
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   442
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   443
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   444
  fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   445
  fix P :: "nat \<Rightarrow> bool"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   446
  fix Q :: "'a \<Rightarrow> nat \<Rightarrow> bool"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   447
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   448
  have "P n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   449
  proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   450
    case 0
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   451
    show "P 0" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   452
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   453
    case (Suc n)
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   454
    from \<open>P n\<close> show "P (Suc n)" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   455
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   456
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   457
  have "A n \<Longrightarrow> P n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   458
  proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   459
    case 0
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   460
    from \<open>A 0\<close> show "P 0" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   461
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   462
    case (Suc n)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   463
    from \<open>A n \<Longrightarrow> P n\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   464
      and \<open>A (Suc n)\<close> show "P (Suc n)" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   465
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   466
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   467
  have "\<And>x. Q x n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   468
  proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   469
    case 0
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   470
    show "Q x 0" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   471
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   472
    case (Suc n)
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   473
    from \<open>\<And>x. Q x n\<close> show "Q x (Suc n)" \<proof>
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   474
    txt \<open>Local quantification admits arbitrary instances:\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   475
    note \<open>Q a n\<close> and \<open>Q b n\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   476
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   477
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   478
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   479
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   480
subsection \<open>Implicit induction context\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   481
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   482
text \<open>The @{method induct} method can isolate local parameters and
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   483
  premises directly from the given statement.  This is convenient in
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   484
  practical applications, but requires some understanding of what is
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   485
  going on internally (as explained above).\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   486
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   487
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   488
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   489
  fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   490
  fix Q :: "'a \<Rightarrow> nat \<Rightarrow> bool"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   491
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   492
  fix x :: 'a
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   493
  assume "A x n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   494
  then have "Q x n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   495
  proof (induct n arbitrary: x)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   496
    case 0
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   497
    from \<open>A x 0\<close> show "Q x 0" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   498
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   499
    case (Suc n)
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   500
    from \<open>\<And>x. A x n \<Longrightarrow> Q x n\<close>  \<comment> \<open>arbitrary instances can be produced here\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   501
      and \<open>A x (Suc n)\<close> show "Q x (Suc n)" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   502
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   503
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   504
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   505
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   506
subsection \<open>Advanced induction with term definitions\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   507
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   508
text \<open>Induction over subexpressions of a certain shape are delicate
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   509
  to formalize.  The Isar @{method induct} method provides
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   510
  infrastructure for this.
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   511
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   512
  Idea: sub-expressions of the problem are turned into a defined
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   513
  induction variable; often accompanied with fixing of auxiliary
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   514
  parameters in the original expression.\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   515
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   516
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   517
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   518
  fix a :: "'a \<Rightarrow> nat"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   519
  fix A :: "nat \<Rightarrow> bool"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   520
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   521
  assume "A (a x)"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   522
  then have "P (a x)"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   523
  proof (induct "a x" arbitrary: x)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   524
    case 0
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   525
    note prem = \<open>A (a x)\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   526
      and defn = \<open>0 = a x\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   527
    show "P (a x)" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   528
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   529
    case (Suc n)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   530
    note hyp = \<open>\<And>x. n = a x \<Longrightarrow> A (a x) \<Longrightarrow> P (a x)\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   531
      and prem = \<open>A (a x)\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   532
      and defn = \<open>Suc n = a x\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   533
    show "P (a x)" \<proof>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   534
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   535
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   536
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   537
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   538
section \<open>Natural Deduction \label{sec:natural-deduction-synopsis}\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   539
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   540
subsection \<open>Rule statements\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   541
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   542
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   543
  Isabelle/Pure ``theorems'' are always natural deduction rules,
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   544
  which sometimes happen to consist of a conclusion only.
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   545
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   546
  The framework connectives \<open>\<And>\<close> and \<open>\<Longrightarrow>\<close> indicate the
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   547
  rule structure declaratively.  For example:\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   548
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   549
thm conjI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   550
thm impI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   551
thm nat.induct
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   552
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   553
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   554
  The object-logic is embedded into the Pure framework via an implicit
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 67443
diff changeset
   555
  derivability judgment \<^term>\<open>Trueprop :: bool \<Rightarrow> prop\<close>.
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   556
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   557
  Thus any HOL formulae appears atomic to the Pure framework, while
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   558
  the rule structure outlines the corresponding proof pattern.
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   559
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   560
  This can be made explicit as follows:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   561
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   562
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   563
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   564
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   565
  write Trueprop  ("Tr")
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   566
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   567
  thm conjI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   568
  thm impI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   569
  thm nat.induct
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   570
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   571
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   572
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   573
  Isar provides first-class notation for rule statements as follows.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   574
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   575
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   576
print_statement conjI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   577
print_statement impI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   578
print_statement nat.induct
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   579
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   580
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   581
subsubsection \<open>Examples\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   582
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   583
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   584
  Introductions and eliminations of some standard connectives of
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   585
  the object-logic can be written as rule statements as follows.  (The
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   586
  proof ``@{command "by"}~@{method blast}'' serves as sanity check.)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   587
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   588
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   589
lemma "(P \<Longrightarrow> False) \<Longrightarrow> \<not> P" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   590
lemma "\<not> P \<Longrightarrow> P \<Longrightarrow> Q" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   591
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   592
lemma "P \<Longrightarrow> Q \<Longrightarrow> P \<and> Q" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   593
lemma "P \<and> Q \<Longrightarrow> (P \<Longrightarrow> Q \<Longrightarrow> R) \<Longrightarrow> R" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   594
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   595
lemma "P \<Longrightarrow> P \<or> Q" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   596
lemma "Q \<Longrightarrow> P \<or> Q" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   597
lemma "P \<or> Q \<Longrightarrow> (P \<Longrightarrow> R) \<Longrightarrow> (Q \<Longrightarrow> R) \<Longrightarrow> R" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   598
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   599
lemma "(\<And>x. P x) \<Longrightarrow> (\<forall>x. P x)" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   600
lemma "(\<forall>x. P x) \<Longrightarrow> P x" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   601
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   602
lemma "P x \<Longrightarrow> (\<exists>x. P x)" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   603
lemma "(\<exists>x. P x) \<Longrightarrow> (\<And>x. P x \<Longrightarrow> R) \<Longrightarrow> R" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   604
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   605
lemma "x \<in> A \<Longrightarrow> x \<in> B \<Longrightarrow> x \<in> A \<inter> B" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   606
lemma "x \<in> A \<inter> B \<Longrightarrow> (x \<in> A \<Longrightarrow> x \<in> B \<Longrightarrow> R) \<Longrightarrow> R" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   607
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   608
lemma "x \<in> A \<Longrightarrow> x \<in> A \<union> B" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   609
lemma "x \<in> B \<Longrightarrow> x \<in> A \<union> B" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   610
lemma "x \<in> A \<union> B \<Longrightarrow> (x \<in> A \<Longrightarrow> R) \<Longrightarrow> (x \<in> B \<Longrightarrow> R) \<Longrightarrow> R" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   611
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   612
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   613
subsection \<open>Isar context elements\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   614
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   615
text \<open>We derive some results out of the blue, using Isar context
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   616
  elements and some explicit blocks.  This illustrates their meaning
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   617
  wrt.\ Pure connectives, without goal states getting in the way.\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   618
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   619
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   620
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   621
  {
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   622
    fix x
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   623
    have "B x" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   624
  }
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   625
  have "\<And>x. B x" by fact
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   626
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   627
next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   628
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   629
  {
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   630
    assume A
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   631
    have B \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   632
  }
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   633
  have "A \<Longrightarrow> B" by fact
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   634
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   635
next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   636
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   637
  {
63039
1a20fd9cf281 added Isar command 'define';
wenzelm
parents: 62273
diff changeset
   638
    define x where "x = t"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   639
    have "B x" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   640
  }
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   641
  have "B t" by fact
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   642
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   643
next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   644
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   645
  {
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   646
    obtain x :: 'a where "B x" \<proof>
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   647
    have C \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   648
  }
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   649
  have C by fact
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   650
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   651
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   652
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   653
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   654
subsection \<open>Pure rule composition\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   655
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   656
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   657
  The Pure framework provides means for:
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   658
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   659
  \<^item> backward-chaining of rules by @{inference resolution}
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   660
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   661
  \<^item> closing of branches by @{inference assumption}
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   662
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   663
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   664
  Both principles involve higher-order unification of \<open>\<lambda>\<close>-terms
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   665
  modulo \<open>\<alpha>\<beta>\<eta>\<close>-equivalence (cf.\ Huet and Miller).
61458
987533262fc2 Markdown support in document text;
wenzelm
parents: 61421
diff changeset
   666
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   667
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   668
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   669
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   670
  assume a: A and b: B
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   671
  thm conjI
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67369
diff changeset
   672
  thm conjI [of A B]  \<comment> \<open>instantiation\<close>
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67369
diff changeset
   673
  thm conjI [of A B, OF a b]  \<comment> \<open>instantiation and composition\<close>
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67369
diff changeset
   674
  thm conjI [OF a b]  \<comment> \<open>composition via unification (trivial)\<close>
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   675
  thm conjI [OF \<open>A\<close> \<open>B\<close>]
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   676
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   677
  thm conjI [OF disjI1]
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   678
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   679
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   680
text \<open>Note: Low-level rule composition is tedious and leads to
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   681
  unreadable~/ unmaintainable expressions in the text.\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   682
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   683
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   684
subsection \<open>Structured backward reasoning\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   685
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   686
text \<open>Idea: Canonical proof decomposition via @{command fix}~/
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   687
  @{command assume}~/ @{command show}, where the body produces a
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   688
  natural deduction rule to refine some goal.\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   689
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   690
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   691
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   692
  fix A B :: "'a \<Rightarrow> bool"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   693
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   694
  have "\<And>x. A x \<Longrightarrow> B x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   695
  proof -
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   696
    fix x
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   697
    assume "A x"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   698
    show "B x" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   699
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   700
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   701
  have "\<And>x. A x \<Longrightarrow> B x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   702
  proof -
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   703
    {
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   704
      fix x
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   705
      assume "A x"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   706
      show "B x" \<proof>
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67369
diff changeset
   707
    } \<comment> \<open>implicit block structure made explicit\<close>
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   708
    note \<open>\<And>x. A x \<Longrightarrow> B x\<close>
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67369
diff changeset
   709
      \<comment> \<open>side exit for the resulting rule\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   710
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   711
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   712
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   713
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   714
subsection \<open>Structured rule application\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   715
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   716
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   717
  Idea: Previous facts and new claims are composed with a rule from
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   718
  the context (or background library).
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   719
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   720
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   721
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   722
begin
62272
wenzelm
parents: 62271
diff changeset
   723
  assume r\<^sub>1: "A \<Longrightarrow> B \<Longrightarrow> C"  \<comment> \<open>simple rule (Horn clause)\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   724
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67369
diff changeset
   725
  have A \<proof>  \<comment> \<open>prefix of facts via outer sub-proof\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   726
  then have C
62272
wenzelm
parents: 62271
diff changeset
   727
  proof (rule r\<^sub>1)
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67369
diff changeset
   728
    show B \<proof>  \<comment> \<open>remaining rule premises via inner sub-proof\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   729
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   730
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   731
  have C
62272
wenzelm
parents: 62271
diff changeset
   732
  proof (rule r\<^sub>1)
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   733
    show A \<proof>
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   734
    show B \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   735
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   736
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   737
  have A and B \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   738
  then have C
62272
wenzelm
parents: 62271
diff changeset
   739
  proof (rule r\<^sub>1)
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   740
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   741
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   742
  have A and B \<proof>
62272
wenzelm
parents: 62271
diff changeset
   743
  then have C by (rule r\<^sub>1)
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   744
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   745
next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   746
62272
wenzelm
parents: 62271
diff changeset
   747
  assume r\<^sub>2: "A \<Longrightarrow> (\<And>x. B\<^sub>1 x \<Longrightarrow> B\<^sub>2 x) \<Longrightarrow> C"  \<comment> \<open>nested rule\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   748
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   749
  have A \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   750
  then have C
62272
wenzelm
parents: 62271
diff changeset
   751
  proof (rule r\<^sub>2)
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   752
    fix x
62272
wenzelm
parents: 62271
diff changeset
   753
    assume "B\<^sub>1 x"
wenzelm
parents: 62271
diff changeset
   754
    show "B\<^sub>2 x" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   755
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   756
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 67443
diff changeset
   757
  txt \<open>The compound rule premise \<^prop>\<open>\<And>x. B\<^sub>1 x \<Longrightarrow> B\<^sub>2 x\<close> is better
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   758
    addressed via @{command fix}~/ @{command assume}~/ @{command show}
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   759
    in the nested proof body.\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   760
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   761
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   762
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   763
subsection \<open>Example: predicate logic\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   764
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   765
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   766
  Using the above principles, standard introduction and elimination proofs
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   767
  of predicate logic connectives of HOL work as follows.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   768
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   769
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   770
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   771
begin
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   772
  have "A \<longrightarrow> B" and A \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   773
  then have B ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   774
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   775
  have A \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   776
  then have "A \<or> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   777
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   778
  have B \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   779
  then have "A \<or> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   780
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   781
  have "A \<or> B" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   782
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   783
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   784
    assume A
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   785
    then show C \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   786
  next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   787
    assume B
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   788
    then show C \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   789
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   790
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   791
  have A and B \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   792
  then have "A \<and> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   793
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   794
  have "A \<and> B" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   795
  then have A ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   796
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   797
  have "A \<and> B" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   798
  then have B ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   799
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   800
  have False \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   801
  then have A ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   802
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   803
  have True ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   804
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   805
  have "\<not> A"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   806
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   807
    assume A
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   808
    then show False \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   809
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   810
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   811
  have "\<not> A" and A \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   812
  then have B ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   813
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   814
  have "\<forall>x. P x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   815
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   816
    fix x
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   817
    show "P x" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   818
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   819
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   820
  have "\<forall>x. P x" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   821
  then have "P a" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   822
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   823
  have "\<exists>x. P x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   824
  proof
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   825
    show "P a" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   826
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   827
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   828
  have "\<exists>x. P x" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   829
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   830
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   831
    fix a
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   832
    assume "P a"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   833
    show C \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   834
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   835
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   836
  txt \<open>Less awkward version using @{command obtain}:\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   837
  have "\<exists>x. P x" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   838
  then obtain a where "P a" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   839
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   840
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   841
text \<open>Further variations to illustrate Isar sub-proofs involving
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   842
  @{command show}:\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   843
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   844
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   845
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   846
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   847
  proof  \<comment> \<open>two strictly isolated subproofs\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   848
    show A \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   849
  next
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   850
    show B \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   851
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   852
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   853
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   854
  proof  \<comment> \<open>one simultaneous sub-proof\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   855
    show A and B \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   856
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   857
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   858
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   859
  proof  \<comment> \<open>two subproofs in the same context\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   860
    show A \<proof>
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   861
    show B \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   862
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   863
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   864
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   865
  proof  \<comment> \<open>swapped order\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   866
    show B \<proof>
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   867
    show A \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   868
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   869
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   870
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   871
  proof  \<comment> \<open>sequential subproofs\<close>
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   872
    show A \<proof>
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   873
    show B using \<open>A\<close> \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   874
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   875
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   876
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   877
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   878
subsubsection \<open>Example: set-theoretic operators\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   879
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   880
text \<open>There is nothing special about logical connectives (\<open>\<and>\<close>, \<open>\<or>\<close>, \<open>\<forall>\<close>, \<open>\<exists>\<close> etc.).  Operators from
45103
a45121ffcfcb some amendments due to Jean Pichon;
wenzelm
parents: 42923
diff changeset
   881
  set-theory or lattice-theory work analogously.  It is only a matter
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   882
  of rule declarations in the library; rules can be also specified
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   883
  explicitly.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   884
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   885
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   886
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   887
begin
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   888
  have "x \<in> A" and "x \<in> B" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   889
  then have "x \<in> A \<inter> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   890
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   891
  have "x \<in> A" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   892
  then have "x \<in> A \<union> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   893
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   894
  have "x \<in> B" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   895
  then have "x \<in> A \<union> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   896
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   897
  have "x \<in> A \<union> B" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   898
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   899
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   900
    assume "x \<in> A"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   901
    then show C \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   902
  next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   903
    assume "x \<in> B"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   904
    then show C \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   905
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   906
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   907
next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   908
  have "x \<in> \<Inter>A"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   909
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   910
    fix a
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   911
    assume "a \<in> A"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   912
    show "x \<in> a" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   913
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   914
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   915
  have "x \<in> \<Inter>A" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   916
  then have "x \<in> a"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   917
  proof
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   918
    show "a \<in> A" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   919
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   920
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   921
  have "a \<in> A" and "x \<in> a" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   922
  then have "x \<in> \<Union>A" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   923
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   924
  have "x \<in> \<Union>A" \<proof>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   925
  then obtain a where "a \<in> A" and "x \<in> a" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   926
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   927
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   928
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   929
section \<open>Generalized elimination and cases\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   930
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   931
subsection \<open>General elimination rules\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   932
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   933
text \<open>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   934
  The general format of elimination rules is illustrated by the
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   935
  following typical representatives:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   936
\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   937
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   938
thm exE     \<comment> \<open>local parameter\<close>
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   939
thm conjE   \<comment> \<open>local premises\<close>
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   940
thm disjE   \<comment> \<open>split into cases\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   941
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   942
text \<open>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   943
  Combining these characteristics leads to the following general scheme
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   944
  for elimination rules with cases:
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   945
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   946
  \<^item> prefix of assumptions (or ``major premises'')
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   947
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   948
  \<^item> one or more cases that enable to establish the main conclusion
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   949
  in an augmented context
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   950
\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   951
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   952
notepad
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   953
begin
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   954
  assume r:
67369
7360fe6bb423 prefer formal comments;
wenzelm
parents: 63680
diff changeset
   955
    "A\<^sub>1 \<Longrightarrow> A\<^sub>2 \<Longrightarrow>  \<comment> \<open>assumptions\<close>
7360fe6bb423 prefer formal comments;
wenzelm
parents: 63680
diff changeset
   956
      (\<And>x y. B\<^sub>1 x y \<Longrightarrow> C\<^sub>1 x y \<Longrightarrow> R) \<Longrightarrow>  \<comment> \<open>case 1\<close>
7360fe6bb423 prefer formal comments;
wenzelm
parents: 63680
diff changeset
   957
      (\<And>x y. B\<^sub>2 x y \<Longrightarrow> C\<^sub>2 x y \<Longrightarrow> R) \<Longrightarrow>  \<comment> \<open>case 2\<close>
7360fe6bb423 prefer formal comments;
wenzelm
parents: 63680
diff changeset
   958
      R  \<comment> \<open>main conclusion\<close>"
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   959
62272
wenzelm
parents: 62271
diff changeset
   960
  have A\<^sub>1 and A\<^sub>2 \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   961
  then have R
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   962
  proof (rule r)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   963
    fix x y
62272
wenzelm
parents: 62271
diff changeset
   964
    assume "B\<^sub>1 x y" and "C\<^sub>1 x y"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   965
    show ?thesis \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   966
  next
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   967
    fix x y
62272
wenzelm
parents: 62271
diff changeset
   968
    assume "B\<^sub>2 x y" and "C\<^sub>2 x y"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   969
    show ?thesis \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   970
  qed
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   971
end
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   972
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   973
text \<open>Here \<open>?thesis\<close> is used to refer to the unchanged goal
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   974
  statement.\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   975
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   976
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   977
subsection \<open>Rules with cases\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   978
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   979
text \<open>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   980
  Applying an elimination rule to some goal, leaves that unchanged
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   981
  but allows to augment the context in the sub-proof of each case.
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   982
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   983
  Isar provides some infrastructure to support this:
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   984
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   985
  \<^item> native language elements to state eliminations
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   986
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   987
  \<^item> symbolic case names
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   988
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   989
  \<^item> method @{method cases} to recover this structure in a
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   990
  sub-proof
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   991
\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   992
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   993
print_statement exE
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   994
print_statement conjE
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   995
print_statement disjE
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   996
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   997
lemma
62272
wenzelm
parents: 62271
diff changeset
   998
  assumes A\<^sub>1 and A\<^sub>2  \<comment> \<open>assumptions\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   999
  obtains
62272
wenzelm
parents: 62271
diff changeset
  1000
    (case\<^sub>1)  x y where "B\<^sub>1 x y" and "C\<^sub>1 x y"
wenzelm
parents: 62271
diff changeset
  1001
  | (case\<^sub>2)  x y where "B\<^sub>2 x y" and "C\<^sub>2 x y"
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
  1002
  \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1003
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1004
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1005
subsubsection \<open>Example\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1006
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1007
lemma tertium_non_datur:
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1008
  obtains
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1009
    (T)  A
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1010
  | (F)  "\<not> A"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1011
  by blast
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1012
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1013
notepad
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1014
begin
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1015
  fix x y :: 'a
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1016
  have C
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1017
  proof (cases "x = y" rule: tertium_non_datur)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1018
    case T
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
  1019
    from \<open>x = y\<close> show ?thesis \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1020
  next
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1021
    case F
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
  1022
    from \<open>x \<noteq> y\<close> show ?thesis \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1023
  qed
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1024
end
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1025
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1026
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1027
subsubsection \<open>Example\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1028
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1029
text \<open>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1030
  Isabelle/HOL specification mechanisms (datatype, inductive, etc.)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1031
  provide suitable derived cases rules.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1032
\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1033
58310
91ea607a34d8 updated news
blanchet
parents: 58305
diff changeset
  1034
datatype foo = Foo | Bar foo
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1035
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1036
notepad
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1037
begin
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1038
  fix x :: foo
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1039
  have C
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1040
  proof (cases x)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1041
    case Foo
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
  1042
    from \<open>x = Foo\<close> show ?thesis \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1043
  next
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1044
    case (Bar a)
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
  1045
    from \<open>x = Bar a\<close> show ?thesis \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1046
  qed
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1047
end
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1048
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1049
62273
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1050
subsection \<open>Elimination statements and case-splitting\<close>
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1051
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1052
text \<open>
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1053
  The @{command consider} states rules for generalized elimination and case
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1054
  splitting. This is like a toplevel statement \<^theory_text>\<open>theorem obtains\<close> used within
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1055
  a proof body; or like a multi-branch \<^theory_text>\<open>obtain\<close> without activation of the
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1056
  local context elements yet.
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1057
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1058
  The proof method @{method cases} is able to use such rules with
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1059
  forward-chaining (e.g.\ via \<^theory_text>\<open>then\<close>). This leads to the subsequent pattern
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1060
  for case-splitting in a particular situation within a proof.
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1061
\<close>
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1062
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1063
notepad
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1064
begin
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1065
  consider (a) A | (b) B | (c) C
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1066
    \<proof>  \<comment> \<open>typically \<^theory_text>\<open>by auto\<close>, \<^theory_text>\<open>by blast\<close> etc.\<close>
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1067
  then have something
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1068
  proof cases
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1069
    case a
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1070
    then show ?thesis \<proof>
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1071
  next
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1072
    case b
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1073
    then show ?thesis \<proof>
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1074
  next
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1075
    case c
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1076
    then show ?thesis \<proof>
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1077
  qed
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1078
end
443256a20033 more on 'consider';
wenzelm
parents: 62272
diff changeset
  1079
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1080
subsection \<open>Obtaining local contexts\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1081
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1082
text \<open>A single ``case'' branch may be inlined into Isar proof text
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 67443
diff changeset
  1083
  via @{command obtain}.  This proves \<^prop>\<open>(\<And>x. B x \<Longrightarrow> thesis) \<Longrightarrow>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 67443
diff changeset
  1084
  thesis\<close> on the spot, and augments the context afterwards.\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1085
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1086
notepad
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1087
begin
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1088
  fix B :: "'a \<Rightarrow> bool"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1089
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
  1090
  obtain x where "B x" \<proof>
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1091
  note \<open>B x\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1092
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 67443
diff changeset
  1093
  txt \<open>Conclusions from this context may not mention \<^term>\<open>x\<close> again!\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1094
  {
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
  1095
    obtain x where "B x" \<proof>
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
  1096
    from \<open>B x\<close> have C \<proof>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1097
  }
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1098
  note \<open>C\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1099
end
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1100
45103
a45121ffcfcb some amendments due to Jean Pichon;
wenzelm
parents: 42923
diff changeset
  1101
end