src/Doc/Isar_Ref/First_Order_Logic.thy
author nipkow
Fri, 11 Dec 2020 17:58:01 +0100
changeset 72884 50f18a822ee9
parent 69593 3dda49e08b9d
child 76987 4c275405faae
permissions -rw-r--r--
merged
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
61656
cfabbc083977 more uniform jEdit properties;
wenzelm
parents: 61580
diff changeset
     1
(*:maxLineLen=78:*)
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
     2
58889
5b7a9633cfa8 modernized header uniformly as section;
wenzelm
parents: 58618
diff changeset
     3
section \<open>Example: First-Order Logic\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
     4
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
     5
theory %visible First_Order_Logic
42651
e3fdb7c96be5 formal Base theory;
wenzelm
parents: 29735
diff changeset
     6
imports Base  (* FIXME Pure!? *)
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
     7
begin
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
     8
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
     9
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    10
  In order to commence a new object-logic within Isabelle/Pure we introduce
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    11
  abstract syntactic categories \<open>i\<close> for individuals and \<open>o\<close> for
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    12
  object-propositions. The latter is embedded into the language of Pure
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    13
  propositions by means of a separate judgment.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    14
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    15
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    16
typedecl i
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    17
typedecl o
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    18
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    19
judgment Trueprop :: "o \<Rightarrow> prop"    ("_" 5)
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    20
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    21
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    22
  Note that the object-logic judgment is implicit in the syntax: writing
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
    23
  \<^prop>\<open>A\<close> produces \<^term>\<open>Trueprop A\<close> internally. From the Pure
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
    24
  perspective this means ``\<^prop>\<open>A\<close> is derivable in the object-logic''.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    25
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    26
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    27
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    28
subsection \<open>Equational reasoning \label{sec:framework-ex-equal}\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    29
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    30
text \<open>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    31
  Equality is axiomatized as a binary predicate on individuals, with
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    32
  reflexivity as introduction, and substitution as elimination principle. Note
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    33
  that the latter is particularly convenient in a framework like Isabelle,
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    34
  because syntactic congruences are implicitly produced by unification of
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    35
  \<open>B x\<close> against expressions containing occurrences of \<open>x\<close>.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    36
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    37
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    38
axiomatization equal :: "i \<Rightarrow> i \<Rightarrow> o"  (infix "=" 50)
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    39
  where refl [intro]: "x = x"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    40
    and subst [elim]: "x = y \<Longrightarrow> B x \<Longrightarrow> B y"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    41
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    42
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    43
  Substitution is very powerful, but also hard to control in full generality.
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
    44
  We derive some common symmetry~/ transitivity schemes of \<^term>\<open>equal\<close> as
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    45
  particular consequences.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    46
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    47
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    48
theorem sym [sym]:
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    49
  assumes "x = y"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    50
  shows "y = x"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    51
proof -
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    52
  have "x = x" ..
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    53
  with \<open>x = y\<close> show "y = x" ..
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    54
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    55
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    56
theorem forw_subst [trans]:
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    57
  assumes "y = x" and "B x"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    58
  shows "B y"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    59
proof -
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    60
  from \<open>y = x\<close> have "x = y" ..
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    61
  from this and \<open>B x\<close> show "B y" ..
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    62
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    63
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    64
theorem back_subst [trans]:
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    65
  assumes "B x" and "x = y"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    66
  shows "B y"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    67
proof -
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    68
  from \<open>x = y\<close> and \<open>B x\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    69
  show "B y" ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    70
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    71
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    72
theorem trans [trans]:
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    73
  assumes "x = y" and "y = z"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    74
  shows "x = z"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    75
proof -
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    76
  from \<open>y = z\<close> and \<open>x = y\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    77
  show "x = z" ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    78
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    79
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    80
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    81
subsection \<open>Basic group theory\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    82
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    83
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    84
  As an example for equational reasoning we consider some bits of group
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    85
  theory. The subsequent locale definition postulates group operations and
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
    86
  axioms; we also derive some consequences of this specification.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
    87
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    88
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    89
locale group =
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    90
  fixes prod :: "i \<Rightarrow> i \<Rightarrow> i"  (infix "\<circ>" 70)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    91
    and inv :: "i \<Rightarrow> i"  ("(_\<inverse>)" [1000] 999)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    92
    and unit :: i  ("1")
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    93
  assumes assoc: "(x \<circ> y) \<circ> z = x \<circ> (y \<circ> z)"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    94
    and left_unit:  "1 \<circ> x = x"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    95
    and left_inv: "x\<inverse> \<circ> x = 1"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    96
