author | Norbert Schirmer <norbert.schirmer@web.de> |
Tue, 14 May 2019 17:10:47 +0200 | |
changeset 565 | cecd7a941885 |
parent 562 | daf404920ab9 |
child 573 | 321e220a6baa |
permissions | -rw-r--r-- |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
1 |
theory Ind_Prelims |
346
0fea8b7a14a1
tuned the ML-output mechanism; tuned slightly the text
Christian Urban <urbanc@in.tum.de>
parents:
295
diff
changeset
|
2 |
imports Ind_Intro |
32 | 3 |
begin |
4 |
||
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
5 |
section\<open>Preliminaries\<close> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
6 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
7 |
text \<open> |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
8 |
The user will just give a specification of inductive predicate(s) and |
129
e0d368a45537
started a section about simprocs
Christian Urban <urbanc@in.tum.de>
parents:
127
diff
changeset
|
9 |
expects from the package to produce a convenient reasoning |
e0d368a45537
started a section about simprocs
Christian Urban <urbanc@in.tum.de>
parents:
127
diff
changeset
|
10 |
infrastructure. This infrastructure needs to be derived from the definition |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
11 |
that correspond to the specified predicate(s). Before we start with |
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
12 |
explaining all parts of the package, let us first give some examples showing |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
13 |
how to define inductive predicates and then also how to generate a reasoning |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
14 |
infrastructure for them. From the examples we will figure out a general |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
15 |
method for defining inductive predicates. This is usually the first step in |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
16 |
writing a package for Isabelle. The aim in this section is \emph{not} to |
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
17 |
write proofs that are as beautiful as possible, but as close as possible to |
244
dc95a56b1953
fixed the problem with double definition of even and odd
Christian Urban <urbanc@in.tum.de>
parents:
224
diff
changeset
|
18 |
the ML-implementation we will develop in later sections. |
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
19 |
|
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
20 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
21 |
We first consider the transitive closure of a relation \<open>R\<close>. The |
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
22 |
``pencil-and-paper'' specification for the transitive closure is: |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
23 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
24 |
\begin{center}\small |
116
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
25 |
@{prop[mode=Axiom] "trcl R x x"} \hspace{5mm} |
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
26 |
@{prop[mode=Rule] "R x y \<Longrightarrow> trcl R y z \<Longrightarrow> trcl R x z"} |
88
ebbd0dd008c8
adaptation of the package chapter to fit the rest
Christian Urban <urbanc@in.tum.de>
parents:
38
diff
changeset
|
27 |
\end{center} |
ebbd0dd008c8
adaptation of the package chapter to fit the rest
Christian Urban <urbanc@in.tum.de>
parents:
38
diff
changeset
|
28 |
|
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
29 |
As mentioned before, the package has to make an appropriate definition for |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
30 |
@{term "trcl"}. Since an inductively defined predicate is the least |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
31 |
predicate closed under a collection of introduction rules, the predicate |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
32 |
\<open>trcl R x y\<close> can be defined so that it holds if and only if \<open>P x y\<close> holds for every predicate \<open>P\<close> closed under the rules |
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
33 |
above. This gives rise to the definition |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
34 |
\<close> |
32 | 35 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
36 |
definition "trcl \<equiv> |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
37 |
\<lambda>R x y. \<forall>P. (\<forall>x. P x x) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
38 |
\<longrightarrow> (\<forall>x y z. R x y \<longrightarrow> P y z \<longrightarrow> P x z) \<longrightarrow> P x y" |
32 | 39 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
40 |
text \<open> |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
41 |
Note we have to use the object implication \<open>\<longrightarrow>\<close> and object |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
42 |
quantification \<open>\<forall>\<close> for stating this definition (there is no other |
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
43 |
way for definitions in HOL). However, the introduction rules and induction |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
44 |
principles associated with the transitive closure should use the |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
45 |
meta-connectives, since they simplify the reasoning for the user. |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
46 |
|
32 | 47 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
48 |
With this definition, the proof of the induction principle for @{term trcl} |
129
e0d368a45537
started a section about simprocs
Christian Urban <urbanc@in.tum.de>
parents:
127
diff
changeset
|
49 |
is almost immediate. It suffices to convert all the meta-level |
116
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
50 |
connectives in the lemma to object-level connectives using the |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
51 |
proof method \<open>atomize\<close> (Line 4 below), expand the definition of @{term trcl} |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
52 |
(Line 5 and 6), eliminate the universal quantifier contained in it (Line~7), |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
53 |
and then solve the goal by \<open>assumption\<close> (Line 8). |
113 | 54 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
55 |
\<close> |
32 | 56 |
|
114
13fd0a83d3c3
properly handled linenumbers in ML-text and Isar-proofs
Christian Urban <urbanc@in.tum.de>
parents:
113
diff
changeset
|
57 |
lemma %linenos trcl_induct: |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
58 |
assumes "trcl R x y" |
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
59 |
shows "(\<And>x. P x x) \<Longrightarrow> (\<And>x y z. R x y \<Longrightarrow> P y z \<Longrightarrow> P x z) \<Longrightarrow> P x y" |
113 | 60 |
apply(atomize (full)) |
513 | 61 |
apply(cut_tac assms) |
113 | 62 |
apply(unfold trcl_def) |
63 |
apply(drule spec[where x=P]) |
|
64 |
apply(assumption) |
|
65 |
done |
|
88
ebbd0dd008c8
adaptation of the package chapter to fit the rest
Christian Urban <urbanc@in.tum.de>
parents:
38
diff
changeset
|
66 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
67 |
text \<open> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
68 |
The proofs for the introduction rules are slightly more complicated. |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
69 |
For the first one, we need to prove the following lemma: |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
70 |
\<close> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
71 |
|
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
72 |
lemma %linenos trcl_base: |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
73 |
shows "trcl R x x" |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
74 |
apply(unfold trcl_def) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
75 |
apply(rule allI impI)+ |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
76 |
apply(drule spec) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
77 |
apply(assumption) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
78 |
done |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
79 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
80 |
text \<open> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
81 |
We again unfold first the definition and apply introduction rules |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
82 |
for \<open>\<forall>\<close> and \<open>\<longrightarrow>\<close> as often as possible (Lines 3 and 4). |
116
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
83 |
We then end up in the goal state: |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
84 |
\<close> |
88
ebbd0dd008c8
adaptation of the package chapter to fit the rest
Christian Urban <urbanc@in.tum.de>
parents:
38
diff
changeset
|
85 |
|
113 | 86 |
(*<*)lemma "trcl R x x" |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
87 |
apply (unfold trcl_def) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
88 |
apply (rule allI impI)+(*>*) |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
89 |
txt \<open>@{subgoals [display]}\<close> |
32 | 90 |
(*<*)oops(*>*) |
88
ebbd0dd008c8
adaptation of the package chapter to fit the rest
Christian Urban <urbanc@in.tum.de>
parents:
38
diff
changeset
|
91 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
92 |
text \<open> |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
93 |
The two assumptions come from the definition of @{term trcl} and correspond |
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
94 |
to the introduction rules. Thus, all we have to do is to eliminate the |
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
95 |
universal quantifier in front of the first assumption (Line 5), and then |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
96 |
solve the goal by \<open>assumption\<close> (Line 6). |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
97 |
\<close> |
113 | 98 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
99 |
text \<open> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
100 |
Next we have to show that the second introduction rule also follows from the |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
101 |
definition. Since this rule has premises, the proof is a bit more |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
102 |
involved. After unfolding the definitions and applying the introduction |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
103 |
rules for \<open>\<forall>\<close> and \<open>\<longrightarrow>\<close> |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
104 |
\<close> |
113 | 105 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
106 |
lemma trcl_step: |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
107 |
shows "R x y \<Longrightarrow> trcl R y z \<Longrightarrow> trcl R x z" |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
108 |
apply (unfold trcl_def) |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
109 |
apply (rule allI impI)+ |
113 | 110 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
111 |
txt \<open> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
112 |
we obtain the goal state |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
113 |
|
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
114 |
@{subgoals [display]} |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
115 |
|
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
116 |
To see better where we are, let us explicitly name the assumptions |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
117 |
by starting a subproof. |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
118 |
\<close> |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
119 |
|
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
120 |
proof - |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
121 |
case (goal1 P) |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
122 |
have p1: "R x y" by fact |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
123 |
have p2: "\<forall>P. (\<forall>x. P x x) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
124 |
\<longrightarrow> (\<forall>x y z. R x y \<longrightarrow> P y z \<longrightarrow> P x z) \<longrightarrow> P y z" by fact |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
125 |
have r1: "\<forall>x. P x x" by fact |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
126 |
have r2: "\<forall>x y z. R x y \<longrightarrow> P y z \<longrightarrow> P x z" by fact |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
127 |
show "P x z" |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
128 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
129 |
txt \<open> |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
130 |
The assumptions \<open>p1\<close> and \<open>p2\<close> correspond to the premises of |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
131 |
the second introduction rule (unfolded); the assumptions \<open>r1\<close> and \<open>r2\<close> |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
132 |
come from the definition of @{term trcl}. We apply \<open>r2\<close> to the goal |
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
133 |
@{term "P x z"}. In order for this assumption to be applicable as a rule, we |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
134 |
have to eliminate the universal quantifier and turn the object-level |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
135 |
implications into meta-level ones. This can be accomplished using the \<open>rule_format\<close> attribute. So we continue the proof with: |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
136 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
137 |
\<close> |
113 | 138 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
139 |
apply (rule r2[rule_format]) |
88
ebbd0dd008c8
adaptation of the package chapter to fit the rest
Christian Urban <urbanc@in.tum.de>
parents:
38
diff
changeset
|
140 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
141 |
txt \<open> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
142 |
This gives us two new subgoals |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
143 |
|
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
144 |
@{subgoals [display]} |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
145 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
146 |
which can be solved using assumptions \<open>p1\<close> and \<open>p2\<close>. The latter |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
147 |
involves a quantifier and implications that have to be eliminated before it |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
148 |
can be applied. To avoid potential problems with higher-order unification, |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
149 |
we explicitly instantiate the quantifier to \<open>P\<close> and also match |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
150 |
explicitly the implications with \<open>r1\<close> and \<open>r2\<close>. This gives |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
151 |
the proof: |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
152 |
\<close> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
153 |
|
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
154 |
apply(rule p1) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
155 |
apply(rule p2[THEN spec[where x=P], THEN mp, THEN mp, OF r1, OF r2]) |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
156 |
done |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
157 |
qed |
32 | 158 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
159 |
text \<open> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
160 |
Now we are done. It might be surprising that we are not using the automatic |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
161 |
tactics available in Isabelle/HOL for proving this lemmas. After all \<open>blast\<close> would easily dispense of it. |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
162 |
\<close> |
88
ebbd0dd008c8
adaptation of the package chapter to fit the rest
Christian Urban <urbanc@in.tum.de>
parents:
38
diff
changeset
|
163 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
164 |
lemma trcl_step_blast: |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
165 |
shows "R x y \<Longrightarrow> trcl R y z \<Longrightarrow> trcl R x z" |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
166 |
apply(unfold trcl_def) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
167 |
apply(blast) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
168 |
done |
562
daf404920ab9
Accomodate to Isabelle 2018
Norbert Schirmer <norbert.schirmer@web.de>
parents:
513
diff
changeset
|
169 |
term "even" |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
170 |
text \<open> |
116
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
171 |
Experience has shown that it is generally a bad idea to rely heavily on |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
172 |
\<open>blast\<close>, \<open>auto\<close> and the like in automated proofs. The reason is |
116
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
173 |
that you do not have precise control over them (the user can, for example, |
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
174 |
declare new intro- or simplification rules that can throw automatic tactics |
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
175 |
off course) and also it is very hard to debug proofs involving automatic |
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
176 |
tactics whenever something goes wrong. Therefore if possible, automatic |
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
177 |
tactics in packages should be avoided or be constrained sufficiently. |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
178 |
|
116
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
179 |
The method of defining inductive predicates by impredicative quantification |
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
180 |
also generalises to mutually inductive predicates. The next example defines |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
181 |
the predicates \<open>even\<close> and \<open>odd\<close> given by |
32 | 182 |
|
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
183 |
\begin{center}\small |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
184 |
@{prop[mode=Axiom] "even (0::nat)"} \hspace{5mm} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
185 |
@{prop[mode=Rule] "odd n \<Longrightarrow> even (Suc n)"} \hspace{5mm} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
186 |
@{prop[mode=Rule] "even n \<Longrightarrow> odd (Suc n)"} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
187 |
\end{center} |
32 | 188 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
189 |
Since the predicates @{term even} and @{term odd} are mutually inductive, each |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
190 |
corresponding definition must quantify over both predicates (we name them |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
191 |
below \<open>P\<close> and \<open>Q\<close>). |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
192 |
\<close> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
193 |
|
562
daf404920ab9
Accomodate to Isabelle 2018
Norbert Schirmer <norbert.schirmer@web.de>
parents:
513
diff
changeset
|
194 |
hide_const even |
daf404920ab9
Accomodate to Isabelle 2018
Norbert Schirmer <norbert.schirmer@web.de>
parents:
513
diff
changeset
|
195 |
hide_const odd |
daf404920ab9
Accomodate to Isabelle 2018
Norbert Schirmer <norbert.schirmer@web.de>
parents:
513
diff
changeset
|
196 |
|
daf404920ab9
Accomodate to Isabelle 2018
Norbert Schirmer <norbert.schirmer@web.de>
parents:
513
diff
changeset
|
197 |
definition "even \<equiv> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
198 |
\<lambda>n. \<forall>P Q. P 0 \<longrightarrow> (\<forall>m. Q m \<longrightarrow> P (Suc m)) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
199 |
\<longrightarrow> (\<forall>m. P m \<longrightarrow> Q (Suc m)) \<longrightarrow> P n" |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
200 |
|
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
201 |
definition "odd \<equiv> |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
202 |
\<lambda>n. \<forall>P Q. P 0 \<longrightarrow> (\<forall>m. Q m \<longrightarrow> P (Suc m)) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
203 |
\<longrightarrow> (\<forall>m. P m \<longrightarrow> Q (Suc m)) \<longrightarrow> Q n" |
32 | 204 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
205 |
text \<open> |
116
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
206 |
For proving the induction principles, we use exactly the same technique |
c9ff326e3ce5
more changes to the package chapter
Christian Urban <urbanc@in.tum.de>
parents:
115
diff
changeset
|
207 |
as in the transitive closure example, namely: |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
208 |
\<close> |
32 | 209 |
|
210 |
lemma even_induct: |
|
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
211 |
assumes "even n" |
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
212 |
shows "P 0 \<Longrightarrow> (\<And>m. Q m \<Longrightarrow> P (Suc m)) \<Longrightarrow> (\<And>m. P m \<Longrightarrow> Q (Suc m)) \<Longrightarrow> P n" |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
213 |
apply(atomize (full)) |
513 | 214 |
apply(cut_tac assms) |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
215 |
apply(unfold even_def) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
216 |
apply(drule spec[where x=P]) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
217 |
apply(drule spec[where x=Q]) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
218 |
apply(assumption) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
219 |
done |
32 | 220 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
221 |
text \<open> |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
222 |
The only difference with the proof \<open>trcl_induct\<close> is that we have to |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
223 |
instantiate here two universal quantifiers. We omit the other induction |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
224 |
principle that has @{prop "even n"} as premise and @{term "Q n"} as conclusion. |
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
225 |
The proofs of the introduction rules are also very similar to the ones in |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
226 |
the \<open>trcl\<close>-example. We only show the proof of the second introduction |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
227 |
rule. |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
228 |
\<close> |
32 | 229 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
230 |
lemma %linenos evenS: |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
231 |
shows "odd m \<Longrightarrow> even (Suc m)" |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
232 |
apply (unfold odd_def even_def) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
233 |
apply (rule allI impI)+ |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
234 |
proof - |
165
890fbfef6d6b
partially adapted to new antiquotation infrastructure
Christian Urban <urbanc@in.tum.de>
parents:
129
diff
changeset
|
235 |
case (goal1 P Q) |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
236 |
have p1: "\<forall>P Q. P 0 \<longrightarrow> (\<forall>m. Q m \<longrightarrow> P (Suc m)) |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
237 |
\<longrightarrow> (\<forall>m. P m \<longrightarrow> Q (Suc m)) \<longrightarrow> Q m" by fact |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
238 |
have r1: "P 0" by fact |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
239 |
have r2: "\<forall>m. Q m \<longrightarrow> P (Suc m)" by fact |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
240 |
have r3: "\<forall>m. P m \<longrightarrow> Q (Suc m)" by fact |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
241 |
show "P (Suc m)" |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
242 |
apply(rule r2[rule_format]) |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
243 |
apply(rule p1[THEN spec[where x=P], THEN spec[where x=Q], |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
244 |
THEN mp, THEN mp, THEN mp, OF r1, OF r2, OF r3]) |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
245 |
done |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
246 |
qed |
88
ebbd0dd008c8
adaptation of the package chapter to fit the rest
Christian Urban <urbanc@in.tum.de>
parents:
38
diff
changeset
|
247 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
248 |
text \<open> |
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
249 |
The interesting lines are 7 to 15. Again, the assumptions fall into two categories: |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
250 |
\<open>p1\<close> corresponds to the premise of the introduction rule; \<open>r1\<close> |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
251 |
to \<open>r3\<close> come from the definition of \<open>even\<close>. |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
252 |
In Line 13, we apply the assumption \<open>r2\<close> (since we prove the second |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
253 |
introduction rule). In Lines 14 and 15 we apply assumption \<open>p1\<close> (if |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
254 |
the second introduction rule had more premises we have to do that for all |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
255 |
of them). In order for this assumption to be applicable, the quantifiers |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
256 |
need to be instantiated and then also the implications need to be resolved |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
257 |
with the other rules. |
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
258 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
259 |
Next we define the accessible part of a relation \<open>R\<close> given by |
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
260 |
the single rule: |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
261 |
|
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
262 |
\begin{center}\small |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
263 |
\mbox{\inferrule{@{term "\<And>y. R y x \<Longrightarrow> accpart R y"}}{@{term "accpart R x"}}} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
264 |
\end{center} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
265 |
|
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
266 |
The interesting point of this definition is that it contains a quantification |
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
267 |
that ranges only over the premise and the premise has also a precondition. |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
268 |
The definition of \<open>accpart\<close> is: |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
269 |
\<close> |
32 | 270 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
271 |
definition "accpart \<equiv> \<lambda>R x. \<forall>P. (\<forall>x. (\<forall>y. R y x \<longrightarrow> P y) \<longrightarrow> P x) \<longrightarrow> P x" |
32 | 272 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
273 |
text \<open> |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
274 |
The proof of the induction principle is again straightforward and omitted. |
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
275 |
Proving the introduction rule is a little more complicated, because the |
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
276 |
quantifier and the implication in the premise. The proof is as follows. |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
277 |
\<close> |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
278 |
|
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
279 |
lemma %linenos accpartI: |
218
7ff7325e3b4e
started to adapt the rest of chapter 5 to the simplified version without parameters (they will be described in the extension section)
Christian Urban <urbanc@in.tum.de>
parents:
189
diff
changeset
|
280 |
shows "(\<And>y. R y x \<Longrightarrow> accpart R y) \<Longrightarrow> accpart R x" |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
281 |
apply (unfold accpart_def) |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
282 |
apply (rule allI impI)+ |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
283 |
proof - |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
284 |
case (goal1 P) |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
285 |
have p1: "\<And>y. R y x \<Longrightarrow> |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
286 |
(\<forall>P. (\<forall>x. (\<forall>y. R y x \<longrightarrow> P y) \<longrightarrow> P x) \<longrightarrow> P y)" by fact |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
287 |
have r1: "\<forall>x. (\<forall>y. R y x \<longrightarrow> P y) \<longrightarrow> P x" by fact |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
288 |
show "P x" |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
289 |
apply(rule r1[rule_format]) |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
290 |
proof - |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
291 |
case (goal1 y) |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
292 |
have r1_prem: "R y x" by fact |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
293 |
show "P y" |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
294 |
apply(rule p1[OF r1_prem, THEN spec[where x=P], THEN mp, OF r1]) |
115
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
295 |
done |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
296 |
qed |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
297 |
qed |
039845fc96bd
some update of the package introduction
Christian Urban <urbanc@in.tum.de>
parents:
114
diff
changeset
|
298 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
299 |
text \<open> |
295
24c68350d059
polished the package chapter used FOCUS to explain the subproofs
Christian Urban <urbanc@in.tum.de>
parents:
244
diff
changeset
|
300 |
As you can see, there are now two subproofs. The assumptions fall as usual into |
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
301 |
two categories (Lines 7 to 9). In Line 11, applying the assumption \<open>r1\<close> generates a goal state with the new local assumption @{term "R y x"}, |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
302 |
named \<open>r1_prem\<close> in the second subproof (Line 14). This local assumption is |
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
303 |
used to solve the goal @{term "P y"} with the help of assumption \<open>p1\<close>. |
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
304 |
|
124
0b9fa606a746
added to the first-steps section
Christian Urban <urbanc@in.tum.de>
parents:
120
diff
changeset
|
305 |
|
219
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
306 |
\begin{exercise} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
307 |
Give the definition for the freshness predicate for lambda-terms. The rules |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
308 |
for this predicate are: |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
309 |
|
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
310 |
\begin{center}\small |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
311 |
@{prop[mode=Rule] "a\<noteq>b \<Longrightarrow> fresh a (Var b)"}\hspace{5mm} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
312 |
@{prop[mode=Rule] "\<lbrakk>fresh a t; fresh a s\<rbrakk> \<Longrightarrow> fresh a (App t s)"}\\[2mm] |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
313 |
@{prop[mode=Axiom] "fresh a (Lam a t)"}\hspace{5mm} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
314 |
@{prop[mode=Rule] "\<lbrakk>a\<noteq>b; fresh a t\<rbrakk> \<Longrightarrow> fresh a (Lam b t)"} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
315 |
\end{center} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
316 |
|
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
317 |
From the definition derive the induction principle and the introduction |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
318 |
rules. |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
319 |
\end{exercise} |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
320 |
|
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
321 |
The point of all these examples is to get a feeling what the automatic |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
322 |
proofs should do in order to solve all inductive definitions we throw at |
98d43270024f
more work on the simple inductive chapter
Christian Urban <urbanc@in.tum.de>
parents:
218
diff
changeset
|
323 |
them. This is usually the first step in writing a package. We next explain |
129
e0d368a45537
started a section about simprocs
Christian Urban <urbanc@in.tum.de>
parents:
127
diff
changeset
|
324 |
the parsing and typing part of the package. |
127
74846cb0fff9
updated and added two tentative recipes
Christian Urban <urbanc@in.tum.de>
parents:
124
diff
changeset
|
325 |
|
565
cecd7a941885
isabelle update_cartouches -t
Norbert Schirmer <norbert.schirmer@web.de>
parents:
562
diff
changeset
|
326 |
\<close> |
129
e0d368a45537
started a section about simprocs
Christian Urban <urbanc@in.tum.de>
parents:
127
diff
changeset
|
327 |
(*<*)end(*>*) |