src/HOL/Algebra/abstract/Factor.thy
author haftmann
Fri, 20 Feb 2009 10:14:32 +0100
changeset 30008 20c194b71bb7
parent 21423 6cdd0589aa73
child 35849 b5522b51cb1e
permissions -rw-r--r--
defensive implementation of pretty serialisation of lists and characters
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
     1
(*
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
     2
    Factorisation within a factorial domain
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
     3
    $Id$
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
     4
    Author: Clemens Ballarin, started 25 November 1997
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
     5
*)
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
     6
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents: 17479
diff changeset
     7
theory Factor imports Ring2 begin
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
     8
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
     9
definition
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    10
  Factorisation :: "['a::ring, 'a list, 'a] => bool" where
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    11
  (* factorisation of x into a list of irred factors and a unit u *)
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    12
  "Factorisation x factors u \<longleftrightarrow>
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
    13
     x = foldr op* factors u &
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
    14
     (ALL a : set factors. irred a) & u dvd 1"
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    15
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    16
lemma irred_dvd_lemma: "!! c::'a::factorial.
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    17
   [| irred c; irred a; irred b; c dvd a*b |] ==> c assoc a | c assoc b"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    18
  apply (unfold assoc_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    19
  apply (frule factorial_prime)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    20
  apply (unfold irred_def prime_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    21
  apply blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    22
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    23
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    24
lemma irred_dvd_list_lemma: "!! c::'a::factorial.
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    25
   [| irred c; a dvd 1 |] ==>  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    26
   (ALL b : set factors. irred b) & c dvd foldr op* factors a -->  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    27
   (EX d. c assoc d & d : set factors)"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    28
  apply (unfold assoc_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    29
  apply (induct_tac factors)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    30
  (* Base case: c dvd a contradicts irred c *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    31
   apply (simp add: irred_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    32
   apply (blast intro: dvd_trans_ring)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    33
  (* Induction step *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    34
  apply (frule factorial_prime)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    35
  apply (simp add: irred_def prime_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    36
  apply blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    37
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    38
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    39
lemma irred_dvd_list: "!! c::'a::factorial.  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    40
   [| irred c; ALL b : set factors. irred b; a dvd 1;  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    41
     c dvd foldr op* factors a |] ==>  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    42
   EX d. c assoc d & d : set factors"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    43
  apply (rule irred_dvd_list_lemma [THEN mp])
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    44
    apply auto
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    45
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    46
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    47
lemma Factorisation_dvd: "!! c::'a::factorial.  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    48
   [| irred c; Factorisation x factors u; c dvd x |] ==>  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    49
   EX d. c assoc d & d : set factors"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    50
  apply (unfold Factorisation_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    51
  apply (rule irred_dvd_list_lemma [THEN mp])
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    52
    apply auto
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    53
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    54
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    55
lemma Factorisation_irred: "!! c::'a::factorial.
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    56
    [| Factorisation x factors u; a : set factors |] ==> irred a"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    57
  unfolding Factorisation_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    58
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    59
end