src/HOL/Computational_Algebra/Field_as_Ring.thy
author Manuel Eberl <eberlm@in.tum.de>
Tue, 21 Jan 2020 11:02:27 +0100
changeset 71398 e0237f2eb49d
parent 70817 dd675800469d
permissions -rw-r--r--
Removed multiplicativity assumption from normalization_semidom
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
65435
378175f44328 tuned headers;
wenzelm
parents: 65417
diff changeset
     1
(*  Title:      HOL/Computational_Algebra/Field_as_Ring.thy
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
     2
    Author:     Manuel Eberl
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
     3
*)
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
     4
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
     5
theory Field_as_Ring
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
     6
imports 
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
     7
  Complex_Main
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
     8
  Euclidean_Algorithm
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
     9
begin
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    10
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    11
context field
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    12
begin
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    13
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    14
subclass idom_divide ..
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    15
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    16
definition normalize_field :: "'a \<Rightarrow> 'a" 
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    17
  where [simp]: "normalize_field x = (if x = 0 then 0 else 1)"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    18
definition unit_factor_field :: "'a \<Rightarrow> 'a" 
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    19
  where [simp]: "unit_factor_field x = x"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    20
definition euclidean_size_field :: "'a \<Rightarrow> nat" 
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    21
  where [simp]: "euclidean_size_field x = (if x = 0 then 0 else 1)"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    22
definition mod_field :: "'a \<Rightarrow> 'a \<Rightarrow> 'a"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    23
  where [simp]: "mod_field x y = (if y = 0 then x else 0)"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    24
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    25
end
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    26
71398
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    27
instantiation real ::
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    28
  "{unique_euclidean_ring, normalization_euclidean_semiring, normalization_semidom_multiplicative}"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    29
begin
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    30
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    31
definition [simp]: "normalize_real = (normalize_field :: real \<Rightarrow> _)"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    32
definition [simp]: "unit_factor_real = (unit_factor_field :: real \<Rightarrow> _)"
66838
17989f6bc7b2 clarified uniqueness criterion for euclidean rings
haftmann
parents: 66817
diff changeset
    33
definition [simp]: "modulo_real = (mod_field :: real \<Rightarrow> _)"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    34
definition [simp]: "euclidean_size_real = (euclidean_size_field :: real \<Rightarrow> _)"
66838
17989f6bc7b2 clarified uniqueness criterion for euclidean rings
haftmann
parents: 66817
diff changeset
    35
definition [simp]: "division_segment (x :: real) = 1"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    36
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    37
instance
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    38
  by standard
70817
dd675800469d dedicated fact collections for algebraic simplification rules potentially splitting goals
haftmann
parents: 66838
diff changeset
    39
    (simp_all add: dvd_field_iff field_split_simps split: if_splits)
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    40
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    41
end
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    42
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    43
instantiation real :: euclidean_ring_gcd
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    44
begin
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    45
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    46
definition gcd_real :: "real \<Rightarrow> real \<Rightarrow> real" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    47
  "gcd_real = Euclidean_Algorithm.gcd"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    48
definition lcm_real :: "real \<Rightarrow> real \<Rightarrow> real" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    49
  "lcm_real = Euclidean_Algorithm.lcm"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    50
definition Gcd_real :: "real set \<Rightarrow> real" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    51
 "Gcd_real = Euclidean_Algorithm.Gcd"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    52
definition Lcm_real :: "real set \<Rightarrow> real" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    53
 "Lcm_real = Euclidean_Algorithm.Lcm"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    54
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    55
instance by standard (simp_all add: gcd_real_def lcm_real_def Gcd_real_def Lcm_real_def)
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    56
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    57
end
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    58
71398
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    59
instance real :: field_gcd ..
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    60
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    61
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    62
instantiation rat :: 
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    63
  "{unique_euclidean_ring, normalization_euclidean_semiring, normalization_semidom_multiplicative}"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    64
begin
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    65
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    66
definition [simp]: "normalize_rat = (normalize_field :: rat \<Rightarrow> _)"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    67
definition [simp]: "unit_factor_rat = (unit_factor_field :: rat \<Rightarrow> _)"
66838
17989f6bc7b2 clarified uniqueness criterion for euclidean rings
haftmann
parents: 66817
diff changeset
    68