begin
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    97
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    98
theorem right_inv: "x \<circ> x\<inverse> = 1"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
    99
proof -
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   100
  have "x \<circ> x\<inverse> = 1 \<circ> (x \<circ> x\<inverse>)" by (rule left_unit [symmetric])
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   101
  also have "\<dots> = (1 \<circ> x) \<circ> x\<inverse>" by (rule assoc [symmetric])
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   102
  also have "1 = (x\<inverse>)\<inverse> \<circ> x\<inverse>" by (rule left_inv [symmetric])
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   103
  also have "\<dots> \<circ> x = (x\<inverse>)\<inverse> \<circ> (x\<inverse> \<circ> x)" by (rule assoc)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   104
  also have "x\<inverse> \<circ> x = 1" by (rule left_inv)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   105
  also have "((x\<inverse>)\<inverse> \<circ> \<dots>) \<circ> x\<inverse> = (x\<inverse>)\<inverse> \<circ> (1 \<circ> x\<inverse>)" by (rule assoc)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   106
  also have "1 \<circ> x\<inverse> = x\<inverse>" by (rule left_unit)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   107
  also have "(x\<inverse>)\<inverse> \<circ> \<dots> = 1" by (rule left_inv)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   108
  finally show "x \<circ> x\<inverse> = 1" .
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   109
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   110
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   111
theorem right_unit: "x \<circ> 1 = x"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   112
proof -
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   113
  have "1 = x\<inverse> \<circ> x" by (rule left_inv [symmetric])
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   114
  also have "x \<circ> \<dots> = (x \<circ> x\<inverse>) \<circ> x" by (rule assoc [symmetric])
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   115
  also have "x \<circ> x\<inverse> = 1" by (rule right_inv)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   116
  also have "\<dots> \<circ> x = x" by (rule left_unit)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   117
  finally show "x \<circ> 1 = x" .
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   118
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   119
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   120
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   121
  Reasoning from basic axioms is often tedious. Our proofs work by producing
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   122
  various instances of the given rules (potentially the symmetric form) using
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   123
  the pattern ``\<^theory_text>\<open>have eq by (rule r)\<close>'' and composing the chain of results
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   124
  via \<^theory_text>\<open>also\<close>/\<^theory_text>\<open>finally\<close>. These steps may involve any of the transitivity
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   125
  rules declared in \secref{sec:framework-ex-equal}, namely @{thm trans} in
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   126
  combining the first two results in @{thm right_inv} and in the final steps
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   127
  of both proofs, @{thm forw_subst} in the first combination of @{thm
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   128
  right_unit}, and @{thm back_subst} in all other calculational steps.
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   129
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   130
  Occasional substitutions in calculations are adequate, but should not be
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   131
  over-emphasized. The other extreme is to compose a chain by plain
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   132
  transitivity only, with replacements occurring always in topmost position.
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   133
  For example:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   134
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   135
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   136
(*<*)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   137
theorem "\<And>A. PROP A \<Longrightarrow> PROP A"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   138
proof -
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   139
  assume [symmetric, defn]: "\<And>x y. (x \<equiv> y) \<equiv> Trueprop (x = y)"
