# HG changeset patch # User wenzelm # Date 1269183460 -3600 # Node ID 19f1f7066917d5c6ca7893dd07fd3965e8e9087c # Parent 2ae4b758550180311e0232a21ab6ec8862912ada eliminated old constdefs; diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/AbelCoset.thy --- a/src/HOL/Algebra/AbelCoset.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/AbelCoset.thy Sun Mar 21 15:57:40 2010 +0100 @@ -17,26 +17,29 @@ no_notation Plus (infixr "<+>" 65) -constdefs (structure G) +definition a_r_coset :: "[_, 'a set, 'a] \ 'a set" (infixl "+>\" 60) - "a_r_coset G \ r_coset \carrier = carrier G, mult = add G, one = zero G\" + where "a_r_coset G \ r_coset \carrier = carrier G, mult = add G, one = zero G\" +definition a_l_coset :: "[_, 'a, 'a set] \ 'a set" (infixl "<+\" 60) - "a_l_coset G \ l_coset \carrier = carrier G, mult = add G, one = zero G\" + where "a_l_coset G \ l_coset \carrier = carrier G, mult = add G, one = zero G\" +definition A_RCOSETS :: "[_, 'a set] \ ('a set)set" ("a'_rcosets\ _" [81] 80) - "A_RCOSETS G H \ RCOSETS \carrier = carrier G, mult = add G, one = zero G\ H" + where "A_RCOSETS G H \ RCOSETS \carrier = carrier G, mult = add G, one = zero G\ H" +definition set_add :: "[_, 'a set ,'a set] \ 'a set" (infixl "<+>\" 60) - "set_add G \ set_mult \carrier = carrier G, mult = add G, one = zero G\" + where "set_add G \ set_mult \carrier = carrier G, mult = add G, one = zero G\" +definition A_SET_INV :: "[_,'a set] \ 'a set" ("a'_set'_inv\ _" [81] 80) - "A_SET_INV G H \ SET_INV \carrier = carrier G, mult = add G, one = zero G\ H" + where "A_SET_INV G H \ SET_INV \carrier = carrier G, mult = add G, one = zero G\ H" -constdefs (structure G) - a_r_congruent :: "[('a,'b)ring_scheme, 'a set] \ ('a*'a)set" - ("racong\ _") - "a_r_congruent G \ r_congruent \carrier = carrier G, mult = add G, one = zero G\" +definition + a_r_congruent :: "[('a,'b)ring_scheme, 'a set] \ ('a*'a)set" ("racong\ _") + where "a_r_congruent G \ r_congruent \carrier = carrier G, mult = add G, one = zero G\" definition A_FactGroup :: "[('a,'b) ring_scheme, 'a set] \ ('a set) monoid" (infixl "A'_Mod" 65) where --{*Actually defined for groups rather than monoids*} diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/Congruence.thy --- a/src/HOL/Algebra/Congruence.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/Congruence.thy Sun Mar 21 15:57:40 2010 +0100 @@ -19,21 +19,25 @@ record 'a eq_object = "'a partial_object" + eq :: "'a \ 'a \ bool" (infixl ".=\" 50) -constdefs (structure S) +definition elem :: "_ \ 'a \ 'a set \ bool" (infixl ".\\" 50) - "x .\ A \ (\y \ A. x .= y)" + where "x .\\<^bsub>S\<^esub> A \ (\y \ A. x .=\<^bsub>S\<^esub> y)" +definition set_eq :: "_ \ 'a set \ 'a set \ bool" (infixl "{.=}\" 50) - "A {.=} B == ((\x \ A. x .\ B) \ (\x \ B. x .\ A))" + where "A {.=}\<^bsub>S\<^esub> B == ((\x \ A. x .\\<^bsub>S\<^esub> B) \ (\x \ B. x .\\<^bsub>S\<^esub> A))" +definition eq_class_of :: "_ \ 'a \ 'a set" ("class'_of\ _") - "class_of x == {y \ carrier S. x .= y}" + where "class_of\<^bsub>S\<^esub> x == {y \ carrier S. x .=\<^bsub>S\<^esub> y}" +definition eq_closure_of :: "_ \ 'a set \ 'a set" ("closure'_of\ _") - "closure_of A == {y \ carrier S. y .\ A}" + where "closure_of\<^bsub>S\<^esub> A == {y \ carrier S. y .\\<^bsub>S\<^esub> A}" +definition eq_is_closed :: "_ \ 'a set \ bool" ("is'_closed\ _") - "is_closed A == (A \ carrier S \ closure_of A = A)" + where "is_closed\<^bsub>S\<^esub> A == (A \ carrier S \ closure_of\<^bsub>S\<^esub> A = A)" abbreviation not_eq :: "_ \ 'a \ 'a \ bool" (infixl ".\\" 50) diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/Coset.thy --- a/src/HOL/Algebra/Coset.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/Coset.thy Sun Mar 21 15:57:40 2010 +0100 @@ -8,21 +8,25 @@ section {*Cosets and Quotient Groups*} -constdefs (structure G) +definition r_coset :: "[_, 'a set, 'a] \ 'a set" (infixl "#>\" 60) - "H #> a \ \h\H. {h \ a}" + where "H #>\<^bsub>G\<^esub> a \ \h\H. {h \\<^bsub>G\<^esub> a}" +definition l_coset :: "[_, 'a, 'a set] \ 'a set" (infixl "<#\" 60) - "a <# H \ \h\H. {a \ h}" + where "a <#\<^bsub>G\<^esub> H \ \h\H. {a \\<^bsub>G\<^esub> h}" +definition RCOSETS :: "[_, 'a set] \ ('a set)set" ("rcosets\ _" [81] 80) - "rcosets H \ \a\carrier G. {H #> a}" + where "rcosets\<^bsub>G\<^esub> H \ \a\carrier G. {H #>\<^bsub>G\<^esub> a}" +definition set_mult :: "[_, 'a set ,'a set] \ 'a set" (infixl "<#>\" 60) - "H <#> K \ \h\H. \k\K. {h \ k}" + where "H <#>\<^bsub>G\<^esub> K \ \h\H. \k\K. {h \\<^bsub>G\<^esub> k}" +definition SET_INV :: "[_,'a set] \ 'a set" ("set'_inv\ _" [81] 80) - "set_inv H \ \h\H. {inv h}" + where "set_inv\<^bsub>G\<^esub> H \ \h\H. {inv\<^bsub>G\<^esub> h}" locale normal = subgroup + group + @@ -589,10 +593,9 @@ subsubsection{*An Equivalence Relation*} -constdefs (structure G) - r_congruent :: "[('a,'b)monoid_scheme, 'a set] \ ('a*'a)set" - ("rcong\ _") - "rcong H \ {(x,y). x \ carrier G & y \ carrier G & inv x \ y \ H}" +definition + r_congruent :: "[('a,'b)monoid_scheme, 'a set] \ ('a*'a)set" ("rcong\ _") + where "rcong\<^bsub>G\<^esub> H \ {(x,y). x \ carrier G & y \ carrier G & inv\<^bsub>G\<^esub> x \\<^bsub>G\<^esub> y \ H}" lemma (in subgroup) equiv_rcong: diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/Divisibility.thy --- a/src/HOL/Algebra/Divisibility.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/Divisibility.thy Sun Mar 21 15:57:40 2010 +0100 @@ -160,30 +160,30 @@ subsubsection {* Function definitions *} -constdefs (structure G) +definition factor :: "[_, 'a, 'a] \ bool" (infix "divides\" 65) - "a divides b == \c\carrier G. b = a \ c" - -constdefs (structure G) + where "a divides\<^bsub>G\<^esub> b == \c\carrier G. b = a \\<^bsub>G\<^esub> c" + +definition associated :: "[_, 'a, 'a] => bool" (infix "\\" 55) - "a \ b == a divides b \ b divides a" + where "a \\<^bsub>G\<^esub> b == a divides\<^bsub>G\<^esub> b \ b divides\<^bsub>G\<^esub> a" abbreviation "division_rel G == \carrier = carrier G, eq = op \\<^bsub>G\<^esub>, le = op divides\<^bsub>G\<^esub>\" -constdefs (structure G) +definition properfactor :: "[_, 'a, 'a] \ bool" - "properfactor G a b == a divides b \ \(b divides a)" - -constdefs (structure G) + where "properfactor G a b == a divides\<^bsub>G\<^esub> b \ \(b divides\<^bsub>G\<^esub> a)" + +definition irreducible :: "[_, 'a] \ bool" - "irreducible G a == a \ Units G \ (\b\carrier G. properfactor G b a \ b \ Units G)" - -constdefs (structure G) - prime :: "[_, 'a] \ bool" - "prime G p == p \ Units G \ - (\a\carrier G. \b\carrier G. p divides (a \ b) \ p divides a \ p divides b)" - + where "irreducible G a == a \ Units G \ (\b\carrier G. properfactor G b a \ b \ Units G)" + +definition + prime :: "[_, 'a] \ bool" where + "prime G p == + p \ Units G \ + (\a\carrier G. \b\carrier G. p divides\<^bsub>G\<^esub> (a \\<^bsub>G\<^esub> b) \ p divides\<^bsub>G\<^esub> a \ p divides\<^bsub>G\<^esub> b)" subsubsection {* Divisibility *} @@ -1041,20 +1041,21 @@ subsubsection {* Function definitions *} -constdefs (structure G) +definition factors :: "[_, 'a list, 'a] \ bool" - "factors G fs a == (\x \ (set fs). irreducible G x) \ foldr (op \) fs \ = a" - + where "factors G fs a == (\x \ (set fs). irreducible G x) \ foldr (op \\<^bsub>G\<^esub>) fs \\<^bsub>G\<^esub> = a" + +definition wfactors ::"[_, 'a list, 'a] \ bool" - "wfactors G fs a == (\x \ (set fs). irreducible G x) \ foldr (op \) fs \ \ a" + where "wfactors G fs a == (\x \ (set fs). irreducible G x) \ foldr (op \\<^bsub>G\<^esub>) fs \\<^bsub>G\<^esub> \\<^bsub>G\<^esub> a" abbreviation - list_assoc :: "('a,_) monoid_scheme \ 'a list \ 'a list \ bool" (infix "[\]\" 44) where - "list_assoc G == list_all2 (op \\<^bsub>G\<^esub>)" - -constdefs (structure G) + list_assoc :: "('a,_) monoid_scheme \ 'a list \ 'a list \ bool" (infix "[\]\" 44) + where "list_assoc G == list_all2 (op \\<^bsub>G\<^esub>)" + +definition essentially_equal :: "[_, 'a list, 'a list] \ bool" - "essentially_equal G fs1 fs2 == (\fs1'. fs1 <~~> fs1' \ fs1' [\] fs2)" + where "essentially_equal G fs1 fs2 == (\fs1'. fs1 <~~> fs1' \ fs1' [\]\<^bsub>G\<^esub> fs2)" locale factorial_monoid = comm_monoid_cancel + @@ -1901,7 +1902,7 @@ abbreviation "assocs G x == eq_closure_of (division_rel G) {x}" -constdefs (structure G) +definition "fmset G as \ multiset_of (map (\a. assocs G a) as)" @@ -2615,23 +2616,25 @@ subsubsection {* Definitions *} -constdefs (structure G) +definition isgcd :: "[('a,_) monoid_scheme, 'a, 'a, 'a] \ bool" ("(_ gcdof\ _ _)" [81,81,81] 80) - "x gcdof a b \ x divides a \ x divides b \ - (\y\carrier G. (y divides a \ y divides b \ y divides x))" - + where "x gcdof\<^bsub>G\<^esub> a b \ x divides\<^bsub>G\<^esub> a \ x divides\<^bsub>G\<^esub> b \ + (\y\carrier G. (y divides\<^bsub>G\<^esub> a \ y divides\<^bsub>G\<^esub> b \ y divides\<^bsub>G\<^esub> x))" + +definition islcm :: "[_, 'a, 'a, 'a] \ bool" ("(_ lcmof\ _ _)" [81,81,81] 80) - "x lcmof a b \ a divides x \ b divides x \ - (\y\carrier G. (a divides y \ b divides y \ x divides y))" - -constdefs (structure G) + where "x lcmof\<^bsub>G\<^esub> a b \ a divides\<^bsub>G\<^esub> x \ b divides\<^bsub>G\<^esub> x \ + (\y\carrier G. (a divides\<^bsub>G\<^esub> y \ b divides\<^bsub>G\<^esub> y \ x divides\<^bsub>G\<^esub> y))" + +definition somegcd :: "('a,_) monoid_scheme \ 'a \ 'a \ 'a" - "somegcd G a b == SOME x. x \ carrier G \ x gcdof a b" - + where "somegcd G a b == SOME x. x \ carrier G \ x gcdof\<^bsub>G\<^esub> a b" + +definition somelcm :: "('a,_) monoid_scheme \ 'a \ 'a \ 'a" - "somelcm G a b == SOME x. x \ carrier G \ x lcmof a b" - -constdefs (structure G) + where "somelcm G a b == SOME x. x \ carrier G \ x lcmof\<^bsub>G\<^esub> a b" + +definition "SomeGcd G A == inf (division_rel G) A" diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/FiniteProduct.thy --- a/src/HOL/Algebra/FiniteProduct.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/FiniteProduct.thy Sun Mar 21 15:57:40 2010 +0100 @@ -285,11 +285,12 @@ subsubsection {* Products over Finite Sets *} -constdefs (structure G) - finprod :: "[('b, 'm) monoid_scheme, 'a => 'b, 'a set] => 'b" - "finprod G f A == if finite A - then foldD (carrier G) (mult G o f) \ A - else undefined" +definition + finprod :: "[('b, 'm) monoid_scheme, 'a => 'b, 'a set] => 'b" where + "finprod G f A == + if finite A + then foldD (carrier G) (mult G o f) \\<^bsub>G\<^esub> A + else undefined" syntax "_finprod" :: "index => idt => 'a set => 'b => 'b" diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/Group.thy --- a/src/HOL/Algebra/Group.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/Group.thy Sun Mar 21 15:57:40 2010 +0100 @@ -22,13 +22,14 @@ mult :: "['a, 'a] \ 'a" (infixl "\\" 70) one :: 'a ("\\") -constdefs (structure G) +definition m_inv :: "('a, 'b) monoid_scheme => 'a => 'a" ("inv\ _" [81] 80) - "inv x == (THE y. y \ carrier G & x \ y = \ & y \ x = \)" + where "inv\<^bsub>G\<^esub> x == (THE y. y \ carrier G & x \\<^bsub>G\<^esub> y = \\<^bsub>G\<^esub> & y \\<^bsub>G\<^esub> x = \\<^bsub>G\<^esub>)" +definition Units :: "_ => 'a set" --{*The set of invertible elements*} - "Units G == {y. y \ carrier G & (\x \ carrier G. x \ y = \ & y \ x = \)}" + where "Units G == {y. y \ carrier G & (\x \ carrier G. x \\<^bsub>G\<^esub> y = \\<^bsub>G\<^esub> & y \\<^bsub>G\<^esub> x = \\<^bsub>G\<^esub>)}" consts pow :: "[('a, 'm) monoid_scheme, 'a, 'b::number] => 'a" (infixr "'(^')\" 75) @@ -534,8 +535,8 @@ subsection {* Homomorphisms and Isomorphisms *} -constdefs (structure G and H) - hom :: "_ => _ => ('a => 'b) set" +definition + hom :: "_ => _ => ('a => 'b) set" where "hom G H == {h. h \ carrier G -> carrier H & (\x \ carrier G. \y \ carrier G. h (x \\<^bsub>G\<^esub> y) = h x \\<^bsub>H\<^esub> h y)}" diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/Ideal.thy --- a/src/HOL/Algebra/Ideal.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/Ideal.thy Sun Mar 21 15:57:40 2010 +0100 @@ -47,9 +47,9 @@ subsubsection (in ring) {* Ideals Generated by a Subset of @{term "carrier R"} *} -constdefs (structure R) +definition genideal :: "('a, 'b) ring_scheme \ 'a set \ 'a set" ("Idl\ _" [80] 79) - "genideal R S \ Inter {I. ideal I R \ S \ I}" + where "genideal R S \ Inter {I. ideal I R \ S \ I}" subsubsection {* Principal Ideals *} @@ -451,9 +451,9 @@ text {* Generation of Principal Ideals in Commutative Rings *} -constdefs (structure R) +definition cgenideal :: "('a, 'b) monoid_scheme \ 'a \ 'a set" ("PIdl\ _" [80] 79) - "cgenideal R a \ { x \ a | x. x \ carrier R }" + where "cgenideal R a \ {x \\<^bsub>R\<^esub> a | x. x \ carrier R}" text {* genhideal (?) really generates an ideal *} lemma (in cring) cgenideal_ideal: diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/Lattice.thy --- a/src/HOL/Algebra/Lattice.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/Lattice.thy Sun Mar 21 15:57:40 2010 +0100 @@ -25,9 +25,9 @@ and le_cong: "\ x .= y; z .= w; x \ carrier L; y \ carrier L; z \ carrier L; w \ carrier L \ \ x \ z \ y \ w" -constdefs (structure L) +definition lless :: "[_, 'a, 'a] => bool" (infixl "\\" 50) - "x \ y == x \ y & x .\ y" + where "x \\<^bsub>L\<^esub> y == x \\<^bsub>L\<^esub> y & x .\\<^bsub>L\<^esub> y" subsubsection {* The order relation *} @@ -102,12 +102,13 @@ subsubsection {* Upper and lower bounds of a set *} -constdefs (structure L) +definition Upper :: "[_, 'a set] => 'a set" - "Upper L A == {u. (ALL x. x \ A \ carrier L --> x \ u)} \ carrier L" + where "Upper L A == {u. (ALL x. x \ A \ carrier L --> x \\<^bsub>L\<^esub> u)} \ carrier L" +definition Lower :: "[_, 'a set] => 'a set" - "Lower L A == {l. (ALL x. x \ A \ carrier L --> l \ x)} \ carrier L" + where "Lower L A == {l. (ALL x. x \ A \ carrier L --> l \\<^bsub>L\<^esub> x)} \ carrier L" lemma Upper_closed [intro!, simp]: "Upper L A \ carrier L" @@ -275,12 +276,13 @@ subsubsection {* Least and greatest, as predicate *} -constdefs (structure L) +definition least :: "[_, 'a, 'a set] => bool" - "least L l A == A \ carrier L & l \ A & (ALL x : A. l \ x)" + where "least L l A == A \ carrier L & l \ A & (ALL x : A. l \\<^bsub>L\<^esub> x)" +definition greatest :: "[_, 'a, 'a set] => bool" - "greatest L g A == A \ carrier L & g \ A & (ALL x : A. x \ g)" + where "greatest L g A == A \ carrier L & g \ A & (ALL x : A. x \\<^bsub>L\<^esub> g)" text (in weak_partial_order) {* Could weaken these to @{term "l \ carrier L \ l .\ A"} and @{term "g \ carrier L \ g .\ A"}. *} @@ -400,18 +402,21 @@ text {* Supremum and infimum *} -constdefs (structure L) +definition sup :: "[_, 'a set] => 'a" ("\\_" [90] 90) - "\A == SOME x. least L x (Upper L A)" + where "\\<^bsub>L\<^esub>A == SOME x. least L x (Upper L A)" +definition inf :: "[_, 'a set] => 'a" ("\\_" [90] 90) - "\A == SOME x. greatest L x (Lower L A)" + where "\\<^bsub>L\<^esub>A == SOME x. greatest L x (Lower L A)" +definition join :: "[_, 'a, 'a] => 'a" (infixl "\\" 65) - "x \ y == \ {x, y}" + where "x \\<^bsub>L\<^esub> y == \\<^bsub>L\<^esub>{x, y}" +definition meet :: "[_, 'a, 'a] => 'a" (infixl "\\" 70) - "x \ y == \ {x, y}" + where "x \\<^bsub>L\<^esub> y == \\<^bsub>L\<^esub>{x, y}" subsection {* Lattices *} @@ -981,12 +986,13 @@ shows "weak_complete_lattice L" proof qed (auto intro: sup_exists inf_exists) -constdefs (structure L) +definition top :: "_ => 'a" ("\\") - "\ == sup L (carrier L)" + where "\\<^bsub>L\<^esub> == sup L (carrier L)" +definition bottom :: "_ => 'a" ("\\") - "\ == inf L (carrier L)" + where "\\<^bsub>L\<^esub> == inf L (carrier L)" lemma (in weak_complete_lattice) supI: diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/QuotRing.thy --- a/src/HOL/Algebra/QuotRing.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/QuotRing.thy Sun Mar 21 15:57:40 2010 +0100 @@ -11,10 +11,10 @@ subsection {* Multiplication on Cosets *} -constdefs (structure R) +definition rcoset_mult :: "[('a, _) ring_scheme, 'a set, 'a set, 'a set] \ 'a set" ("[mod _:] _ \\ _" [81,81,81] 80) - "rcoset_mult R I A B \ \a\A. \b\B. I +> (a \ b)" + where "rcoset_mult R I A B \ \a\A. \b\B. I +>\<^bsub>R\<^esub> (a \\<^bsub>R\<^esub> b)" text {* @{const "rcoset_mult"} fulfils the properties required by @@ -89,11 +89,10 @@ subsection {* Quotient Ring Definition *} -constdefs (structure R) - FactRing :: "[('a,'b) ring_scheme, 'a set] \ ('a set) ring" - (infixl "Quot" 65) - "FactRing R I \ - \carrier = a_rcosets I, mult = rcoset_mult R I, one = (I +> \), zero = I, add = set_add R\" +definition + FactRing :: "[('a,'b) ring_scheme, 'a set] \ ('a set) ring" (infixl "Quot" 65) + where "FactRing R I \ + \carrier = a_rcosets\<^bsub>R\<^esub> I, mult = rcoset_mult R I, one = (I +>\<^bsub>R\<^esub> \\<^bsub>R\<^esub>), zero = I, add = set_add R\" subsection {* Factorization over General Ideals *} diff -r 2ae4b7585501 -r 19f1f7066917 src/HOL/Algebra/Ring.thy --- a/src/HOL/Algebra/Ring.thy Sun Mar 21 06:59:23 2010 +0100 +++ b/src/HOL/Algebra/Ring.thy Sun Mar 21 15:57:40 2010 +0100 @@ -6,7 +6,8 @@ theory Ring imports FiniteProduct -uses ("ringsimp.ML") begin +uses ("ringsimp.ML") +begin section {* The Algebraic Hierarchy of Rings *} @@ -19,12 +20,13 @@ text {* Derived operations. *} -constdefs (structure R) +definition a_inv :: "[('a, 'm) ring_scheme, 'a ] => 'a" ("\\ _" [81] 80) - "a_inv R == m_inv (| carrier = carrier R, mult = add R, one = zero R |)" + where "a_inv R == m_inv (| carrier = carrier R, mult = add R, one = zero R |)" +definition a_minus :: "[('a, 'm) ring_scheme, 'a, 'a] => 'a" (infixl "\\" 65) - "[| x \ carrier R; y \ carrier R |] ==> x \ y == x \ (\ y)" + where "[| x \ carrier R; y \ carrier R |] ==> x \\<^bsub>R\<^esub> y == x \\<^bsub>R\<^esub> (\\<^bsub>R\<^esub> y)" locale abelian_monoid = fixes G (structure) @@ -728,12 +730,13 @@ subsection {* Morphisms *} -constdefs (structure R S) +definition ring_hom :: "[('a, 'm) ring_scheme, ('b, 'n) ring_scheme] => ('a => 'b) set" - "ring_hom R S == {h. h \ carrier R -> carrier S & + where "ring_hom R S == + {h. h \ carrier R -> carrier S & (ALL x y. x \ carrier R & y \ carrier R --> - h (x \ y) = h x \\<^bsub>S\<^esub> h y & h (x \ y) = h x \\<^bsub>S\<^esub> h y) & - h \ = \\<^bsub>S\<^esub>}" + h (x \\<^bsub>R\<^esub> y) = h x \\<^bsub>S\<^esub> h y & h (x \\<^bsub>R\<^esub> y) = h x \\<^bsub>S\<^esub> h y) & + h \\<^bsub>R\<^esub> = \\<^bsub>S\<^esub>}" lemma ring_hom_memI: fixes R (structure) and S (structure)