| author | paulson <lp15@cam.ac.uk> | 
| Mon, 28 Aug 2017 20:02:43 +0100 | |
| changeset 66536 | 9c95b2b54337 | 
| parent 65435 | 378175f44328 | 
| child 66760 | d44ea023ac09 | 
| permissions | -rw-r--r-- | 
| 65435 | 1  | 
(* Title: HOL/Algebra/More_Ring.thy  | 
| 
65416
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
2  | 
Author: Jeremy Avigad  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
3  | 
*)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
4  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
5  | 
section \<open>More on rings etc.\<close>  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
7  | 
theory More_Ring  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
8  | 
imports  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
9  | 
Ring  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
10  | 
begin  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
11  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
12  | 
lemma (in cring) field_intro2: "\<zero>\<^bsub>R\<^esub> ~= \<one>\<^bsub>R\<^esub> \<Longrightarrow> \<forall>x \<in> carrier R - {\<zero>\<^bsub>R\<^esub>}. x \<in> Units R \<Longrightarrow> field R"
 | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
13  | 
apply (unfold_locales)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
14  | 
apply (insert cring_axioms, auto)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
15  | 
apply (rule trans)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
16  | 
apply (subgoal_tac "a = (a \<otimes> b) \<otimes> inv b")  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
17  | 
apply assumption  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
18  | 
apply (subst m_assoc)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
19  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
20  | 
apply (unfold Units_def)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
21  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
22  | 
done  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
23  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
24  | 
lemma (in monoid) inv_char: "x : carrier G \<Longrightarrow> y : carrier G \<Longrightarrow>  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
25  | 
x \<otimes> y = \<one> \<Longrightarrow> y \<otimes> x = \<one> \<Longrightarrow> inv x = y"  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
26  | 
apply (subgoal_tac "x : Units G")  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
27  | 
apply (subgoal_tac "y = inv x \<otimes> \<one>")  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
28  | 
apply simp  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
29  | 
apply (erule subst)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
30  | 
apply (subst m_assoc [symmetric])  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
31  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
32  | 
apply (unfold Units_def)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
33  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
34  | 
done  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
35  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
36  | 
lemma (in comm_monoid) comm_inv_char: "x : carrier G \<Longrightarrow> y : carrier G \<Longrightarrow>  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
37  | 
x \<otimes> y = \<one> \<Longrightarrow> inv x = y"  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
38  | 
apply (rule inv_char)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
39  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
40  | 
apply (subst m_comm, auto)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
41  | 
done  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
42  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
43  | 
lemma (in ring) inv_neg_one [simp]: "inv (\<ominus> \<one>) = \<ominus> \<one>"  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
44  | 
apply (rule inv_char)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
45  | 
apply (auto simp add: l_minus r_minus)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
46  | 
done  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
47  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
48  | 
lemma (in monoid) inv_eq_imp_eq: "x : Units G \<Longrightarrow> y : Units G \<Longrightarrow>  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
49  | 
inv x = inv y \<Longrightarrow> x = y"  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
50  | 
apply (subgoal_tac "inv(inv x) = inv(inv y)")  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
51  | 
apply (subst (asm) Units_inv_inv)+  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
52  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
53  | 
done  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
54  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
55  | 
lemma (in ring) Units_minus_one_closed [intro]: "\<ominus> \<one> : Units R"  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
56  | 
apply (unfold Units_def)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
57  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
58  | 
apply (rule_tac x = "\<ominus> \<one>" in bexI)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
59  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
60  | 
apply (simp add: l_minus r_minus)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
61  | 
done  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
62  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
63  | 
lemma (in monoid) inv_one [simp]: "inv \<one> = \<one>"  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
64  | 
apply (rule inv_char)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
65  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
66  | 
done  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
67  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
68  | 
lemma (in ring) inv_eq_neg_one_eq: "x : Units R \<Longrightarrow> (inv x = \<ominus> \<one>) = (x = \<ominus> \<one>)"  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
69  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
70  | 
apply (subst Units_inv_inv [symmetric])  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
71  | 
apply auto  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
72  | 
done  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
73  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
74  | 
lemma (in monoid) inv_eq_one_eq: "x : Units G \<Longrightarrow> (inv x = \<one>) = (x = \<one>)"  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
75  | 
by (metis Units_inv_inv inv_one)  | 
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
76  | 
|
| 
 
f707dbcf11e3
more approproiate placement of theories MiscAlgebra and Multiplicate_Group
 
haftmann 
parents:  
diff
changeset
 | 
77  | 
end  |