src/Doc/Isar_Ref/Synopsis.thy
author wenzelm
Fri, 01 Jan 2016 14:44:52 +0100
changeset 62026 ea3b1b0413b4
parent 61656 cfabbc083977
child 62271 4cfe65cfd369
permissions -rw-r--r--
more symbols;
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
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
     4
imports Base Main
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>
42918
wenzelm
parents: 42917
diff changeset
    29
  def x \<equiv> "t::'a"
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>
42917
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
    56
  have b: B sorry
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
  {
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   159
    have a: A sorry
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   160
    have b: B sorry
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
  {
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   177
    have a: A sorry
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 -
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   181
      show B sorry
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   182
    next
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   183
      have c: C sorry
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   184
    next
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   185
      have d: D sorry
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
    {
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   193
      have a: A sorry
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
        {
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   199
          show B sorry
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   200
        }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   201
        {
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   202
          have c: C sorry
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   203
        }
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   204
        {
ba23e83b0868 added Synopsis, with some "Notepad" material;
wenzelm
parents:
diff changeset
   205
          have d: D sorry
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>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   217
  For example, see @{file "~~/src/HOL/Isar_Examples/Group.thy"}.
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
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   238
    show ?thesis sorry
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>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   263
  have "a = b" sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   264
  also
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   265
  have "b = c" sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   266
  also
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   267
  have "c = d" sorry
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>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   272
  have "a = b" sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   273
  also
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   274
  have "\<dots> = c" sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   275
  also
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   276
  have "\<dots> = d" sorry
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 -
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   283
    have "a = b" sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   284
    also
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   285
    have "\<dots> = c" sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   286
    also
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   287
    have "\<dots> = d" sorry
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
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   295
  have "a < b" sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   296
  also
45814
a644ba1d7cf9 fix spelling
huffman
parents: 45103
diff changeset
   297
  have "b \<le> c" sorry
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   298
  also
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   299
  have "c = d" sorry
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
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   316
subsection \<open>Degenerate calculations and bigstep reasoning\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   317
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   318
text \<open>The Idea is to append \<open>this\<close> to \<open>calculation\<close>,
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   319
  without rule composition.\<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>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   324
  have A sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   325
  moreover
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   326
  have B sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   327
  moreover
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   328
  have C sorry
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>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   333
  have A sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   334
  moreover
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   335
  have B sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   336
  moreover
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   337
  have C sorry
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
next
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   341
  txt \<open>More ambitious bigstep reasoning involving structured results:\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   342
  have "A \<or> B \<or> C" sorry
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   343
  moreover
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   344
  { assume A have R sorry }
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   345
  moreover
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   346
  { assume B have R sorry }
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   347
  moreover
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   348
  { assume C have R sorry }
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   349
  ultimately
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   350
  have R by blast  \<comment> \<open>``big-bang integration'' of proof blocks (occasionally fragile)\<close>
42919
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   351
end
6e83c2f73240 some material on "Calculational reasoning";
wenzelm
parents: 42918
diff changeset
   352
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   353
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   354
section \<open>Induction\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   355
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   356
subsection \<open>Induction as Natural Deduction\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   357
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   358
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
   359
  Deduction (see also \secref{sec:natural-deduction-synopsis}).  For
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   360
  example:\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   361
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   362
thm nat.induct
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   363
print_statement nat.induct
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   364
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   365
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   366
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   367
  fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   368
  have "P n"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   369
  proof (rule nat.induct)  \<comment> \<open>fragile rule application!\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   370
    show "P 0" sorry
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   371
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   372
    fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   373
    assume "P n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   374
    show "P (Suc n)" sorry
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   375
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   376
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   377
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   378
text \<open>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   379
  In practice, much more proof infrastructure is required.
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   380
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   381
  The proof method @{method induct} provides:
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   382
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   383
  \<^item> implicit rule selection and robust instantiation
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   384
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   385
  \<^item> context elements via symbolic case names
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   386
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   387
  \<^item> support for rule-structured induction statements, with local
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   388
  parameters, premises, etc.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   389
\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   390
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   391
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   392
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   393
  fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   394
  have "P n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   395
  proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   396
    case 0
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   397
    show ?case sorry
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   398
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   399
    case (Suc n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   400
    from Suc.hyps show ?case sorry
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   401
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   402
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   403
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   404
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   405
subsubsection \<open>Example\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   406
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   407
text \<open>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   408
  The subsequent example combines the following proof patterns:
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   409
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   410
  \<^item> outermost induction (over the datatype structure of natural
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   411
  numbers), to decompose the proof problem in top-down manner
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   412
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   413
  \<^item> calculational reasoning (\secref{sec:calculations-synopsis})
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   414
  to compose the result in each case
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   415
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   416
  \<^item> solving local claims within the calculation by simplification
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   417
\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   418
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   419
lemma
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   420
  fixes n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   421
  shows "(\<Sum>i=0..n. i) = n * (n + 1) div 2"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   422
proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   423
  case 0
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   424
  have "(\<Sum>i=0..0. i) = (0::nat)" by simp
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   425
  also have "\<dots> = 0 * (0 + 1) div 2" by simp
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   426
  finally show ?case .
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   427
next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   428
  case (Suc n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   429
  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
   430
  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
   431
  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
   432
  also have "\<dots> = (Suc n * (Suc n + 1)) div 2" by simp
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   433
  finally show ?case .
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   434
qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   435
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   436
text \<open>This demonstrates how induction proofs can be done without
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   437
  having to consider the raw Natural Deduction structure.\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   438
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   439
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   440
subsection \<open>Induction with local parameters and premises\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   441
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   442
text \<open>Idea: Pure rule statements are passed through the induction
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   443
  rule.  This achieves convenient proof patterns, thanks to some
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   444
  internal trickery in the @{method induct} method.
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   445
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   446
  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
   447
  well-known anti-pattern! It would produce useless formal noise.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   448
\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   449
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   450
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   451
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   452
  fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   453
  fix P :: "nat \<Rightarrow> bool"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   454
  fix Q :: "'a \<Rightarrow> nat \<Rightarrow> bool"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   455
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   456
  have "P n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   457
  proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   458
    case 0
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   459
    show "P 0" sorry
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   460
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   461
    case (Suc n)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   462
    from \<open>P n\<close> show "P (Suc n)" sorry
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   463
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   464
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   465
  have "A n \<Longrightarrow> P n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   466
  proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   467
    case 0
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   468
    from \<open>A 0\<close> show "P 0" sorry
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   469
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   470
    case (Suc n)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   471
    from \<open>A n \<Longrightarrow> P n\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   472
      and \<open>A (Suc n)\<close> show "P (Suc n)" sorry
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   473
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   474
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   475
  have "\<And>x. Q x n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   476
  proof (induct n)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   477
    case 0
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   478
    show "Q x 0" sorry
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   479
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   480
    case (Suc n)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   481
    from \<open>\<And>x. Q x n\<close> show "Q x (Suc n)" sorry
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   482
    txt \<open>Local quantification admits arbitrary instances:\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   483
    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
   484
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   485
end
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
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   488
subsection \<open>Implicit induction context\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   489
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   490
text \<open>The @{method induct} method can isolate local parameters and
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   491
  premises directly from the given statement.  This is convenient in
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   492
  practical applications, but requires some understanding of what is
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   493
  going on internally (as explained above).\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   494
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   495
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   496
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   497
  fix n :: nat
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   498
  fix Q :: "'a \<Rightarrow> nat \<Rightarrow> bool"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   499
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   500
  fix x :: 'a
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   501
  assume "A x n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   502
  then have "Q x n"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   503
  proof (induct n arbitrary: x)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   504
    case 0
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   505
    from \<open>A x 0\<close> show "Q x 0" sorry
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   506
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   507
    case (Suc n)
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   508
    from \<open>\<And>x. A x n \<Longrightarrow> Q x n\<close>  \<comment> \<open>arbitrary instances can be produced here\<close>
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   509
      and \<open>A x (Suc n)\<close> show "Q x (Suc n)" sorry
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   510
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   511
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   512
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   513
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   514
subsection \<open>Advanced induction with term definitions\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   515
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   516
text \<open>Induction over subexpressions of a certain shape are delicate
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   517
  to formalize.  The Isar @{method induct} method provides
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   518
  infrastructure for this.
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   519
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   520
  Idea: sub-expressions of the problem are turned into a defined
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   521
  induction variable; often accompanied with fixing of auxiliary
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   522
  parameters in the original expression.\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   523
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   524
notepad
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   525
begin
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   526
  fix a :: "'a \<Rightarrow> nat"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   527
  fix A :: "nat \<Rightarrow> bool"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   528
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   529
  assume "A (a x)"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   530
  then have "P (a x)"
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   531
  proof (induct "a x" arbitrary: x)
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   532
    case 0
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   533
    note prem = \<open>A (a x)\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   534
      and defn = \<open>0 = a x\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   535
    show "P (a x)" sorry
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   536
  next
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   537
    case (Suc n)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   538
    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
   539
      and prem = \<open>A (a x)\<close>
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   540
      and defn = \<open>Suc n = a x\<close>
42921
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   541
    show "P (a x)" sorry
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   542
  qed
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   543
end
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   544
ec270c6cb942 some material on "Structured induction proofs";
wenzelm
parents: 42920
diff changeset
   545
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   546
section \<open>Natural Deduction \label{sec:natural-deduction-synopsis}\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   547
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   548
subsection \<open>Rule statements\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   549
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   550
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   551
  Isabelle/Pure ``theorems'' are always natural deduction rules,
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   552
  which sometimes happen to consist of a conclusion only.
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   553
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   554
  The framework connectives \<open>\<And>\<close> and \<open>\<Longrightarrow>\<close> indicate the
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   555
  rule structure declaratively.  For example:\<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
thm conjI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   558
thm impI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   559
thm nat.induct
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   560
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   561
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   562
  The object-logic is embedded into the Pure framework via an implicit
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   563
  derivability judgment @{term "Trueprop :: bool \<Rightarrow> prop"}.
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   564
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   565
  Thus any HOL formulae appears atomic to the Pure framework, while
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   566
  the rule structure outlines the corresponding proof pattern.
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   567
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   568
  This can be made explicit as follows:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   569
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   570
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   571
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   572
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   573
  write Trueprop  ("Tr")
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   574
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   575
  thm conjI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   576
  thm impI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   577
  thm nat.induct
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   578
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   579
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   580
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   581
  Isar provides first-class notation for rule statements as follows.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   582
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   583
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   584
print_statement conjI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   585
print_statement impI
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   586
print_statement nat.induct
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   587
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   588
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   589
subsubsection \<open>Examples\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   590
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   591
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   592
  Introductions and eliminations of some standard connectives of
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   593
  the object-logic can be written as rule statements as follows.  (The
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   594
  proof ``@{command "by"}~@{method blast}'' serves as sanity check.)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   595
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   596
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   597
lemma "(P \<Longrightarrow> False) \<Longrightarrow> \<not> P" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   598
lemma "\<not> P \<Longrightarrow> P \<Longrightarrow> Q" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   599
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   600
lemma "P \<Longrightarrow> Q \<Longrightarrow> P \<and> Q" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   601
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
   602
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   603
lemma "P \<Longrightarrow> P \<or> Q" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   604
lemma "Q \<Longrightarrow> P \<or> Q" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   605
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
   606
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   607
lemma "(\<And>x. P x) \<Longrightarrow> (\<forall>x. P x)" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   608
lemma "(\<forall>x. P x) \<Longrightarrow> P x" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   609
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   610
lemma "P x \<Longrightarrow> (\<exists>x. P x)" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   611
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
   612
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   613
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
   614
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
   615
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   616
lemma "x \<in> A \<Longrightarrow> x \<in> A \<union> B" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   617
lemma "x \<in> B \<Longrightarrow> x \<in> A \<union> B" by blast
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   618
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
   619
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   620
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   621
subsection \<open>Isar context elements\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   622
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   623
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
   624
  elements and some explicit blocks.  This illustrates their meaning
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   625
  wrt.\ Pure connectives, without goal states getting in the way.\<close>
42920
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
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   628
begin
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
    fix x
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   631
    have "B x" sorry
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 "\<And>x. B x" 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
  {
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   638
    assume A
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   639
    have B sorry
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 "A \<Longrightarrow> B" 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
  {
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   646
    def x \<equiv> t
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   647
    have "B x" sorry
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 "B t" 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
next
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
  {
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   654
    obtain x :: 'a where "B x" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   655
    have C sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   656
  }
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   657
  have C by fact
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   658
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   659
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   660
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   661
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   662
subsection \<open>Pure rule composition\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   663
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   664
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   665
  The Pure framework provides means for:
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   666
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   667
  \<^item> backward-chaining of rules by @{inference resolution}
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   668
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   669
  \<^item> closing of branches by @{inference assumption}
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   670
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   671
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   672
  Both principles involve higher-order unification of \<open>\<lambda>\<close>-terms
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   673
  modulo \<open>\<alpha>\<beta>\<eta>\<close>-equivalence (cf.\ Huet and Miller).
61458
987533262fc2 Markdown support in document text;
wenzelm
parents: 61421
diff changeset
   674
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   675
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   676
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   677
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   678
  assume a: A and b: B
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   679
  thm conjI
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   680
  thm conjI [of A B]  \<comment> "instantiation"
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   681
  thm conjI [of A B, OF a b]  \<comment> "instantiation and composition"
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   682
  thm conjI [OF a b]  \<comment> "composition via unification (trivial)"
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   683
  thm conjI [OF \<open>A\<close> \<open>B\<close>]
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   684
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   685
  thm conjI [OF disjI1]
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   686
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   687
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   688
text \<open>Note: Low-level rule composition is tedious and leads to
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   689
  unreadable~/ unmaintainable expressions in the text.\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   690
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   691
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   692
subsection \<open>Structured backward reasoning\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   693
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   694
text \<open>Idea: Canonical proof decomposition via @{command fix}~/
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   695
  @{command assume}~/ @{command show}, where the body produces a
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   696
  natural deduction rule to refine some goal.\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   697
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   698
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   699
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   700
  fix A B :: "'a \<Rightarrow> bool"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   701
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   702
  have "\<And>x. A x \<Longrightarrow> B x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   703
  proof -
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"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   706
    show "B x" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   707
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   708
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   709
  have "\<And>x. A x \<Longrightarrow> B x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   710
  proof -
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   711
    {
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   712
      fix x
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   713
      assume "A x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   714
      show "B x" sorry
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   715
    } \<comment> "implicit block structure made explicit"
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   716
    note \<open>\<And>x. A x \<Longrightarrow> B x\<close>
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   717
      \<comment> "side exit for the resulting rule"
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   718
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   719
end
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
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   722
subsection \<open>Structured rule application\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   723
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   724
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   725
  Idea: Previous facts and new claims are composed with a rule from
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   726
  the context (or background library).
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   727
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   728
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   729
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   730
begin
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   731
  assume r1: "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
   732
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   733
  have A sorry  \<comment> "prefix of facts via outer sub-proof"
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   734
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   735
  proof (rule r1)
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   736
    show B sorry  \<comment> "remaining rule premises via inner sub-proof"
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   737
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   738
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   739
  have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   740
  proof (rule r1)
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   741
    show A sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   742
    show B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   743
  qed
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
  have A and B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   746
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   747
  proof (rule r1)
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   748
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   749
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   750
  have A and B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   751
  then have C by (rule r1)
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   752
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   753
next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   754
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   755
  assume r2: "A \<Longrightarrow> (\<And>x. B1 x \<Longrightarrow> B2 x) \<Longrightarrow> C"  \<comment> \<open>nested rule\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   756
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   757
  have A sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   758
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   759
  proof (rule r2)
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   760
    fix x
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   761
    assume "B1 x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   762
    show "B2 x" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   763
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   764
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   765
  txt \<open>The compound rule premise @{prop "\<And>x. B1 x \<Longrightarrow> B2 x"} is better
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   766
    addressed via @{command fix}~/ @{command assume}~/ @{command show}
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   767
    in the nested proof body.\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   768
end
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
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   771
subsection \<open>Example: predicate logic\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   772
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   773
text \<open>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   774
  Using the above principles, standard introduction and elimination proofs
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   775
  of predicate logic connectives of HOL work as follows.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   776
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   777
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   778
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   779
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   780
  have "A \<longrightarrow> B" and A sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   781
  then have B ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   782
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   783
  have A sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   784
  then have "A \<or> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   785
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   786
  have B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   787
  then have "A \<or> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   788
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   789
  have "A \<or> B" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   790
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   791
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   792
    assume A
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   793
    then show C sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   794
  next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   795
    assume B
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   796
    then show C sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   797
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   798
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   799
  have A and B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   800
  then have "A \<and> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   801
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   802
  have "A \<and> B" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   803
  then have A ..
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 "A \<and> B" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   806
  then have B ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   807
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   808
  have False sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   809
  then have A ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   810
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   811
  have True ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   812
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   813
  have "\<not> A"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   814
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   815
    assume A
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   816
    then show False sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   817
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   818
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   819
  have "\<not> A" and A sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   820
  then have B ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   821
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   822
  have "\<forall>x. P x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   823
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   824
    fix x
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   825
    show "P x" sorry
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
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   828
  have "\<forall>x. P x" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   829
  then have "P a" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   830
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   831
  have "\<exists>x. P x"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   832
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   833
    show "P a" sorry
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
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   836
  have "\<exists>x. P x" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   837
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   838
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   839
    fix a
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   840
    assume "P a"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   841
    show C sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   842
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   843
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   844
  txt \<open>Less awkward version using @{command obtain}:\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   845
  have "\<exists>x. P x" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   846
  then obtain a where "P a" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   847
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   848
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   849
text \<open>Further variations to illustrate Isar sub-proofs involving
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   850
  @{command show}:\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   851
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   852
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   853
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   854
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   855
  proof  \<comment> \<open>two strictly isolated subproofs\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   856
    show A sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   857
  next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   858
    show B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   859
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   860
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   861
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   862
  proof  \<comment> \<open>one simultaneous sub-proof\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   863
    show A and B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   864
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   865
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   866
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   867
  proof  \<comment> \<open>two subproofs in the same context\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   868
    show A sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   869
    show B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   870
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   871
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   872
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   873
  proof  \<comment> \<open>swapped order\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   874
    show B sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   875
    show A sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   876
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   877
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   878
  have "A \<and> B"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   879
  proof  \<comment> \<open>sequential subproofs\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   880
    show A sorry
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   881
    show B using \<open>A\<close> sorry
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   882
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   883
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   884
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   885
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   886
subsubsection \<open>Example: set-theoretic operators\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   887
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   888
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
   889
  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
   890
  of rule declarations in the library; rules can be also specified
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   891
  explicitly.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   892
\<close>
42920
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   893
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   894
notepad
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   895
begin
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   896
  have "x \<in> A" and "x \<in> B" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   897
  then have "x \<in> A \<inter> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   898
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   899
  have "x \<in> A" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   900
  then have "x \<in> A \<union> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   901
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   902
  have "x \<in> B" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   903
  then have "x \<in> A \<union> B" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   904
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   905
  have "x \<in> A \<union> B" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   906
  then have C
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   907
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   908
    assume "x \<in> A"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   909
    then show C sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   910
  next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   911
    assume "x \<in> B"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   912
    then show C sorry
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
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   915
next
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   916
  have "x \<in> \<Inter>A"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   917
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   918
    fix a
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   919
    assume "a \<in> A"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   920
    show "x \<in> a" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   921
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   922
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   923
  have "x \<in> \<Inter>A" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   924
  then have "x \<in> a"
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   925
  proof
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   926
    show "a \<in> A" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   927
  qed
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   928
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   929
  have "a \<in> A" and "x \<in> a" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   930
  then have "x \<in> \<Union>A" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   931
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   932
  have "x \<in> \<Union>A" sorry
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   933
  then obtain a where "a \<in> A" and "x \<in> a" ..
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   934
end
8c0a49d72857 some material on "Structured Natural Deduction";
wenzelm
parents: 42919
diff changeset
   935
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   936
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   937
section \<open>Generalized elimination and cases\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   938
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   939
subsection \<open>General elimination rules\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   940
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   941
text \<open>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   942
  The general format of elimination rules is illustrated by the
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   943
  following typical representatives:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   944
\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   945
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   946
thm exE     \<comment> \<open>local parameter\<close>
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   947
thm conjE   \<comment> \<open>local premises\<close>
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   948
thm disjE   \<comment> \<open>split into cases\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   949
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   950
text \<open>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   951
  Combining these characteristics leads to the following general scheme
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   952
  for elimination rules with cases:
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   953
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   954
  \<^item> prefix of assumptions (or ``major premises'')
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   955
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   956
  \<^item> one or more cases that enable to establish the main conclusion
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   957
  in an augmented context
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   958
\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   959
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   960
notepad
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   961
begin
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   962
  assume r:
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   963
    "A1 \<Longrightarrow> A2 \<Longrightarrow>  (* assumptions *)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   964
      (\<And>x y. B1 x y \<Longrightarrow> C1 x y \<Longrightarrow> R) \<Longrightarrow>  (* case 1 *)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   965
      (\<And>x y. B2 x y \<Longrightarrow> C2 x y \<Longrightarrow> R) \<Longrightarrow>  (* case 2 *)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   966
      R  (* main conclusion *)"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   967
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   968
  have A1 and A2 sorry
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   969
  then have R
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   970
  proof (rule r)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   971
    fix x y
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   972
    assume "B1 x y" and "C1 x y"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   973
    show ?thesis sorry
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   974
  next
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   975
    fix x y
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   976
    assume "B2 x y" and "C2 x y"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   977
    show ?thesis sorry
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   978
  qed
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   979
end
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   980
61493
0debd22f0c0e isabelle update_cartouches -t;
wenzelm
parents: 61477
diff changeset
   981
text \<open>Here \<open>?thesis\<close> is used to refer to the unchanged goal
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   982
  statement.\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   983
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   984
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   985
subsection \<open>Rules with cases\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   986
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   987
text \<open>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   988
  Applying an elimination rule to some goal, leaves that unchanged
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   989
  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
   990
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   991
  Isar provides some infrastructure to support this:
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   992
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   993
  \<^item> native language elements to state eliminations
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   994
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   995
  \<^item> symbolic case names
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   996
61421
e0825405d398 more symbols;
wenzelm
parents: 58618
diff changeset
   997
  \<^item> method @{method cases} to recover this structure in a
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
   998
  sub-proof
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
   999
\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1000
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1001
print_statement exE
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1002
print_statement conjE
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1003
print_statement disjE
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1004
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1005
lemma
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
  1006
  assumes A1 and A2  \<comment> \<open>assumptions\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1007
  obtains
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1008
    (case1)  x y where "B1 x y" and "C1 x y"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1009
  | (case2)  x y where "B2 x y" and "C2 x y"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1010
  sorry
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1011
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1012
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1013
subsubsection \<open>Example\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1014
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1015
lemma tertium_non_datur:
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1016
  obtains
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1017
    (T)  A
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1018
  | (F)  "\<not> A"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1019
  by blast
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1020
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1021
notepad
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1022
begin
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1023
  fix x y :: 'a
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1024
  have C
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1025
  proof (cases "x = y" rule: tertium_non_datur)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1026
    case T
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1027
    from \<open>x = y\<close> show ?thesis sorry
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1028
  next
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1029
    case F
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1030
    from \<open>x \<noteq> y\<close> show ?thesis sorry
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1031
  qed
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1032
end
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1033
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1034
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1035
subsubsection \<open>Example\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1036
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1037
text \<open>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1038
  Isabelle/HOL specification mechanisms (datatype, inductive, etc.)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1039
  provide suitable derived cases rules.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1040
\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1041
58310
91ea607a34d8 updated news
blanchet
parents: 58305
diff changeset
  1042
datatype foo = Foo | Bar foo
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1043
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1044
notepad
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1045
begin
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1046
  fix x :: foo
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1047
  have C
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1048
  proof (cases x)
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1049
    case Foo
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1050
    from \<open>x = Foo\<close> show ?thesis sorry
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1051
  next
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1052
    case (Bar a)
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1053
    from \<open>x = Bar a\<close> show ?thesis sorry
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1054
  qed
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1055
end
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1056
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1057
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1058
subsection \<open>Obtaining local contexts\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1059
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1060
text \<open>A single ``case'' branch may be inlined into Isar proof text
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1061
  via @{command obtain}.  This proves @{prop "(\<And>x. B x \<Longrightarrow> thesis) \<Longrightarrow>
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1062
  thesis"} on the spot, and augments the context afterwards.\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1063
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1064
notepad
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1065
begin
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1066
  fix B :: "'a \<Rightarrow> bool"
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1067
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1068
  obtain x where "B x" sorry
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1069
  note \<open>B x\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1070
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1071
  txt \<open>Conclusions from this context may not mention @{term x} again!\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1072
  {
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1073
    obtain x where "B x" sorry
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1074
    from \<open>B x\<close> have C sorry
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1075
  }
58618
782f0b662cae more cartouches;
wenzelm
parents: 58310
diff changeset
  1076
  note \<open>C\<close>
42922
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1077
end
91e229959d4c some material on "Generalized elimination and cases";
wenzelm
parents: 42921
diff changeset
  1078
45103
a45121ffcfcb some amendments due to Jean Pichon;
wenzelm
parents: 42923
diff changeset
  1079
end