| author | wenzelm | 
| Sun, 13 Mar 2011 19:27:39 +0100 | |
| changeset 41953 | 994d088fbfbc | 
| parent 41452 | c291e0826902 | 
| child 41959 | b460124855b8 | 
| permissions | -rw-r--r-- | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
1  | 
(* Title: Quotient.thy  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
2  | 
Author: Cezary Kaliszyk and Christian Urban  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
3  | 
*)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
4  | 
|
| 35294 | 5  | 
header {* Definition of Quotient Types *}
 | 
6  | 
||
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
7  | 
theory Quotient  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
8  | 
imports Plain Hilbert_Choice Equiv_Relations  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
9  | 
uses  | 
| 
37986
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
10  | 
  ("Tools/Quotient/quotient_info.ML")
 | 
| 
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
11  | 
  ("Tools/Quotient/quotient_typ.ML")
 | 
| 
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
12  | 
  ("Tools/Quotient/quotient_def.ML")
 | 
| 
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
13  | 
  ("Tools/Quotient/quotient_term.ML")
 | 
| 
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
14  | 
  ("Tools/Quotient/quotient_tacs.ML")
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
15  | 
begin  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
16  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
17  | 
text {*
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
18  | 
Basic definition for equivalence relations  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
19  | 
that are represented by predicates.  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
20  | 
*}  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
21  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
22  | 
text {* Composition of Relations *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
23  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
24  | 
abbreviation  | 
| 
40818
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
25  | 
  rel_conj :: "('a \<Rightarrow> 'b \<Rightarrow> bool) \<Rightarrow> ('b \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> 'b \<Rightarrow> bool" (infixr "OOO" 75)
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
26  | 
where  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
27  | 
"r1 OOO r2 \<equiv> r1 OO r2 OO r1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
28  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
29  | 
lemma eq_comp_r:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
30  | 
shows "((op =) OOO R) = R"  | 
| 
39302
 
d7728f65b353
renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
 
nipkow 
parents: 
39198 
diff
changeset
 | 
31  | 
by (auto simp add: fun_eq_iff)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
32  | 
|
| 35294 | 33  | 
subsection {* Respects predicate *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
34  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
35  | 
definition  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
36  | 
  Respects :: "('a \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> 'a set"
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
37  | 
where  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
38  | 
"Respects R x = R x x"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
39  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
40  | 
lemma in_respects:  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
41  | 
shows "x \<in> Respects R \<longleftrightarrow> R x x"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
42  | 
unfolding mem_def Respects_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
43  | 
by simp  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
44  | 
|
| 35294 | 45  | 
subsection {* Function map and function relation *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
46  | 
|
| 40602 | 47  | 
notation map_fun (infixr "--->" 55)  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
48  | 
|
| 40602 | 49  | 
lemma map_fun_id:  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
50  | 
"(id ---> id) = id"  | 
| 40602 | 51  | 
by (simp add: fun_eq_iff)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
52  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
53  | 
definition  | 
| 40615 | 54  | 
  fun_rel :: "('a \<Rightarrow> 'c \<Rightarrow> bool) \<Rightarrow> ('b \<Rightarrow> 'd \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> ('c \<Rightarrow> 'd) \<Rightarrow> bool" (infixr "===>" 55)
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
55  | 
where  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
56  | 
"fun_rel R1 R2 = (\<lambda>f g. \<forall>x y. R1 x y \<longrightarrow> R2 (f x) (g y))"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
57  | 
|
| 
36276
 
92011cc923f5
fun_rel introduction and list_rel elimination for quotient package
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36215 
diff
changeset
 | 
58  | 
lemma fun_relI [intro]:  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
59  | 
assumes "\<And>x y. R1 x y \<Longrightarrow> R2 (f x) (g y)"  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
60  | 
shows "(R1 ===> R2) f g"  | 
| 
36276
 
92011cc923f5
fun_rel introduction and list_rel elimination for quotient package
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36215 
diff
changeset
 | 
61  | 
using assms by (simp add: fun_rel_def)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
62  | 
|
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
63  | 
lemma fun_relE:  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
64  | 
assumes "(R1 ===> R2) f g" and "R1 x y"  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
65  | 
obtains "R2 (f x) (g y)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
66  | 
using assms by (simp add: fun_rel_def)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
67  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
68  | 
lemma fun_rel_eq:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
69  | 
shows "((op =) ===> (op =)) = (op =)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
70  | 
by (auto simp add: fun_eq_iff elim: fun_relE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
71  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
72  | 
|
| 35294 | 73  | 
subsection {* Quotient Predicate *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
74  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
75  | 
definition  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
76  | 
"Quotient R Abs Rep \<longleftrightarrow>  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
77  | 
(\<forall>a. Abs (Rep a) = a) \<and> (\<forall>a. R (Rep a) (Rep a)) \<and>  | 
| 
40818
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
78  | 
(\<forall>r s. R r s \<longleftrightarrow> R r r \<and> R s s \<and> Abs r = Abs s)"  | 
| 
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
79  | 
|
| 
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
80  | 
lemma QuotientI:  | 
| 
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
81  | 
assumes "\<And>a. Abs (Rep a) = a"  | 
| 
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
82  | 
and "\<And>a. R (Rep a) (Rep a)"  | 
| 
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
83  | 
and "\<And>r s. R r s \<longleftrightarrow> R r r \<and> R s s \<and> Abs r = Abs s"  | 
| 
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
84  | 
shows "Quotient R Abs Rep"  | 
| 
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
85  | 
using assms unfolding Quotient_def by blast  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
86  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
87  | 
lemma Quotient_abs_rep:  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
88  | 
assumes a: "Quotient R Abs Rep"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
89  | 
shows "Abs (Rep a) = a"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
90  | 
using a  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
91  | 
unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
92  | 
by simp  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
93  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
94  | 
lemma Quotient_rep_reflp:  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
95  | 
assumes a: "Quotient R Abs Rep"  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
96  | 
shows "R (Rep a) (Rep a)"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
97  | 
using a  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
98  | 
unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
99  | 
by blast  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
100  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
101  | 
lemma Quotient_rel:  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
102  | 
assumes a: "Quotient R Abs Rep"  | 
| 
40818
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
103  | 
  shows "R r r \<and> R s s \<and> Abs r = Abs s \<longleftrightarrow> R r s" -- {* orientation does not loop on rewriting *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
104  | 
using a  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
105  | 
unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
106  | 
by blast  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
107  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
108  | 
lemma Quotient_rel_rep:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
109  | 
assumes a: "Quotient R Abs Rep"  | 
| 
40818
 
b117df72e56b
reorienting iff in Quotient_rel prevents simplifier looping;
 
haftmann 
parents: 
40814 
diff
changeset
 | 
110  | 
shows "R (Rep a) (Rep b) \<longleftrightarrow> a = b"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
111  | 
using a  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
112  | 
unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
113  | 
by metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
114  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
115  | 
lemma Quotient_rep_abs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
116  | 
assumes a: "Quotient R Abs Rep"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
117  | 
shows "R r r \<Longrightarrow> R (Rep (Abs r)) r"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
118  | 
using a unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
119  | 
by blast  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
120  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
121  | 
lemma Quotient_rel_abs:  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
122  | 
assumes a: "Quotient R Abs Rep"  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
123  | 
shows "R r s \<Longrightarrow> Abs r = Abs s"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
124  | 
using a unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
125  | 
by blast  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
126  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
127  | 
lemma Quotient_symp:  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
128  | 
assumes a: "Quotient R Abs Rep"  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
129  | 
shows "symp R"  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
130  | 
using a unfolding Quotient_def using sympI by metis  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
131  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
132  | 
lemma Quotient_transp:  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
133  | 
assumes a: "Quotient R Abs Rep"  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
134  | 
shows "transp R"  | 
| 
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
135  | 
using a unfolding Quotient_def using transpI by metis  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
136  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
137  | 
lemma identity_quotient:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
138  | 
shows "Quotient (op =) id id"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
139  | 
unfolding Quotient_def id_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
140  | 
by blast  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
141  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
142  | 
lemma fun_quotient:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
143  | 
assumes q1: "Quotient R1 abs1 rep1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
144  | 
and q2: "Quotient R2 abs2 rep2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
145  | 
shows "Quotient (R1 ===> R2) (rep1 ---> abs2) (abs1 ---> rep2)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
146  | 
proof -  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
147  | 
have "\<And>a. (rep1 ---> abs2) ((abs1 ---> rep2) a) = a"  | 
| 
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
148  | 
using q1 q2 by (simp add: Quotient_def fun_eq_iff)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
149  | 
moreover  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
150  | 
have "\<And>a. (R1 ===> R2) ((abs1 ---> rep2) a) ((abs1 ---> rep2) a)"  | 
| 
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
151  | 
by (rule fun_relI)  | 
| 
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
152  | 
(insert q1 q2 Quotient_rel_abs [of R1 abs1 rep1] Quotient_rel_rep [of R2 abs2 rep2],  | 
| 
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
153  | 
simp (no_asm) add: Quotient_def, simp)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
154  | 
moreover  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
155  | 
have "\<And>r s. (R1 ===> R2) r s = ((R1 ===> R2) r r \<and> (R1 ===> R2) s s \<and>  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
156  | 
(rep1 ---> abs2) r = (rep1 ---> abs2) s)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
157  | 
apply(auto simp add: fun_rel_def fun_eq_iff)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
158  | 
using q1 q2 unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
159  | 
apply(metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
160  | 
using q1 q2 unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
161  | 
apply(metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
162  | 
using q1 q2 unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
163  | 
apply(metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
164  | 
using q1 q2 unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
165  | 
apply(metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
166  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
167  | 
ultimately  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
168  | 
show "Quotient (R1 ===> R2) (rep1 ---> abs2) (abs1 ---> rep2)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
169  | 
unfolding Quotient_def by blast  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
170  | 
qed  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
171  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
172  | 
lemma abs_o_rep:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
173  | 
assumes a: "Quotient R Abs Rep"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
174  | 
shows "Abs o Rep = id"  | 
| 
39302
 
d7728f65b353
renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
 
nipkow 
parents: 
39198 
diff
changeset
 | 
175  | 
unfolding fun_eq_iff  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
176  | 
by (simp add: Quotient_abs_rep[OF a])  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
177  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
178  | 
lemma equals_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
179  | 
assumes q: "Quotient R Abs Rep"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
180  | 
and a: "R xa xb" "R ya yb"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
181  | 
shows "R xa ya = R xb yb"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
182  | 
using a Quotient_symp[OF q] Quotient_transp[OF q]  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
183  | 
by (blast elim: sympE transpE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
184  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
185  | 
lemma lambda_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
186  | 
assumes q1: "Quotient R1 Abs1 Rep1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
187  | 
and q2: "Quotient R2 Abs2 Rep2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
188  | 
shows "(Rep1 ---> Abs2) (\<lambda>x. Rep2 (f (Abs1 x))) = (\<lambda>x. f x)"  | 
| 
39302
 
d7728f65b353
renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
 
nipkow 
parents: 
39198 
diff
changeset
 | 
189  | 
unfolding fun_eq_iff  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
190  | 
using Quotient_abs_rep[OF q1] Quotient_abs_rep[OF q2]  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
191  | 
by simp  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
192  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
193  | 
lemma lambda_prs1:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
194  | 
assumes q1: "Quotient R1 Abs1 Rep1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
195  | 
and q2: "Quotient R2 Abs2 Rep2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
196  | 
shows "(Rep1 ---> Abs2) (\<lambda>x. (Abs1 ---> Rep2) f x) = (\<lambda>x. f x)"  | 
| 
39302
 
d7728f65b353
renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
 
nipkow 
parents: 
39198 
diff
changeset
 | 
197  | 
unfolding fun_eq_iff  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
198  | 
using Quotient_abs_rep[OF q1] Quotient_abs_rep[OF q2]  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
199  | 
by simp  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
200  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
201  | 
lemma rep_abs_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
202  | 
assumes q: "Quotient R Abs Rep"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
203  | 
and a: "R x1 x2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
204  | 
shows "R x1 (Rep (Abs x2))"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
205  | 
using a Quotient_rel[OF q] Quotient_abs_rep[OF q] Quotient_rep_reflp[OF q]  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
206  | 
by metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
207  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
208  | 
lemma rep_abs_rsp_left:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
209  | 
assumes q: "Quotient R Abs Rep"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
210  | 
and a: "R x1 x2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
211  | 
shows "R (Rep (Abs x1)) x2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
212  | 
using a Quotient_rel[OF q] Quotient_abs_rep[OF q] Quotient_rep_reflp[OF q]  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
213  | 
by metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
214  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
215  | 
text{*
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
216  | 
In the following theorem R1 can be instantiated with anything,  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
217  | 
but we know some of the types of the Rep and Abs functions;  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
218  | 
so by solving Quotient assumptions we can get a unique R1 that  | 
| 
35236
 
fd8231b16203
quote the constant and theorem name with @{text}
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
35222 
diff
changeset
 | 
219  | 
  will be provable; which is why we need to use @{text apply_rsp} and
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
220  | 
not the primed version *}  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
221  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
222  | 
lemma apply_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
223  | 
fixes f g::"'a \<Rightarrow> 'c"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
224  | 
assumes q: "Quotient R1 Abs1 Rep1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
225  | 
and a: "(R1 ===> R2) f g" "R1 x y"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
226  | 
shows "R2 (f x) (g y)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
227  | 
using a by (auto elim: fun_relE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
228  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
229  | 
lemma apply_rsp':  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
230  | 
assumes a: "(R1 ===> R2) f g" "R1 x y"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
231  | 
shows "R2 (f x) (g y)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
232  | 
using a by (auto elim: fun_relE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
233  | 
|
| 35294 | 234  | 
subsection {* lemmas for regularisation of ball and bex *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
235  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
236  | 
lemma ball_reg_eqv:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
237  | 
fixes P :: "'a \<Rightarrow> bool"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
238  | 
assumes a: "equivp R"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
239  | 
shows "Ball (Respects R) P = (All P)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
240  | 
using a  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
241  | 
unfolding equivp_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
242  | 
by (auto simp add: in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
243  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
244  | 
lemma bex_reg_eqv:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
245  | 
fixes P :: "'a \<Rightarrow> bool"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
246  | 
assumes a: "equivp R"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
247  | 
shows "Bex (Respects R) P = (Ex P)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
248  | 
using a  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
249  | 
unfolding equivp_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
250  | 
by (auto simp add: in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
251  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
252  | 
lemma ball_reg_right:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
253  | 
assumes a: "\<And>x. R x \<Longrightarrow> P x \<longrightarrow> Q x"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
254  | 
shows "All P \<longrightarrow> Ball R Q"  | 
| 39956 | 255  | 
using a by (metis Collect_def Collect_mem_eq)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
256  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
257  | 
lemma bex_reg_left:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
258  | 
assumes a: "\<And>x. R x \<Longrightarrow> Q x \<longrightarrow> P x"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
259  | 
shows "Bex R Q \<longrightarrow> Ex P"  | 
| 39956 | 260  | 
using a by (metis Collect_def Collect_mem_eq)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
261  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
262  | 
lemma ball_reg_left:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
263  | 
assumes a: "equivp R"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
264  | 
shows "(\<And>x. (Q x \<longrightarrow> P x)) \<Longrightarrow> Ball (Respects R) Q \<longrightarrow> All P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
265  | 
using a by (metis equivp_reflp in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
266  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
267  | 
lemma bex_reg_right:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
268  | 
assumes a: "equivp R"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
269  | 
shows "(\<And>x. (Q x \<longrightarrow> P x)) \<Longrightarrow> Ex Q \<longrightarrow> Bex (Respects R) P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
270  | 
using a by (metis equivp_reflp in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
271  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
272  | 
lemma ball_reg_eqv_range:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
273  | 
fixes P::"'a \<Rightarrow> bool"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
274  | 
and x::"'a"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
275  | 
assumes a: "equivp R2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
276  | 
shows "(Ball (Respects (R1 ===> R2)) (\<lambda>f. P (f x)) = All (\<lambda>f. P (f x)))"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
277  | 
apply(rule iffI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
278  | 
apply(rule allI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
279  | 
apply(drule_tac x="\<lambda>y. f x" in bspec)  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
280  | 
apply(simp add: in_respects fun_rel_def)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
281  | 
apply(rule impI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
282  | 
using a equivp_reflp_symp_transp[of "R2"]  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
283  | 
apply (auto elim: equivpE reflpE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
284  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
285  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
286  | 
lemma bex_reg_eqv_range:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
287  | 
assumes a: "equivp R2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
288  | 
shows "(Bex (Respects (R1 ===> R2)) (\<lambda>f. P (f x)) = Ex (\<lambda>f. P (f x)))"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
289  | 
apply(auto)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
290  | 
apply(rule_tac x="\<lambda>y. f x" in bexI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
291  | 
apply(simp)  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
292  | 
apply(simp add: Respects_def in_respects fun_rel_def)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
293  | 
apply(rule impI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
294  | 
using a equivp_reflp_symp_transp[of "R2"]  | 
| 
40814
 
fa64f6278568
moved generic definitions about (partial) equivalence relations from Quotient to Equiv_Relations;
 
haftmann 
parents: 
40615 
diff
changeset
 | 
295  | 
apply (auto elim: equivpE reflpE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
296  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
297  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
298  | 
(* Next four lemmas are unused *)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
299  | 
lemma all_reg:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
300  | 
assumes a: "!x :: 'a. (P x --> Q x)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
301  | 
and b: "All P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
302  | 
shows "All Q"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
303  | 
using a b by (metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
304  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
305  | 
lemma ex_reg:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
306  | 
assumes a: "!x :: 'a. (P x --> Q x)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
307  | 
and b: "Ex P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
308  | 
shows "Ex Q"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
309  | 
using a b by metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
310  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
311  | 
lemma ball_reg:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
312  | 
assumes a: "!x :: 'a. (R x --> P x --> Q x)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
313  | 
and b: "Ball R P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
314  | 
shows "Ball R Q"  | 
| 39956 | 315  | 
using a b by (metis Collect_def Collect_mem_eq)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
316  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
317  | 
lemma bex_reg:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
318  | 
assumes a: "!x :: 'a. (R x --> P x --> Q x)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
319  | 
and b: "Bex R P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
320  | 
shows "Bex R Q"  | 
| 39956 | 321  | 
using a b by (metis Collect_def Collect_mem_eq)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
322  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
323  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
324  | 
lemma ball_all_comm:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
325  | 
assumes "\<And>y. (\<forall>x\<in>P. A x y) \<longrightarrow> (\<forall>x. B x y)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
326  | 
shows "(\<forall>x\<in>P. \<forall>y. A x y) \<longrightarrow> (\<forall>x. \<forall>y. B x y)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
327  | 
using assms by auto  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
328  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
329  | 
lemma bex_ex_comm:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
330  | 
assumes "(\<exists>y. \<exists>x. A x y) \<longrightarrow> (\<exists>y. \<exists>x\<in>P. B x y)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
331  | 
shows "(\<exists>x. \<exists>y. A x y) \<longrightarrow> (\<exists>x\<in>P. \<exists>y. B x y)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
332  | 
using assms by auto  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
333  | 
|
| 35294 | 334  | 
subsection {* Bounded abstraction *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
335  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
336  | 
definition  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
337  | 
  Babs :: "'a set \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b"
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
338  | 
where  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
339  | 
"x \<in> p \<Longrightarrow> Babs p m x = m x"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
340  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
341  | 
lemma babs_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
342  | 
assumes q: "Quotient R1 Abs1 Rep1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
343  | 
and a: "(R1 ===> R2) f g"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
344  | 
shows "(R1 ===> R2) (Babs (Respects R1) f) (Babs (Respects R1) g)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
345  | 
apply (auto simp add: Babs_def in_respects fun_rel_def)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
346  | 
apply (subgoal_tac "x \<in> Respects R1 \<and> y \<in> Respects R1")  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
347  | 
using a apply (simp add: Babs_def fun_rel_def)  | 
| 
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
348  | 
apply (simp add: in_respects fun_rel_def)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
349  | 
using Quotient_rel[OF q]  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
350  | 
by metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
351  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
352  | 
lemma babs_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
353  | 
assumes q1: "Quotient R1 Abs1 Rep1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
354  | 
and q2: "Quotient R2 Abs2 Rep2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
355  | 
shows "((Rep1 ---> Abs2) (Babs (Respects R1) ((Abs1 ---> Rep2) f))) = f"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
356  | 
apply (rule ext)  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
357  | 
apply (simp add:)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
358  | 
apply (subgoal_tac "Rep1 x \<in> Respects R1")  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
359  | 
apply (simp add: Babs_def Quotient_abs_rep[OF q1] Quotient_abs_rep[OF q2])  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
360  | 
apply (simp add: in_respects Quotient_rel_rep[OF q1])  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
361  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
362  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
363  | 
lemma babs_simp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
364  | 
assumes q: "Quotient R1 Abs Rep"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
365  | 
shows "((R1 ===> R2) (Babs (Respects R1) f) (Babs (Respects R1) g)) = ((R1 ===> R2) f g)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
366  | 
apply(rule iffI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
367  | 
apply(simp_all only: babs_rsp[OF q])  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
368  | 
apply(auto simp add: Babs_def fun_rel_def)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
369  | 
apply (subgoal_tac "x \<in> Respects R1 \<and> y \<in> Respects R1")  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
370  | 
apply(metis Babs_def)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
371  | 
apply (simp add: in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
372  | 
using Quotient_rel[OF q]  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
373  | 
by metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
374  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
375  | 
(* If a user proves that a particular functional relation  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
376  | 
is an equivalence this may be useful in regularising *)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
377  | 
lemma babs_reg_eqv:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
378  | 
shows "equivp R \<Longrightarrow> Babs (Respects R) P = P"  | 
| 
39302
 
d7728f65b353
renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
 
nipkow 
parents: 
39198 
diff
changeset
 | 
379  | 
by (simp add: fun_eq_iff Babs_def in_respects equivp_reflp)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
380  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
381  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
382  | 
(* 3 lemmas needed for proving repabs_inj *)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
383  | 
lemma ball_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
384  | 
assumes a: "(R ===> (op =)) f g"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
385  | 
shows "Ball (Respects R) f = Ball (Respects R) g"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
386  | 
using a by (auto simp add: Ball_def in_respects elim: fun_relE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
387  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
388  | 
lemma bex_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
389  | 
assumes a: "(R ===> (op =)) f g"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
390  | 
shows "(Bex (Respects R) f = Bex (Respects R) g)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
391  | 
using a by (auto simp add: Bex_def in_respects elim: fun_relE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
392  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
393  | 
lemma bex1_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
394  | 
assumes a: "(R ===> (op =)) f g"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
395  | 
shows "Ex1 (\<lambda>x. x \<in> Respects R \<and> f x) = Ex1 (\<lambda>x. x \<in> Respects R \<and> g x)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
396  | 
using a by (auto elim: fun_relE simp add: Ex1_def in_respects)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
397  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
398  | 
(* 2 lemmas needed for cleaning of quantifiers *)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
399  | 
lemma all_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
400  | 
assumes a: "Quotient R absf repf"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
401  | 
shows "Ball (Respects R) ((absf ---> id) f) = All f"  | 
| 40602 | 402  | 
using a unfolding Quotient_def Ball_def in_respects id_apply comp_def map_fun_def  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
403  | 
by metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
404  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
405  | 
lemma ex_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
406  | 
assumes a: "Quotient R absf repf"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
407  | 
shows "Bex (Respects R) ((absf ---> id) f) = Ex f"  | 
| 40602 | 408  | 
using a unfolding Quotient_def Bex_def in_respects id_apply comp_def map_fun_def  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
409  | 
by metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
410  | 
|
| 35294 | 411  | 
subsection {* @{text Bex1_rel} quantifier *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
412  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
413  | 
definition  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
414  | 
  Bex1_rel :: "('a \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool"
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
415  | 
where  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
416  | 
"Bex1_rel R P \<longleftrightarrow> (\<exists>x \<in> Respects R. P x) \<and> (\<forall>x \<in> Respects R. \<forall>y \<in> Respects R. ((P x \<and> P y) \<longrightarrow> (R x y)))"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
417  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
418  | 
lemma bex1_rel_aux:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
419  | 
"\<lbrakk>\<forall>xa ya. R xa ya \<longrightarrow> x xa = y ya; Bex1_rel R x\<rbrakk> \<Longrightarrow> Bex1_rel R y"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
420  | 
unfolding Bex1_rel_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
421  | 
apply (erule conjE)+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
422  | 
apply (erule bexE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
423  | 
apply rule  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
424  | 
apply (rule_tac x="xa" in bexI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
425  | 
apply metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
426  | 
apply metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
427  | 
apply rule+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
428  | 
apply (erule_tac x="xaa" in ballE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
429  | 
prefer 2  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
430  | 
apply (metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
431  | 
apply (erule_tac x="ya" in ballE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
432  | 
prefer 2  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
433  | 
apply (metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
434  | 
apply (metis in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
435  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
436  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
437  | 
lemma bex1_rel_aux2:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
438  | 
"\<lbrakk>\<forall>xa ya. R xa ya \<longrightarrow> x xa = y ya; Bex1_rel R y\<rbrakk> \<Longrightarrow> Bex1_rel R x"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
439  | 
unfolding Bex1_rel_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
440  | 
apply (erule conjE)+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
441  | 
apply (erule bexE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
442  | 
apply rule  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
443  | 
apply (rule_tac x="xa" in bexI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
444  | 
apply metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
445  | 
apply metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
446  | 
apply rule+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
447  | 
apply (erule_tac x="xaa" in ballE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
448  | 
prefer 2  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
449  | 
apply (metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
450  | 
apply (erule_tac x="ya" in ballE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
451  | 
prefer 2  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
452  | 
apply (metis)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
453  | 
apply (metis in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
454  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
455  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
456  | 
lemma bex1_rel_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
457  | 
assumes a: "Quotient R absf repf"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
458  | 
shows "((R ===> op =) ===> op =) (Bex1_rel R) (Bex1_rel R)"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
459  | 
apply (simp add: fun_rel_def)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
460  | 
apply clarify  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
461  | 
apply rule  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
462  | 
apply (simp_all add: bex1_rel_aux bex1_rel_aux2)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
463  | 
apply (erule bex1_rel_aux2)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
464  | 
apply assumption  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
465  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
466  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
467  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
468  | 
lemma ex1_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
469  | 
assumes a: "Quotient R absf repf"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
470  | 
shows "((absf ---> id) ---> id) (Bex1_rel R) f = Ex1 f"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
471  | 
apply (simp add:)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
472  | 
apply (subst Bex1_rel_def)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
473  | 
apply (subst Bex_def)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
474  | 
apply (subst Ex1_def)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
475  | 
apply simp  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
476  | 
apply rule  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
477  | 
apply (erule conjE)+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
478  | 
apply (erule_tac exE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
479  | 
apply (erule conjE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
480  | 
apply (subgoal_tac "\<forall>y. R y y \<longrightarrow> f (absf y) \<longrightarrow> R x y")  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
481  | 
apply (rule_tac x="absf x" in exI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
482  | 
apply (simp)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
483  | 
apply rule+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
484  | 
using a unfolding Quotient_def  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
485  | 
apply metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
486  | 
apply rule+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
487  | 
apply (erule_tac x="x" in ballE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
488  | 
apply (erule_tac x="y" in ballE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
489  | 
apply simp  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
490  | 
apply (simp add: in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
491  | 
apply (simp add: in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
492  | 
apply (erule_tac exE)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
493  | 
apply rule  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
494  | 
apply (rule_tac x="repf x" in exI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
495  | 
apply (simp only: in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
496  | 
apply rule  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
497  | 
apply (metis Quotient_rel_rep[OF a])  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
498  | 
using a unfolding Quotient_def apply (simp)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
499  | 
apply rule+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
500  | 
using a unfolding Quotient_def in_respects  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
501  | 
apply metis  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
502  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
503  | 
|
| 
38702
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
504  | 
lemma bex1_bexeq_reg:  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
505  | 
shows "(\<exists>!x\<in>Respects R. P x) \<longrightarrow> (Bex1_rel R (\<lambda>x. P x))"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
506  | 
apply (simp add: Ex1_def Bex1_rel_def in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
507  | 
apply clarify  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
508  | 
apply auto  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
509  | 
apply (rule bexI)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
510  | 
apply assumption  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
511  | 
apply (simp add: in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
512  | 
apply (simp add: in_respects)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
513  | 
apply auto  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
514  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
515  | 
|
| 
38702
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
516  | 
lemma bex1_bexeq_reg_eqv:  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
517  | 
assumes a: "equivp R"  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
518  | 
shows "(\<exists>!x. P x) \<longrightarrow> Bex1_rel R P"  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
519  | 
using equivp_reflp[OF a]  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
520  | 
apply (intro impI)  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
521  | 
apply (elim ex1E)  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
522  | 
apply (rule mp[OF bex1_bexeq_reg])  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
523  | 
apply (rule_tac a="x" in ex1I)  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
524  | 
apply (subst in_respects)  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
525  | 
apply (rule conjI)  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
526  | 
apply assumption  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
527  | 
apply assumption  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
528  | 
apply clarify  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
529  | 
apply (erule_tac x="xa" in allE)  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
530  | 
apply simp  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
531  | 
done  | 
| 
 
72fd257f4343
Quotient Package / lemma for regularization of bex1_rel for equivalence relations
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38317 
diff
changeset
 | 
532  | 
|
| 35294 | 533  | 
subsection {* Various respects and preserve lemmas *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
534  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
535  | 
lemma quot_rel_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
536  | 
assumes a: "Quotient R Abs Rep"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
537  | 
shows "(R ===> R ===> op =) R R"  | 
| 
38317
 
cb8e2ac6397b
deleted duplicate lemma
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37986 
diff
changeset
 | 
538  | 
apply(rule fun_relI)+  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
539  | 
apply(rule equals_rsp[OF a])  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
540  | 
apply(assumption)+  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
541  | 
done  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
542  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
543  | 
lemma o_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
544  | 
assumes q1: "Quotient R1 Abs1 Rep1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
545  | 
and q2: "Quotient R2 Abs2 Rep2"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
546  | 
and q3: "Quotient R3 Abs3 Rep3"  | 
| 
36215
 
88ff48884d26
respectfullness and preservation of function composition
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36123 
diff
changeset
 | 
547  | 
shows "((Abs2 ---> Rep3) ---> (Abs1 ---> Rep2) ---> (Rep1 ---> Abs3)) op \<circ> = op \<circ>"  | 
| 
 
88ff48884d26
respectfullness and preservation of function composition
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36123 
diff
changeset
 | 
548  | 
and "(id ---> (Abs1 ---> id) ---> Rep1 ---> id) op \<circ> = op \<circ>"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
549  | 
using Quotient_abs_rep[OF q1] Quotient_abs_rep[OF q2] Quotient_abs_rep[OF q3]  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
550  | 
by (simp_all add: fun_eq_iff)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
551  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
552  | 
lemma o_rsp:  | 
| 
36215
 
88ff48884d26
respectfullness and preservation of function composition
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36123 
diff
changeset
 | 
553  | 
"((R2 ===> R3) ===> (R1 ===> R2) ===> (R1 ===> R3)) op \<circ> op \<circ>"  | 
| 
 
88ff48884d26
respectfullness and preservation of function composition
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36123 
diff
changeset
 | 
554  | 
"(op = ===> (R1 ===> op =) ===> R1 ===> op =) op \<circ> op \<circ>"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
555  | 
by (auto intro!: fun_relI elim: fun_relE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
556  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
557  | 
lemma cond_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
558  | 
assumes a: "Quotient R absf repf"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
559  | 
shows "absf (if a then repf b else repf c) = (if a then b else c)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
560  | 
using a unfolding Quotient_def by auto  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
561  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
562  | 
lemma if_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
563  | 
assumes q: "Quotient R Abs Rep"  | 
| 
36123
 
7f877bbad5b2
add If respectfullness and preservation to Quotient package database
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36116 
diff
changeset
 | 
564  | 
shows "(id ---> Rep ---> Rep ---> Abs) If = If"  | 
| 
 
7f877bbad5b2
add If respectfullness and preservation to Quotient package database
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36116 
diff
changeset
 | 
565  | 
using Quotient_abs_rep[OF q]  | 
| 
39302
 
d7728f65b353
renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
 
nipkow 
parents: 
39198 
diff
changeset
 | 
566  | 
by (auto simp add: fun_eq_iff)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
567  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
568  | 
lemma if_rsp:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
569  | 
assumes q: "Quotient R Abs Rep"  | 
| 
36123
 
7f877bbad5b2
add If respectfullness and preservation to Quotient package database
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36116 
diff
changeset
 | 
570  | 
shows "(op = ===> R ===> R ===> R) If If"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
571  | 
by (auto intro!: fun_relI)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
572  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
573  | 
lemma let_prs:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
574  | 
assumes q1: "Quotient R1 Abs1 Rep1"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
575  | 
and q2: "Quotient R2 Abs2 Rep2"  | 
| 
37049
 
ca1c293e521e
Let rsp and prs in fun_rel/fun_map format
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36276 
diff
changeset
 | 
576  | 
shows "(Rep2 ---> (Abs2 ---> Rep1) ---> Abs1) Let = Let"  | 
| 
 
ca1c293e521e
Let rsp and prs in fun_rel/fun_map format
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36276 
diff
changeset
 | 
577  | 
using Quotient_abs_rep[OF q1] Quotient_abs_rep[OF q2]  | 
| 
39302
 
d7728f65b353
renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
 
nipkow 
parents: 
39198 
diff
changeset
 | 
578  | 
by (auto simp add: fun_eq_iff)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
579  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
580  | 
lemma let_rsp:  | 
| 
37049
 
ca1c293e521e
Let rsp and prs in fun_rel/fun_map format
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
36276 
diff
changeset
 | 
581  | 
shows "(R1 ===> (R1 ===> R2) ===> R2) Let Let"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
582  | 
by (auto intro!: fun_relI elim: fun_relE)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
583  | 
|
| 
38861
 
27c7b620758c
Quotient Package: added respectfulness and preservation lemmas for mem.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38859 
diff
changeset
 | 
584  | 
lemma mem_rsp:  | 
| 
 
27c7b620758c
Quotient Package: added respectfulness and preservation lemmas for mem.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38859 
diff
changeset
 | 
585  | 
shows "(R1 ===> (R1 ===> R2) ===> R2) op \<in> op \<in>"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
586  | 
by (auto intro!: fun_relI elim: fun_relE simp add: mem_def)  | 
| 
38861
 
27c7b620758c
Quotient Package: added respectfulness and preservation lemmas for mem.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38859 
diff
changeset
 | 
587  | 
|
| 
 
27c7b620758c
Quotient Package: added respectfulness and preservation lemmas for mem.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38859 
diff
changeset
 | 
588  | 
lemma mem_prs:  | 
| 
 
27c7b620758c
Quotient Package: added respectfulness and preservation lemmas for mem.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38859 
diff
changeset
 | 
589  | 
assumes a1: "Quotient R1 Abs1 Rep1"  | 
| 
 
27c7b620758c
Quotient Package: added respectfulness and preservation lemmas for mem.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38859 
diff
changeset
 | 
590  | 
and a2: "Quotient R2 Abs2 Rep2"  | 
| 
 
27c7b620758c
Quotient Package: added respectfulness and preservation lemmas for mem.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38859 
diff
changeset
 | 
591  | 
shows "(Rep1 ---> (Abs1 ---> Rep2) ---> Abs2) op \<in> = op \<in>"  | 
| 
39302
 
d7728f65b353
renamed lemmas: ext_iff -> fun_eq_iff, set_ext_iff -> set_eq_iff, set_ext -> set_eqI
 
nipkow 
parents: 
39198 
diff
changeset
 | 
592  | 
by (simp add: fun_eq_iff mem_def Quotient_abs_rep[OF a1] Quotient_abs_rep[OF a2])  | 
| 
38861
 
27c7b620758c
Quotient Package: added respectfulness and preservation lemmas for mem.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
38859 
diff
changeset
 | 
593  | 
|
| 
39669
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
594  | 
lemma id_rsp:  | 
| 
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
595  | 
shows "(R ===> R) id id"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
596  | 
by (auto intro: fun_relI)  | 
| 
39669
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
597  | 
|
| 
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
598  | 
lemma id_prs:  | 
| 
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
599  | 
assumes a: "Quotient R Abs Rep"  | 
| 
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
600  | 
shows "(Rep ---> Abs) id = id"  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
601  | 
by (simp add: fun_eq_iff Quotient_abs_rep [OF a])  | 
| 
39669
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
602  | 
|
| 
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
603  | 
|
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
604  | 
locale quot_type =  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
605  | 
fixes R :: "'a \<Rightarrow> 'a \<Rightarrow> bool"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
606  | 
  and   Abs :: "('a \<Rightarrow> bool) \<Rightarrow> 'b"
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
607  | 
  and   Rep :: "'b \<Rightarrow> ('a \<Rightarrow> bool)"
 | 
| 
37493
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
608  | 
assumes equivp: "part_equivp R"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
609  | 
and rep_prop: "\<And>y. \<exists>x. R x x \<and> Rep y = R x"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
610  | 
and rep_inverse: "\<And>x. Abs (Rep x) = x"  | 
| 
37493
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
611  | 
and abs_inverse: "\<And>c. (\<exists>x. ((R x x) \<and> (c = R x))) \<Longrightarrow> (Rep (Abs c)) = c"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
612  | 
and rep_inject: "\<And>x y. (Rep x = Rep y) = (x = y)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
613  | 
begin  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
614  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
615  | 
definition  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
616  | 
abs :: "'a \<Rightarrow> 'b"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
617  | 
where  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
618  | 
"abs x = Abs (R x)"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
619  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
620  | 
definition  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
621  | 
rep :: "'b \<Rightarrow> 'a"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
622  | 
where  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
623  | 
"rep a = Eps (Rep a)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
624  | 
|
| 
37493
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
625  | 
lemma homeier5:  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
626  | 
assumes a: "R r r"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
627  | 
shows "Rep (Abs (R r)) = R r"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
628  | 
apply (subst abs_inverse)  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
629  | 
using a by auto  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
630  | 
|
| 
37493
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
631  | 
theorem homeier6:  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
632  | 
assumes a: "R r r"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
633  | 
and b: "R s s"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
634  | 
shows "Abs (R r) = Abs (R s) \<longleftrightarrow> R r = R s"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
635  | 
by (metis a b homeier5)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
636  | 
|
| 
37493
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
637  | 
theorem homeier8:  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
638  | 
assumes "R r r"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
639  | 
shows "R (Eps (R r)) = R r"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
640  | 
using assms equivp[simplified part_equivp_def]  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
641  | 
apply clarify  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
642  | 
by (metis assms exE_some)  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
643  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
644  | 
lemma Quotient:  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
645  | 
shows "Quotient R abs rep"  | 
| 
37493
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
646  | 
unfolding Quotient_def abs_def rep_def  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
647  | 
proof (intro conjI allI)  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
648  | 
fix a r s  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
649  | 
show "Abs (R (Eps (Rep a))) = a"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
650  | 
by (metis equivp exE_some part_equivp_def rep_inverse rep_prop)  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
651  | 
show "R r s \<longleftrightarrow> R r r \<and> R s s \<and> (Abs (R r) = Abs (R s))"  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
652  | 
by (metis homeier6 equivp[simplified part_equivp_def])  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
653  | 
show "R (Eps (Rep a)) (Eps (Rep a))" proof -  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
654  | 
obtain x where r: "R x x" and rep: "Rep a = R x" using rep_prop[of a] by auto  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
655  | 
have "R (Eps (R x)) x" using homeier8 r by simp  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
656  | 
then have "R x (Eps (R x))" using part_equivp_symp[OF equivp] by fast  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
657  | 
then have "R (Eps (R x)) (Eps (R x))" using homeier8[OF r] by simp  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
658  | 
then show "R (Eps (Rep a)) (Eps (Rep a))" using rep by simp  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
659  | 
qed  | 
| 
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
660  | 
qed  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
661  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
662  | 
end  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
663  | 
|
| 
37493
 
2377d246a631
Quotient package now uses Partial Equivalence instead place of equivalence
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
37049 
diff
changeset
 | 
664  | 
|
| 35294 | 665  | 
subsection {* ML setup *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
666  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
667  | 
text {* Auxiliary data for the quotient package *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
668  | 
|
| 
37986
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
669  | 
use "Tools/Quotient/quotient_info.ML"  | 
| 41452 | 670  | 
setup Quotient_Info.setup  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
671  | 
|
| 40602 | 672  | 
declare [[map "fun" = (map_fun, fun_rel)]]  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
673  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
674  | 
lemmas [quot_thm] = fun_quotient  | 
| 
39669
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
675  | 
lemmas [quot_respect] = quot_rel_rsp if_rsp o_rsp let_rsp mem_rsp id_rsp  | 
| 
 
9e3b035841e4
quotient package: respectfulness and preservation of identity.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
39302 
diff
changeset
 | 
676  | 
lemmas [quot_preserve] = if_prs o_prs let_prs mem_prs id_prs  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
677  | 
lemmas [quot_equiv] = identity_equivp  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
678  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
679  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
680  | 
text {* Lemmas about simplifying id's. *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
681  | 
lemmas [id_simps] =  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
682  | 
id_def[symmetric]  | 
| 40602 | 683  | 
map_fun_id  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
684  | 
id_apply  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
685  | 
id_o  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
686  | 
o_id  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
687  | 
eq_comp_r  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
688  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
689  | 
text {* Translation functions for the lifting process. *}
 | 
| 
37986
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
690  | 
use "Tools/Quotient/quotient_term.ML"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
691  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
692  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
693  | 
text {* Definitions of the quotient types. *}
 | 
| 
37986
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
694  | 
use "Tools/Quotient/quotient_typ.ML"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
695  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
696  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
697  | 
text {* Definitions for quotient constants. *}
 | 
| 
37986
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
698  | 
use "Tools/Quotient/quotient_def.ML"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
699  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
700  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
701  | 
text {*
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
702  | 
An auxiliary constant for recording some information  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
703  | 
about the lifted theorem in a tactic.  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
704  | 
*}  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
705  | 
definition  | 
| 
40466
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
706  | 
Quot_True :: "'a \<Rightarrow> bool"  | 
| 
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
707  | 
where  | 
| 
 
c6587375088e
type annotations in specifications; fun_rel_def is no simp rule by default; slightly changed fun_map_def; more on predicates on relation functions; proper HOL equations in definitions
 
haftmann 
parents: 
40031 
diff
changeset
 | 
708  | 
"Quot_True x \<longleftrightarrow> True"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
709  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
710  | 
lemma  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
711  | 
shows QT_all: "Quot_True (All P) \<Longrightarrow> Quot_True P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
712  | 
and QT_ex: "Quot_True (Ex P) \<Longrightarrow> Quot_True P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
713  | 
and QT_ex1: "Quot_True (Ex1 P) \<Longrightarrow> Quot_True P"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
714  | 
and QT_lam: "Quot_True (\<lambda>x. P x) \<Longrightarrow> (\<And>x. Quot_True (P x))"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
715  | 
and QT_ext: "(\<And>x. Quot_True (a x) \<Longrightarrow> f x = g x) \<Longrightarrow> (Quot_True a \<Longrightarrow> f = g)"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
716  | 
by (simp_all add: Quot_True_def ext)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
717  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
718  | 
lemma QT_imp: "Quot_True a \<equiv> Quot_True b"  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
719  | 
by (simp add: Quot_True_def)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
720  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
721  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
722  | 
text {* Tactics for proving the lifted theorems *}
 | 
| 
37986
 
3b3187adf292
use file names relative to master directory of theory source -- Proof General can now handle that due to the ThyLoad.add_path deception (cf. 3ceccd415145);
 
wenzelm 
parents: 
37593 
diff
changeset
 | 
723  | 
use "Tools/Quotient/quotient_tacs.ML"  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
724  | 
|
| 35294 | 725  | 
subsection {* Methods / Interface *}
 | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
726  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
727  | 
method_setup lifting =  | 
| 
37593
 
2505feaf2d70
separated the lifting and descending procedures in the quotient package
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37564 
diff
changeset
 | 
728  | 
  {* Attrib.thms >> (fn thms => fn ctxt => 
 | 
| 
38859
 
053c69cb4a0e
quotient package: lemmas to be lifted and descended can be pre-simplified
 
Christian Urban <urbanc@in.tum.de> 
parents: 
38702 
diff
changeset
 | 
729  | 
SIMPLE_METHOD (HEADGOAL (Quotient_Tacs.lift_tac ctxt [] thms))) *}  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
730  | 
  {* lifts theorems to quotient types *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
731  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
732  | 
method_setup lifting_setup =  | 
| 
37593
 
2505feaf2d70
separated the lifting and descending procedures in the quotient package
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37564 
diff
changeset
 | 
733  | 
  {* Attrib.thm >> (fn thm => fn ctxt => 
 | 
| 
38859
 
053c69cb4a0e
quotient package: lemmas to be lifted and descended can be pre-simplified
 
Christian Urban <urbanc@in.tum.de> 
parents: 
38702 
diff
changeset
 | 
734  | 
SIMPLE_METHOD (HEADGOAL (Quotient_Tacs.lift_procedure_tac ctxt [] thm))) *}  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
735  | 
  {* sets up the three goals for the quotient lifting procedure *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
736  | 
|
| 
37593
 
2505feaf2d70
separated the lifting and descending procedures in the quotient package
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37564 
diff
changeset
 | 
737  | 
method_setup descending =  | 
| 
38859
 
053c69cb4a0e
quotient package: lemmas to be lifted and descended can be pre-simplified
 
Christian Urban <urbanc@in.tum.de> 
parents: 
38702 
diff
changeset
 | 
738  | 
  {* Scan.succeed (fn ctxt => SIMPLE_METHOD (HEADGOAL (Quotient_Tacs.descend_tac ctxt []))) *}
 | 
| 
37593
 
2505feaf2d70
separated the lifting and descending procedures in the quotient package
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37564 
diff
changeset
 | 
739  | 
  {* decends theorems to the raw level *}
 | 
| 
 
2505feaf2d70
separated the lifting and descending procedures in the quotient package
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37564 
diff
changeset
 | 
740  | 
|
| 
 
2505feaf2d70
separated the lifting and descending procedures in the quotient package
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37564 
diff
changeset
 | 
741  | 
method_setup descending_setup =  | 
| 
38859
 
053c69cb4a0e
quotient package: lemmas to be lifted and descended can be pre-simplified
 
Christian Urban <urbanc@in.tum.de> 
parents: 
38702 
diff
changeset
 | 
742  | 
  {* Scan.succeed (fn ctxt => SIMPLE_METHOD (HEADGOAL (Quotient_Tacs.descend_procedure_tac ctxt []))) *}
 | 
| 
37593
 
2505feaf2d70
separated the lifting and descending procedures in the quotient package
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37564 
diff
changeset
 | 
743  | 
  {* sets up the three goals for the decending theorems *}
 | 
| 
 
2505feaf2d70
separated the lifting and descending procedures in the quotient package
 
Christian Urban <urbanc@in.tum.de> 
parents: 
37564 
diff
changeset
 | 
744  | 
|
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
745  | 
method_setup regularize =  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
746  | 
  {* Scan.succeed (fn ctxt => SIMPLE_METHOD (HEADGOAL (Quotient_Tacs.regularize_tac ctxt))) *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
747  | 
  {* proves the regularization goals from the quotient lifting procedure *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
748  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
749  | 
method_setup injection =  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
750  | 
  {* Scan.succeed (fn ctxt => SIMPLE_METHOD (HEADGOAL (Quotient_Tacs.all_injection_tac ctxt))) *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
751  | 
  {* proves the rep/abs injection goals from the quotient lifting procedure *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
752  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
753  | 
method_setup cleaning =  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
754  | 
  {* Scan.succeed (fn ctxt => SIMPLE_METHOD (HEADGOAL (Quotient_Tacs.clean_tac ctxt))) *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
755  | 
  {* proves the cleaning goals from the quotient lifting procedure *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
756  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
757  | 
attribute_setup quot_lifted =  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
758  | 
  {* Scan.succeed Quotient_Tacs.lifted_attrib *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
759  | 
  {* lifts theorems to quotient types *}
 | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
760  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
761  | 
no_notation  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
762  | 
rel_conj (infixr "OOO" 75) and  | 
| 40602 | 763  | 
map_fun (infixr "--->" 55) and  | 
| 
35222
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
764  | 
fun_rel (infixr "===>" 55)  | 
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
765  | 
|
| 
 
4f1fba00f66d
Initial version of HOL quotient package.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
766  | 
end  |