| author | wenzelm |
| Sat, 23 Apr 2005 19:50:15 +0200 | |
| changeset 15827 | 5fdf2d8dab9c |
| parent 15343 | 444bb25d3da0 |
| child 15950 | 5c067c956a20 |
| permissions | -rw-r--r-- |
|
15341
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
1 |
(* ID: $Id$ |
| 10213 | 2 |
Author: Tobias Nipkow |
3 |
Copyright 1992 University of Cambridge |
|
4 |
*) |
|
5 |
||
|
15341
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
6 |
header {*Well-founded Recursion*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
7 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
8 |
theory Wellfounded_Recursion |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
9 |
imports Transitive_Closure |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
10 |
begin |
| 10213 | 11 |
|
| 11328 | 12 |
consts |
13 |
wfrec_rel :: "('a * 'a) set => (('a => 'b) => 'a => 'b) => ('a * 'b) set"
|
|
14 |
||
15 |
inductive "wfrec_rel R F" |
|
|
15341
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
16 |
intros |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
17 |
wfrecI: "ALL z. (z, x) : R --> (z, g z) : wfrec_rel R F ==> |
| 11328 | 18 |
(x, F g x) : wfrec_rel R F" |
19 |
||
| 10213 | 20 |
constdefs |
21 |
wf :: "('a * 'a)set => bool"
|
|
22 |
"wf(r) == (!P. (!x. (!y. (y,x):r --> P(y)) --> P(x)) --> (!x. P(x)))" |
|
23 |
||
24 |
acyclic :: "('a*'a)set => bool"
|
|
25 |
"acyclic r == !x. (x,x) ~: r^+" |
|
26 |
||
27 |
cut :: "('a => 'b) => ('a * 'a)set => 'a => 'a => 'b"
|
|
28 |
"cut f r x == (%y. if (y,x):r then f y else arbitrary)" |
|
29 |
||
| 11328 | 30 |
adm_wf :: "('a * 'a) set => (('a => 'b) => 'a => 'b) => bool"
|
31 |
"adm_wf R F == ALL f g x. |
|
32 |
(ALL z. (z, x) : R --> f z = g z) --> F f x = F g x" |
|
| 10213 | 33 |
|
| 11328 | 34 |
wfrec :: "('a * 'a) set => (('a => 'b) => 'a => 'b) => 'a => 'b"
|
|
11451
8abfb4f7bd02
partial restructuring to reduce dependence on Axiom of Choice
paulson
parents:
11328
diff
changeset
|
35 |
"wfrec R F == %x. THE y. (x, y) : wfrec_rel R (%f x. F (cut f R x) x)" |
| 10213 | 36 |
|
|
15341
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
37 |
axclass wellorder \<subseteq> linorder |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
38 |
wf: "wf {(x,y::'a::ord). x<y}"
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
39 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
40 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
41 |
lemma wfUNIVI: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
42 |
"(!!P x. (ALL x. (ALL y. (y,x) : r --> P(y)) --> P(x)) ==> P(x)) ==> wf(r)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
43 |
by (unfold wf_def, blast) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
44 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
45 |
text{*Restriction to domain @{term A}.
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
46 |
If @{term r} is well-founded over @{term A} then @{term "wf r"}*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
47 |
lemma wfI: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
48 |
"[| r <= A <*> A; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
49 |
!!x P. [| ALL x. (ALL y. (y,x) : r --> P y) --> P x; x:A |] ==> P x |] |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
50 |
==> wf r" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
51 |
by (unfold wf_def, blast) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
52 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
53 |
lemma wf_induct: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
54 |
"[| wf(r); |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
55 |
!!x.[| ALL y. (y,x): r --> P(y) |] ==> P(x) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
56 |
|] ==> P(a)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
57 |
by (unfold wf_def, blast) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
58 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
59 |
lemma wf_not_sym [rule_format]: "wf(r) ==> ALL x. (a,x):r --> (x,a)~:r" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
60 |
by (erule_tac a=a in wf_induct, blast) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
61 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
62 |
(* [| wf r; ~Z ==> (a,x) : r; (x,a) ~: r ==> Z |] ==> Z *) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
63 |
lemmas wf_asym = wf_not_sym [elim_format] |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
64 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
65 |
lemma wf_not_refl [simp]: "wf(r) ==> (a,a) ~: r" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
66 |
by (blast elim: wf_asym) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
67 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
68 |
(* [| wf r; (a,a) ~: r ==> PROP W |] ==> PROP W *) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
69 |
lemmas wf_irrefl = wf_not_refl [elim_format] |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
70 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
71 |
text{*transitive closure of a well-founded relation is well-founded! *}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
72 |
lemma wf_trancl: "wf(r) ==> wf(r^+)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
73 |
apply (subst wf_def, clarify) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
74 |
apply (rule allE, assumption) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
75 |
--{*Retains the universal formula for later use!*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
76 |
apply (erule mp) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
77 |
apply (erule_tac a = x in wf_induct) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
78 |
apply (blast elim: tranclE) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
79 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
80 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
81 |
lemma wf_converse_trancl: "wf (r^-1) ==> wf ((r^+)^-1)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
82 |
apply (subst trancl_converse [symmetric]) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
83 |
apply (erule wf_trancl) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
84 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
85 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
86 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
87 |
subsubsection{*Minimal-element characterization of well-foundedness*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
88 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
89 |
lemma lemma1: "wf r ==> x:Q --> (EX z:Q. ALL y. (y,z):r --> y~:Q)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
90 |
apply (unfold wf_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
91 |
apply (drule spec) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
92 |
apply (erule mp [THEN spec], blast) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
93 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
94 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
95 |
lemma lemma2: "(ALL Q x. x:Q --> (EX z:Q. ALL y. (y,z):r --> y~:Q)) ==> wf r" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
96 |
apply (unfold wf_def, clarify) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
97 |
apply (drule_tac x = "{x. ~ P x}" in spec, blast)
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
98 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
99 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
100 |
lemma wf_eq_minimal: "wf r = (ALL Q x. x:Q --> (EX z:Q. ALL y. (y,z):r --> y~:Q))" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
101 |
by (blast intro!: lemma1 lemma2) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
102 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
103 |
subsubsection{*Other simple well-foundedness results*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
104 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
105 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
106 |
text{*Well-foundedness of subsets*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
107 |
lemma wf_subset: "[| wf(r); p<=r |] ==> wf(p)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
108 |
apply (simp (no_asm_use) add: wf_eq_minimal) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
109 |
apply fast |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
110 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
111 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
112 |
text{*Well-foundedness of the empty relation*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
113 |
lemma wf_empty [iff]: "wf({})"
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
114 |
by (simp add: wf_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
115 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
116 |
text{*Well-foundedness of insert*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
117 |
lemma wf_insert [iff]: "wf(insert (y,x) r) = (wf(r) & (x,y) ~: r^*)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
118 |
apply (rule iffI) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
119 |
apply (blast elim: wf_trancl [THEN wf_irrefl] |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
120 |
intro: rtrancl_into_trancl1 wf_subset |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
121 |
rtrancl_mono [THEN [2] rev_subsetD]) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
122 |
apply (simp add: wf_eq_minimal, safe) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
123 |
apply (rule allE, assumption, erule impE, blast) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
124 |
apply (erule bexE) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
125 |
apply (rename_tac "a", case_tac "a = x") |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
126 |
prefer 2 |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
127 |
apply blast |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
128 |
apply (case_tac "y:Q") |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
129 |
prefer 2 apply blast |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
130 |
apply (rule_tac x = "{z. z:Q & (z,y) : r^*}" in allE)
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
131 |
apply assumption |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
132 |
apply (erule_tac V = "ALL Q. (EX x. x : Q) --> ?P Q" in thin_rl) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
133 |
--{*essential for speed*}
|
| 15343 | 134 |
txt{*Blast with new substOccur fails*}
|
|
15341
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
135 |
apply (fast intro: converse_rtrancl_into_rtrancl) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
136 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
137 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
138 |
text{*Well-foundedness of image*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
139 |
lemma wf_prod_fun_image: "[| wf r; inj f |] ==> wf(prod_fun f f ` r)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
140 |
apply (simp only: wf_eq_minimal, clarify) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
141 |
apply (case_tac "EX p. f p : Q") |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
142 |
apply (erule_tac x = "{p. f p : Q}" in allE)
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
143 |
apply (fast dest: inj_onD, blast) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
144 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
145 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
146 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
147 |
subsubsection{*Well-Foundedness Results for Unions*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
148 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
149 |
text{*Well-foundedness of indexed union with disjoint domains and ranges*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
150 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
151 |
lemma wf_UN: "[| ALL i:I. wf(r i); |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
152 |
ALL i:I. ALL j:I. r i ~= r j --> Domain(r i) Int Range(r j) = {}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
153 |
|] ==> wf(UN i:I. r i)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
154 |
apply (simp only: wf_eq_minimal, clarify) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
155 |
apply (rename_tac A a, case_tac "EX i:I. EX a:A. EX b:A. (b,a) : r i") |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
156 |
prefer 2 |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
157 |
apply force |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
158 |
apply clarify |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
159 |
apply (drule bspec, assumption) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
160 |
apply (erule_tac x="{a. a:A & (EX b:A. (b,a) : r i) }" in allE)
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
161 |
apply (blast elim!: allE) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
162 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
163 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
164 |
lemma wf_Union: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
165 |
"[| ALL r:R. wf r; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
166 |
ALL r:R. ALL s:R. r ~= s --> Domain r Int Range s = {}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
167 |
|] ==> wf(Union R)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
168 |
apply (simp add: Union_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
169 |
apply (blast intro: wf_UN) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
170 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
171 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
172 |
(*Intuition: we find an (R u S)-min element of a nonempty subset A |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
173 |
by case distinction. |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
174 |
1. There is a step a -R-> b with a,b : A. |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
175 |
Pick an R-min element z of the (nonempty) set {a:A | EX b:A. a -R-> b}.
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
176 |
By definition, there is z':A s.t. z -R-> z'. Because z is R-min in the |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
177 |
subset, z' must be R-min in A. Because z' has an R-predecessor, it cannot |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
178 |
have an S-successor and is thus S-min in A as well. |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
179 |
2. There is no such step. |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
180 |
Pick an S-min element of A. In this case it must be an R-min |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
181 |
element of A as well. |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
182 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
183 |
*) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
184 |
lemma wf_Un: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
185 |
"[| wf r; wf s; Domain r Int Range s = {} |] ==> wf(r Un s)"
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
186 |
apply (simp only: wf_eq_minimal, clarify) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
187 |
apply (rename_tac A a) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
188 |
apply (case_tac "EX a:A. EX b:A. (b,a) : r") |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
189 |
prefer 2 |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
190 |
apply simp |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
191 |
apply (drule_tac x=A in spec)+ |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
192 |
apply blast |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
193 |
apply (erule_tac x="{a. a:A & (EX b:A. (b,a) : r) }" in allE)+
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
194 |
apply (blast elim!: allE) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
195 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
196 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
197 |
subsubsection {*acyclic*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
198 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
199 |
lemma acyclicI: "ALL x. (x, x) ~: r^+ ==> acyclic r" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
200 |
by (simp add: acyclic_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
201 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
202 |
lemma wf_acyclic: "wf r ==> acyclic r" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
203 |
apply (simp add: acyclic_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
204 |
apply (blast elim: wf_trancl [THEN wf_irrefl]) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
205 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
206 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
207 |
lemma acyclic_insert [iff]: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
208 |
"acyclic(insert (y,x) r) = (acyclic r & (x,y) ~: r^*)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
209 |
apply (simp add: acyclic_def trancl_insert) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
210 |
apply (blast intro: rtrancl_trans) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
211 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
212 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
213 |
lemma acyclic_converse [iff]: "acyclic(r^-1) = acyclic r" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
214 |
by (simp add: acyclic_def trancl_converse) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
215 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
216 |
lemma acyclic_impl_antisym_rtrancl: "acyclic r ==> antisym(r^*)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
217 |
apply (simp add: acyclic_def antisym_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
218 |
apply (blast elim: rtranclE intro: rtrancl_into_trancl1 rtrancl_trancl_trancl) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
219 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
220 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
221 |
(* Other direction: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
222 |
acyclic = no loops |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
223 |
antisym = only self loops |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
224 |
Goalw [acyclic_def,antisym_def] "antisym( r^* ) ==> acyclic(r - Id) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
225 |
==> antisym( r^* ) = acyclic(r - Id)"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
226 |
*) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
227 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
228 |
lemma acyclic_subset: "[| acyclic s; r <= s |] ==> acyclic r" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
229 |
apply (simp add: acyclic_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
230 |
apply (blast intro: trancl_mono) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
231 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
232 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
233 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
234 |
subsection{*Well-Founded Recursion*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
235 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
236 |
text{*cut*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
237 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
238 |
lemma cuts_eq: "(cut f r x = cut g r x) = (ALL y. (y,x):r --> f(y)=g(y))" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
239 |
by (simp add: expand_fun_eq cut_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
240 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
241 |
lemma cut_apply: "(x,a):r ==> (cut f r a)(x) = f(x)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
242 |
by (simp add: cut_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
243 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
244 |
text{*Inductive characterization of wfrec combinator; for details see:
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
245 |
John Harrison, "Inductive definitions: automation and application"*} |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
246 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
247 |
lemma wfrec_unique: "[| adm_wf R F; wf R |] ==> EX! y. (x, y) : wfrec_rel R F" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
248 |
apply (simp add: adm_wf_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
249 |
apply (erule_tac a=x in wf_induct) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
250 |
apply (rule ex1I) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
251 |
apply (rule_tac g = "%x. THE y. (x, y) : wfrec_rel R F" in wfrec_rel.wfrecI) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
252 |
apply (fast dest!: theI') |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
253 |
apply (erule wfrec_rel.cases, simp) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
254 |
apply (erule allE, erule allE, erule allE, erule mp) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
255 |
apply (fast intro: the_equality [symmetric]) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
256 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
257 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
258 |
lemma adm_lemma: "adm_wf R (%f x. F (cut f R x) x)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
259 |
apply (simp add: adm_wf_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
260 |
apply (intro strip) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
261 |
apply (rule cuts_eq [THEN iffD2, THEN subst], assumption) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
262 |
apply (rule refl) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
263 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
264 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
265 |
lemma wfrec: "wf(r) ==> wfrec r H a = H (cut (wfrec r H) r a) a" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
266 |
apply (simp add: wfrec_def) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
267 |
apply (rule adm_lemma [THEN wfrec_unique, THEN the1_equality], assumption) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
268 |
apply (rule wfrec_rel.wfrecI) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
269 |
apply (intro strip) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
270 |
apply (erule adm_lemma [THEN wfrec_unique, THEN theI']) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
271 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
272 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
273 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
274 |
text{** This form avoids giant explosions in proofs. NOTE USE OF ==*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
275 |
lemma def_wfrec: "[| f==wfrec r H; wf(r) |] ==> f(a) = H (cut f r a) a" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
276 |
apply auto |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
277 |
apply (blast intro: wfrec) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
278 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
279 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
280 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
281 |
subsection{*Variants for TFL: the Recdef Package*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
282 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
283 |
lemma tfl_wf_induct: "ALL R. wf R --> |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
284 |
(ALL P. (ALL x. (ALL y. (y,x):R --> P y) --> P x) --> (ALL x. P x))" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
285 |
apply clarify |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
286 |
apply (rule_tac r = R and P = P and a = x in wf_induct, assumption, blast) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
287 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
288 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
289 |
lemma tfl_cut_apply: "ALL f R. (x,a):R --> (cut f R a)(x) = f(x)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
290 |
apply clarify |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
291 |
apply (rule cut_apply, assumption) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
292 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
293 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
294 |
lemma tfl_wfrec: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
295 |
"ALL M R f. (f=wfrec R M) --> wf R --> (ALL x. f x = M (cut f R x) x)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
296 |
apply clarify |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
297 |
apply (erule wfrec) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
298 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
299 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
300 |
subsection {*LEAST and wellorderings*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
301 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
302 |
text{* See also @{text wf_linord_ex_has_least} and its consequences in
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
303 |
@{text Wellfounded_Relations.ML}*}
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
304 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
305 |
lemma wellorder_Least_lemma [rule_format]: |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
306 |
"P (k::'a::wellorder) --> P (LEAST x. P(x)) & (LEAST x. P(x)) <= k" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
307 |
apply (rule_tac a = k in wf [THEN wf_induct]) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
308 |
apply (rule impI) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
309 |
apply (rule classical) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
310 |
apply (rule_tac s = x in Least_equality [THEN ssubst], auto) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
311 |
apply (auto simp add: linorder_not_less [symmetric]) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
312 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
313 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
314 |
lemmas LeastI = wellorder_Least_lemma [THEN conjunct1, standard] |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
315 |
lemmas Least_le = wellorder_Least_lemma [THEN conjunct2, standard] |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
316 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
317 |
lemma not_less_Least: "[| k < (LEAST x. P x) |] ==> ~P (k::'a::wellorder)" |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
318 |
apply (simp (no_asm_use) add: linorder_not_le [symmetric]) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
319 |
apply (erule contrapos_nn) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
320 |
apply (erule Least_le) |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
321 |
done |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
322 |
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
323 |
ML |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
324 |
{*
|
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
325 |
val wf_def = thm "wf_def"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
326 |
val wfUNIVI = thm "wfUNIVI"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
327 |
val wfI = thm "wfI"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
328 |
val wf_induct = thm "wf_induct"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
329 |
val wf_not_sym = thm "wf_not_sym"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
330 |
val wf_asym = thm "wf_asym"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
331 |
val wf_not_refl = thm "wf_not_refl"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
332 |
val wf_irrefl = thm "wf_irrefl"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
333 |
val wf_trancl = thm "wf_trancl"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
334 |
val wf_converse_trancl = thm "wf_converse_trancl"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
335 |
val wf_eq_minimal = thm "wf_eq_minimal"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
336 |
val wf_subset = thm "wf_subset"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
337 |
val wf_empty = thm "wf_empty"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
338 |
val wf_insert = thm "wf_insert"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
339 |
val wf_UN = thm "wf_UN"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
340 |
val wf_Union = thm "wf_Union"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
341 |
val wf_Un = thm "wf_Un"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
342 |
val wf_prod_fun_image = thm "wf_prod_fun_image"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
343 |
val acyclicI = thm "acyclicI"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
344 |
val wf_acyclic = thm "wf_acyclic"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
345 |
val acyclic_insert = thm "acyclic_insert"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
346 |
val acyclic_converse = thm "acyclic_converse"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
347 |
val acyclic_impl_antisym_rtrancl = thm "acyclic_impl_antisym_rtrancl"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
348 |
val acyclic_subset = thm "acyclic_subset"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
349 |
val cuts_eq = thm "cuts_eq"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
350 |
val cut_apply = thm "cut_apply"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
351 |
val wfrec_unique = thm "wfrec_unique"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
352 |
val wfrec = thm "wfrec"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
353 |
val def_wfrec = thm "def_wfrec"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
354 |
val tfl_wf_induct = thm "tfl_wf_induct"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
355 |
val tfl_cut_apply = thm "tfl_cut_apply"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
356 |
val tfl_wfrec = thm "tfl_wfrec"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
357 |
val LeastI = thm "LeastI"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
358 |
val Least_le = thm "Least_le"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
359 |
val not_less_Least = thm "not_less_Least"; |
|
254f6f00b60e
converted to Isar script, simplifying some results
paulson
parents:
11451
diff
changeset
|
360 |
*} |
| 11137 | 361 |
|
| 10213 | 362 |
end |