56594
e3a06699a13f tuned spelling;
wenzelm
parents: 56451
diff changeset
   140
  fix x
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   141
(*>*)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   142
  have "x \<circ> 1 = x \<circ> (x\<inverse> \<circ> x)" unfolding left_inv ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   143
  also have "\<dots> = (x \<circ> x\<inverse>) \<circ> x" unfolding assoc ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   144
  also have "\<dots> = 1 \<circ> x" unfolding right_inv ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   145
  also have "\<dots> = x" unfolding left_unit ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   146
  finally have "x \<circ> 1 = x" .
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   147
(*<*)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   148
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   149
(*>*)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   150
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   151
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   152
  Here we have re-used the built-in mechanism for unfolding definitions in
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   153
  order to normalize each equational problem. A more realistic object-logic
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   154
  would include proper setup for the Simplifier (\secref{sec:simplifier}), the
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   155
  main automated tool for equational reasoning in Isabelle. Then ``\<^theory_text>\<open>unfolding
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   156
  left_inv ..\<close>'' would become ``\<^theory_text>\<open>by (simp only: left_inv)\<close>'' etc.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   157
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   158
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   159
end
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   160
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   161
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   162
subsection \<open>Propositional logic \label{sec:framework-ex-prop}\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   163
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   164
text \<open>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   165
  We axiomatize basic connectives of propositional logic: implication,
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   166
  disjunction, and conjunction. The associated rules are modeled after
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   167
  Gentzen's system of Natural Deduction @{cite "Gentzen:1935"}.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   168
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   169
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   170
axiomatization imp :: "o \<Rightarrow> o \<Rightarrow> o"  (infixr "\<longrightarrow>" 25)
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   171
  where impI [intro]: "(A \<Longrightarrow> B) \<Longrightarrow> A \<longrightarrow> B"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   172
    and impD [dest]: "(A \<longrightarrow> B) \<Longrightarrow> A \<Longrightarrow> B"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   173
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   174
axiomatization disj :: "o \<Rightarrow> o \<Rightarrow> o"  (infixr "\<or>" 30)
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   175
  where disjI\<^sub>1 [intro]: "A \<Longrightarrow> A \<or> B"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   176
    and disjI\<^sub>2 [intro]: "B \<Longrightarrow> A \<or> B"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   177
    and disjE [elim]: "A \<or> B \<Longrightarrow> (A \<Longrightarrow> C) \<Longrightarrow> (B \<Longrightarrow> C) \<Longrightarrow> C"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   178
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   179
axiomatization conj :: "o \<Rightarrow> o \<Rightarrow> o"  (infixr "\<and>" 35)
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   180
  where conjI [intro]: "A \<Longrightarrow> B \<Longrightarrow> A \<and> B"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   181
    and conjD\<^sub>1: "A \<and> B \<Longrightarrow> A"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   182
    and conjD\<^sub>2: "A \<and> B \<Longrightarrow> B"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   183
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   184
text \<open>
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
   185
  The conjunctive destructions have the disadvantage that decomposing \<^prop>\<open>A \<and> B\<close> involves an immediate decision which component should be projected.
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
   186
  The more convenient simultaneous elimination \<^prop>\<open>A \<and> B \<Longrightarrow> (A \<Longrightarrow> B \<Longrightarrow> C) \<Longrightarrow>
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
   187
  C\<close> can be derived as follows:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   188
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   189
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   190
theorem conjE [elim]:
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   191
  assumes "A \<and> B"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   192
  obtains A and B
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   193
proof
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   194
  from \<open>A \<and> B\<close> show A by (rule conjD\<^sub>1)
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   195
  from \<open>A \<and> B\<close> show B by (rule conjD\<^sub>2)
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   196
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   197
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   198
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   199
  Here is an example of swapping conjuncts with a single intermediate
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   200
  elimination step:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   201
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   202
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   203
(*<*)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   204
lemma "\<And>A. PROP A \<Longrightarrow> PROP A"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   205
proof -
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   206
  fix A B
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   207
(*>*)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   208
  assume "A \<and> B"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   209
  then obtain B and A ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   210
  then have "B \<and> A" ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   211
(*<*)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   212
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   213
(*>*)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   214
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   215
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   216
  Note that the analogous elimination rule for disjunction ``\<^theory_text>\<open>assumes "A \<or> B"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   217
  obtains A \<BBAR> B\<close>'' coincides with the original axiomatization of @{thm
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   218
  disjE}.
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   219
61421
e0825405d398 more symbols;
wenzelm
parents: 61420
diff changeset
   220
  \<^medskip>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   221
  We continue propositional logic by introducing absurdity with its
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   222
  characteristic elimination. Plain truth may then be defined as a proposition
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   223
  that is trivially true.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   224
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   225
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   226
axiomatization false :: o  ("\<bottom>")
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   227
  where falseE [elim]: "\<bottom> \<Longrightarrow> A"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   228
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   229
definition true :: o  ("\<top>")
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   230
  where "\<top> \<equiv> \<bottom> \<longrightarrow> \<bottom>"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   231
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   232
theorem trueI [intro]: \<top>
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   233
  unfolding true_def ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   234
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   235
text \<open>
61421
e0825405d398 more symbols;
wenzelm
parents: 61420
diff changeset
   236
  \<^medskip>
