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