definition [simp]: "modulo_rat = (mod_field :: rat \<Rightarrow> _)"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    69
definition [simp]: "euclidean_size_rat = (euclidean_size_field :: rat \<Rightarrow> _)"
66838
17989f6bc7b2 clarified uniqueness criterion for euclidean rings
haftmann
parents: 66817
diff changeset
    70
definition [simp]: "division_segment (x :: rat) = 1"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    71
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    72
instance
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    73
  by standard
70817
dd675800469d dedicated fact collections for algebraic simplification rules potentially splitting goals
haftmann
parents: 66838
diff changeset
    74
    (simp_all add: dvd_field_iff field_split_simps split: if_splits)
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    75
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    76
end
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    77
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    78
instantiation rat :: euclidean_ring_gcd
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    79
begin
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    80
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    81
definition gcd_rat :: "rat \<Rightarrow> rat \<Rightarrow> rat" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    82
  "gcd_rat = Euclidean_Algorithm.gcd"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    83
definition lcm_rat :: "rat \<Rightarrow> rat \<Rightarrow> rat" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    84
  "lcm_rat = Euclidean_Algorithm.lcm"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    85
definition Gcd_rat :: "rat set \<Rightarrow> rat" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    86
 "Gcd_rat = Euclidean_Algorithm.Gcd"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    87
definition Lcm_rat :: "rat set \<Rightarrow> rat" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    88
 "Lcm_rat = Euclidean_Algorithm.Lcm"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    89
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    90
instance by standard (simp_all add: gcd_rat_def lcm_rat_def Gcd_rat_def Lcm_rat_def)
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    91
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    92
end
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    93
71398
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    94
instance rat :: field_gcd ..
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    95
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    96
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    97
instantiation complex ::
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
    98
  "{unique_euclidean_ring, normalization_euclidean_semiring, normalization_semidom_multiplicative}"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
    99
begin
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   100
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   101
definition [simp]: "normalize_complex = (normalize_field :: complex \<Rightarrow> _)"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   102
definition [simp]: "unit_factor_complex = (unit_factor_field :: complex \<Rightarrow> _)"
66838
17989f6bc7b2 clarified uniqueness criterion for euclidean rings
haftmann
parents: 66817
diff changeset
   103
definition [simp]: "modulo_complex = (mod_field :: complex \<Rightarrow> _)"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   104
definition [simp]: "euclidean_size_complex = (euclidean_size_field :: complex \<Rightarrow> _)"
66838
17989f6bc7b2 clarified uniqueness criterion for euclidean rings
haftmann
parents: 66817
diff changeset
   105
definition [simp]: "division_segment (x :: complex) = 1"
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   106
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   107
instance
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   108
  by standard
70817
dd675800469d dedicated fact collections for algebraic simplification rules potentially splitting goals
haftmann
parents: 66838
diff changeset
   109
    (simp_all add: dvd_field_iff field_split_simps split: if_splits)
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   110
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   111
end
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   112
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   113
instantiation complex :: euclidean_ring_gcd
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   114
begin
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   115
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   116
definition gcd_complex :: "complex \<Rightarrow> complex \<Rightarrow> complex" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   117
  "gcd_complex = Euclidean_Algorithm.gcd"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   118
definition lcm_complex :: "complex \<Rightarrow> complex \<Rightarrow> complex" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   119
  "lcm_complex = Euclidean_Algorithm.lcm"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   120
definition Gcd_complex :: "complex set \<Rightarrow> complex" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   121
 "Gcd_complex = Euclidean_Algorithm.Gcd"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   122
definition Lcm_complex :: "complex set \<Rightarrow> complex" where
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   123
 "Lcm_complex = Euclidean_Algorithm.Lcm"
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   124
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   125
instance by standard (simp_all add: gcd_complex_def lcm_complex_def Gcd_complex_def Lcm_complex_def)
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   126
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   127
end
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   128
71398
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
   129
instance complex :: field_gcd ..
e0237f2eb49d Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents: 70817
diff changeset
   130
65417
fc41a5650fb1 session containing computational algebra
haftmann
parents:
diff changeset
   131
end