e0825405d398 more symbols;
wenzelm
parents: 61420
diff changeset
   237
  Now negation represents an implication towards absurdity:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   238
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   239
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   240
definition not :: "o \<Rightarrow> o"  ("\<not> _" [40] 40)
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   241
  where "\<not> A \<equiv> A \<longrightarrow> \<bottom>"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   242
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   243
theorem notI [intro]:
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   244
  assumes "A \<Longrightarrow> \<bottom>"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   245
  shows "\<not> A"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   246
unfolding not_def
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   247
proof
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   248
  assume A
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   249
  then show \<bottom> by (rule \<open>A \<Longrightarrow> \<bottom>\<close>)
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   250
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   251
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   252
theorem notE [elim]:
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   253
  assumes "\<not> A" and A
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   254
  shows B
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   255
proof -
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   256
  from \<open>\<not> A\<close> have "A \<longrightarrow> \<bottom>" unfolding not_def .
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   257
  from \<open>A \<longrightarrow> \<bottom>\<close> and \<open>A\<close> have \<bottom> ..
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   258
  then show B ..
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   259
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   260
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   261
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   262
subsection \<open>Classical logic\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   263
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   264
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   265
  Subsequently we state the principle of classical contradiction as a local
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   266
  assumption. Thus we refrain from forcing the object-logic into the classical
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   267
  perspective. Within that context, we may derive well-known consequences of
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   268
  the classical principle.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   269
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   270
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   271
locale classical =
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   272
  assumes classical: "(\<not> C \<Longrightarrow> C) \<Longrightarrow> C"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   273
begin
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   274
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   275
theorem double_negation:
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   276
  assumes "\<not> \<not> C"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   277
  shows C
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   278
proof (rule classical)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   279
  assume "\<not> C"
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   280
  with \<open>\<not> \<not> C\<close> show C ..
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   281
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   282
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   283
theorem tertium_non_datur: "C \<or> \<not> C"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   284
proof (rule double_negation)
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   285
  show "\<not> \<not> (C \<or> \<not> C)"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   286
  proof
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   287
    assume "\<not> (C \<or> \<not> C)"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   288
    have "\<not> C"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   289
    proof
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   290
      assume C then have "C \<or> \<not> C" ..
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   291
      with \<open>\<not> (C \<or> \<not> C)\<close> show \<bottom> ..
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   292
    qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   293
    then have "C \<or> \<not> C" ..
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   294
    with \<open>\<not> (C \<or> \<not> C)\<close> show \<bottom> ..
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   295
  qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   296
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   297
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   298
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   299
  These examples illustrate both classical reasoning and non-trivial
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   300
  propositional proofs in general. All three rules characterize classical
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   301
  logic independently, but the original rule is already the most convenient to
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
   302
  use, because it leaves the conclusion unchanged. Note that \<^prop>\<open>(\<not> C \<Longrightarrow> C)
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
   303
  \<Longrightarrow> C\<close> fits again into our format for eliminations, despite the additional
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   304
  twist that the context refers to the main conclusion. So we may write @{thm
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   305
  classical} as the Isar statement ``\<^theory_text>\<open>obtains \<not> thesis\<close>''. This also explains
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   306
  nicely how classical reasoning really works: whatever the main \<open>thesis\<close>
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   307
  might be, we may always assume its negation!
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   308
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   309
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   310
end
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   311
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   312
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   313
subsection \<open>Quantifiers \label{sec:framework-ex-quant}\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   314
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   315
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   316
  Representing quantifiers is easy, thanks to the higher-order nature of the
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   317
  underlying framework. According to the well-known technique introduced by
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   318
  Church @{cite "church40"}, quantifiers are operators on predicates, which
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 62279
diff changeset
   319
  are syntactically represented as \<open>\<lambda>\<close>-terms of type \<^typ>\<open>i \<Rightarrow> o\<close>. Binder
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   320
  notation turns \<open>All (\<lambda>x. B x)\<close> into \<open>\<forall>x. B x\<close> etc.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   321
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   322
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   323
axiomatization All :: "(i \<Rightarrow> o) \<Rightarrow> o"  (binder "\<forall>" 10)
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   324
  where allI [intro]: "(\<And>x. B x) \<Longrightarrow> \<forall>x. B x"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   325
    and allD [dest]: "(\<forall>x. B x) \<Longrightarrow> B a"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   326
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   327
axiomatization Ex :: "(i \<Rightarrow> o) \<Rightarrow> o"  (binder "\<exists>" 10)
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   328
  where exI [intro]: "B a \<Longrightarrow> (\<exists>x. B x)"
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   329
    and exE [elim]: "(\<exists>x. B x) \<Longrightarrow> (\<And>x. B x \<Longrightarrow> C) \<Longrightarrow> C"
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   330
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   331
text \<open>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   332
  The statement of @{thm exE} corresponds to ``\<^theory_text>\<open>assumes "\<exists>x. B x" obtains x
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   333
  where "B x"\<close>'' in Isar. In the subsequent example we illustrate quantifier
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   334
  reasoning involving all four rules:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   335
\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   336
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   337
theorem
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   338
  assumes "\<exists>x. \<forall>y. R x y"
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   339
  shows "\<forall>y. \<exists>x. R x y"
61580
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   340
proof    \<comment> \<open>\<open>\<forall>\<close> introduction\<close>
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   341
  obtain x where "\<forall>y. R x y" using \<open>\<exists>x. \<forall>y. R x y\<close> ..    \<comment> \<open>\<open>\<exists>\<close> elimination\<close>
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   342
  fix y have "R x y" using \<open>\<forall>y. R x y\<close> ..    \<comment> \<open>\<open>\<forall>\<close> destruction\<close>
c49a8ebd30cc isabelle update_cartouches -c;
wenzelm
parents: 61493
diff changeset
   343
  then show "\<exists>x. R x y" ..    \<comment> \<open>\<open>\<exists>\<close> introduction\<close>
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   344
qed
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   345
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   346
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   347
subsection \<open>Canonical reasoning patterns\<close>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   348
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   349
text \<open>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   350
  The main rules of first-order predicate logic from
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   351
  \secref{sec:framework-ex-prop} and \secref{sec:framework-ex-quant} can now
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   352
  be summarized as follows, using the native Isar statement format of
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   353
  \secref{sec:framework-stmt}.
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   354
61421
e0825405d398 more symbols;
wenzelm
parents: 61420
diff changeset
   355
  \<^medskip>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   356
  \begin{tabular}{l}
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   357
  \<^theory_text>\<open>impI: assumes "A \<Longrightarrow> B" shows "A \<longrightarrow> B"\<close> \\
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   358
  \<^theory_text>\<open>impD: assumes "A \<longrightarrow> B" and A shows B\<close> \\[1ex]
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   359
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   360
  \<^theory_text>\<open>disjI\<^sub>1: assumes A shows "A \<or> B"\<close> \\
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   361
  \<^theory_text>\<open>disjI\<^sub>2: assumes B shows "A \<or> B"\<close> \\
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   362
  \<^theory_text>\<open>disjE: assumes "A \<or> B" obtains A \<BBAR> B\<close> \\[1ex]
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   363
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   364
  \<^theory_text>\<open>conjI: assumes A and B shows A \<and> B\<close> \\
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   365
  \<^theory_text>\<open>conjE: assumes "A \<and> B" obtains A and B\<close> \\[1ex]
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   366
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   367
  \<^theory_text>\<open>falseE: assumes \<bottom> shows A\<close> \\
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   368
  \<^theory_text>\<open>trueI: shows \<top>\<close> \\[1ex]
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   369
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   370
  \<^theory_text>\<open>notI: assumes "A \<Longrightarrow> \<bottom>" shows "\<not> A"\<close> \\
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   371
  \<^theory_text>\<open>notE: assumes "\<not> A" and A shows B\<close> \\[1ex]
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   372
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   373
  \<^theory_text>\<open>allI: assumes "\<And>x. B x" shows "\<forall>x. B x"\<close> \\
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   374
  \<^theory_text>\<open>allE: assumes "\<forall>x. B x" shows "B a"\<close> \\[1ex]
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   375
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   376
  \<^theory_text>\<open>exI: assumes "B a" shows "\<exists>x. B x"\<close> \\
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   377
  \<^theory_text>\<open>exE: assumes "\<exists>x. B x" obtains a where "B a"\<close>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   378
  \end{tabular}
61421
e0825405d398 more symbols;
wenzelm
parents: 61420
diff changeset
   379
  \<^medskip>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   380
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   381
  This essentially provides a declarative reading of Pure rules as Isar
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   382
  reasoning patterns: the rule statements tells how a canonical proof outline
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   383
  shall look like. Since the above rules have already been declared as
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   384
  @{attribute (Pure) intro}, @{attribute (Pure) elim}, @{attribute (Pure)
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   385
  dest} --- each according to its particular shape --- we can immediately
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   386
  write Isar proof texts as follows:
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   387
\<close>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   388
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   389
(*<*)
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   390
theorem "\<And>A. PROP A \<Longrightarrow> PROP A"
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   391
proof -
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   392
(*>*)
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   393
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   394
  text_raw \<open>\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   395
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   396
  have "A \<longrightarrow> B"
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   397
  proof
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   398
    assume A
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   399
    show B \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   400
  qed
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   401
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   402
  text_raw \<open>\end{minipage}\qquad\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   403
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   404
  have "A \<longrightarrow> B" and A \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   405
  then have B ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   406
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   407
  text_raw \<open>\end{minipage}\\[3ex]\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   408
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   409
  have A \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   410
  then have "A \<or> B" ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   411
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   412
  have B \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   413
  then have "A \<or> B" ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   414
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   415
  text_raw \<open>\end{minipage}\qquad\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   416
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   417
  have "A \<or> B" \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   418
  then have C
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   419
  proof
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   420
    assume A
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   421
    then show C \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   422
  next
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   423
    assume B
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   424
    then show C \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   425
  qed
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   426
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   427
  text_raw \<open>\end{minipage}\\[3ex]\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   428
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   429
  have A and B \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   430
  then have "A \<and> B" ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   431
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   432
  text_raw \<open>\end{minipage}\qquad\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   433
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   434
  have "A \<and> B" \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   435
  then obtain A and B ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   436
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   437
  text_raw \<open>\end{minipage}\\[3ex]\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   438
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   439
  have "\<bottom>" \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   440
  then have A ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   441
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   442
  text_raw \<open>\end{minipage}\qquad\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   443
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   444
  have "\<top>" ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   445
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   446
  text_raw \<open>\end{minipage}\\[3ex]\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   447
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   448
  have "\<not> A"
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   449
  proof
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   450
    assume A
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   451
    then show "\<bottom>" \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   452
  qed
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   453
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   454
  text_raw \<open>\end{minipage}\qquad\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   455
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   456
  have "\<not> A" and A \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   457
  then have B ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   458
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   459
  text_raw \<open>\end{minipage}\\[3ex]\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   460
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   461
  have "\<forall>x. B x"
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   462
  proof
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   463
    fix x
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   464
    show "B x" \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   465
  qed
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   466
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   467
  text_raw \<open>\end{minipage}\qquad\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   468
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   469
  have "\<forall>x. B x" \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   470
  then have "B a" ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   471
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   472
  text_raw \<open>\end{minipage}\\[3ex]\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   473
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   474
  have "\<exists>x. B x"
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   475
  proof
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   476
    show "B a" \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   477
  qed
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   478
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   479
  text_raw \<open>\end{minipage}\qquad\begin{minipage}[t]{0.4\textwidth}\<close>(*<*)next(*>*)
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   480
62271
4cfe65cfd369 more explicit dummy proofs;
wenzelm
parents: 61656
diff changeset
   481
  have "\<exists>x. B x" \<proof>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   482
  then obtain a where "B a" ..
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   483
58999
ed09ae4ea2d8 uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
wenzelm
parents: 58889
diff changeset
   484
  text_raw \<open>\end{minipage}\<close>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   485
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   486
(*<*)
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   487
qed
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   488
(*>*)
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   489
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   490
text \<open>
61421
e0825405d398 more symbols;
wenzelm
parents: 61420
diff changeset
   491
  \<^bigskip>
62279
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   492
  Of course, these proofs are merely examples. As sketched in
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   493
  \secref{sec:framework-subproof}, there is a fair amount of flexibility in
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   494
  expressing Pure deductions in Isar. Here the user is asked to express
f054c364b53f misc tuning;
wenzelm
parents: 62271
diff changeset
   495
  himself adequately, aiming at proof texts of literary quality.
58618
782f0b662cae more cartouches;
wenzelm
parents: 58552
diff changeset
   496
\<close>
29734
fe5ceb6e9a7d added section "Canonical reasoning patterns";
wenzelm
parents: 29732
diff changeset
   497
29730
924c1fd5f303 added example "First-Order Logic" -- mostly from Trybulec Festschrift;
wenzelm
parents:
diff changeset
   498
end %visible