src/HOL/Algebra/poly/PolyHomo.ML
author wenzelm
Sat, 17 Sep 2005 20:49:14 +0200
changeset 17479 68a7acb5f22e
parent 13735 7de9342aca7a
permissions -rw-r--r--
converted to Isar theory format;
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
    Universal property and evaluation homomorphism of univariate polynomials
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 16 April 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
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
     7
(* Summation result for tactic-style proofs *)
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
     8
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
     9
val natsum_add = thm "natsum_add";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    10
val natsum_ldistr = thm "natsum_ldistr";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    11
val natsum_rdistr = thm "natsum_rdistr";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    12
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    13
Goal
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    14
  "!! f::(nat=>'a::ring). \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    15
\    m <= n & (ALL i. m < i & i <= n --> f i = 0) --> \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    16
\    setsum f {..m} = setsum f {..n}";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    17
by (induct_tac "n" 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    18
(* Base case *)
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    19
by (Simp_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    20
(* Induction step *)
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    21
by (case_tac "m <= n" 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    22
by Auto_tac;
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    23
by (subgoal_tac "m = Suc n" 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    24
by (Asm_simp_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    25
by (fast_arith_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    26
val SUM_shrink_lemma = result();
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    27
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    28
Goal
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    29
  "!! f::(nat=>'a::ring). \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    30
\    [| m <= n; !!i. [| m < i; i <= n |] ==> f i = 0; P (setsum f {..n}) |] \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    31
\  ==> P (setsum f {..m})";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    32
by (cut_inst_tac [("m", "m"), ("n", "n"), ("f", "f")] SUM_shrink_lemma 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    33
by (Asm_full_simp_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    34
qed "SUM_shrink";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    35
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    36
Goal
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    37
  "!! f::(nat=>'a::ring). \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    38
\    [| m <= n; !!i. [| m < i; i <= n |] ==> f i = 0; P (setsum f {..m}) |] \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    39
\    ==> P (setsum f {..n})";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    40
by (cut_inst_tac [("m", "m"), ("n", "n"), ("f", "f")] SUM_shrink_lemma 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    41
by (Asm_full_simp_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    42
qed "SUM_extend";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    43
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    44
Goal
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    45
  "!!f::nat=>'a::ring. j <= n + m --> \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    46
\    setsum (%k. setsum (%i. f i * g (k - i)) {..k}) {..j} = \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    47
\    setsum (%k. setsum (%i. f k * g i) {..j - k}) {..j}";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    48
by (induct_tac "j" 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    49
(* Base case *)
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    50
by (Simp_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    51
(* Induction step *)
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    52
by (simp_tac (simpset() addsimps [Suc_diff_le, natsum_add]) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    53
(*
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    54
by (asm_simp_tac (simpset() addsimps a_ac) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    55
*)
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    56
by (Asm_simp_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    57
val DiagSum_lemma = result();
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    58
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    59
Goal
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    60
  "!!f::nat=>'a::ring. \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    61
\    setsum (%k. setsum (%i. f i * g (k - i)) {..k}) {..n + m} = \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    62
\    setsum (%k. setsum (%i. f k * g i) {..n + m - k}) {..n + m}";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    63
by (rtac (DiagSum_lemma RS mp) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    64
by (rtac le_refl 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    65
qed "DiagSum";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    66
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    67
Goal
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    68
  "!! f::nat=>'a::ring. [| bound n f; bound m g|] ==> \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    69
\    setsum (%k. setsum (%i. f i * g (k-i)) {..k}) {..n + m} = \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    70
\    setsum f {..n} * setsum g {..m}";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    71
by (simp_tac (simpset() addsimps [natsum_ldistr, DiagSum]) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    72
(* SUM_rdistr must be applied after SUM_ldistr ! *)
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    73
by (simp_tac (simpset() addsimps [natsum_rdistr]) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    74
by (res_inst_tac [("m", "n"), ("n", "n+m")] SUM_extend 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    75
by (rtac le_add1 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    76
by (Force_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    77
by (rtac (thm "natsum_cong") 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    78
by (rtac refl 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    79
by (res_inst_tac [("m", "m"), ("n", "n+m-i")] SUM_shrink 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    80
by (asm_simp_tac (simpset() addsimps [le_add_diff]) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    81
by Auto_tac;
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    82
qed "CauchySum";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    83
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    84
(* Ring homomorphisms and polynomials *)
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    85
(*
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    86
Goal "homo (const::'a::ring=>'a up)";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    87
by (auto_tac (claset() addSIs [homoI], simpset()));
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    88
qed "const_homo";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    89
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    90
Delsimps [const_add, const_mult, const_one, const_zero];
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    91
Addsimps [const_homo];
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    92
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    93
Goal
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    94
  "!!f::'a::ring up=>'b::ring. homo f ==> f (a *s p) = f (const a) * f p";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    95
by (asm_simp_tac (simpset() addsimps [const_mult_is_smult RS sym]) 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    96
qed "homo_smult";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    97
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
    98
Addsimps [homo_smult];
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
    99
*)
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   100
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   101
val deg_add = thm "deg_add";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   102
val deg_mult_ring = thm "deg_mult_ring";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   103
val deg_aboveD = thm "deg_aboveD";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   104
val coeff_add = thm "coeff_add";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   105
val coeff_mult = thm "coeff_mult";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   106
val boundI = thm "boundI";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   107
val monom_mult_is_smult = thm "monom_mult_is_smult";
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   108
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   109
(* Evaluation homomorphism *)
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   110
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   111
Goal
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   112
  "!! phi::('a::ring=>'b::ring). homo phi ==> homo (EVAL2 phi a)";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   113
by (rtac homoI 1);
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   114
by (rewtac (thm "EVAL2_def"));
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   115
(* + commutes *)
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   116
(* degree estimations:
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   117
  bound of all sums can be extended to max (deg aa) (deg b) *)
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   118
by (res_inst_tac [("m", "deg (aa + b)"), ("n", "max (deg aa) (deg b)")]
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   119
  SUM_shrink 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   120
by (rtac deg_add 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   121
by (asm_simp_tac (simpset() delsimps [coeff_add] addsimps [deg_aboveD]) 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   122
by (res_inst_tac [("m", "deg aa"), ("n", "max (deg aa) (deg b)")]
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   123
  SUM_shrink 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   124
by (rtac le_maxI1 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   125
by (asm_simp_tac (simpset() addsimps [deg_aboveD]) 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   126
by (res_inst_tac [("m", "deg b"), ("n", "max (deg aa) (deg b)")]
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   127
  SUM_shrink 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   128
by (rtac le_maxI2 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   129
by (asm_simp_tac (simpset() addsimps [deg_aboveD]) 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   130
(* actual homom property + *)
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   131
by (asm_simp_tac (simpset() addsimps [l_distr, natsum_add]) 1);
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   132
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   133
(* * commutes *)
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   134
by (res_inst_tac [("m", "deg (aa * b)"), ("n", "deg aa + deg b")]
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   135
  SUM_shrink 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   136
by (rtac deg_mult_ring 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   137
by (asm_simp_tac (simpset() delsimps [coeff_mult] addsimps [deg_aboveD]) 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   138
by (rtac trans 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   139
by (rtac CauchySum 2);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   140
by (asm_simp_tac (simpset() addsimps [boundI, deg_aboveD]) 2);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   141
by (asm_simp_tac (simpset() addsimps [boundI, deg_aboveD]) 2);
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   142
(* getting a^i and a^(k-i) together is difficult, so we do it manually *)
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   143
by (res_inst_tac [("s", 
11093
62c2e0af1d30 Changes to HOL/Algebra:
ballarin
parents: 8707
diff changeset
   144
"        setsum  \
62c2e0af1d30 Changes to HOL/Algebra:
ballarin
parents: 8707
diff changeset
   145
\           (%k. setsum \
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   146
\                 (%i. phi (coeff aa i) * (phi (coeff b (k - i)) * \
11093
62c2e0af1d30 Changes to HOL/Algebra:
ballarin
parents: 8707
diff changeset
   147
\                      (a ^ i * a ^ (k - i)))) {..k}) \
62c2e0af1d30 Changes to HOL/Algebra:
ballarin
parents: 8707
diff changeset
   148
\           {..deg aa + deg b}")] trans 1);
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   149
by (asm_simp_tac (simpset()
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   150
    addsimps [power_mult, leD RS add_diff_inverse, natsum_ldistr]) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   151
by (Simp_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   152
(* 1 commutes *)
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   153
by (Asm_simp_tac 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   154
qed "EVAL2_homo";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   155
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   156
Goalw [thm "EVAL2_def"]
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   157
  "!! phi::'a::ring=>'b::ring. EVAL2 phi a (monom b 0) = phi b";
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   158
by (Simp_tac 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   159
qed "EVAL2_const";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   160
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   161
Goalw [thm "EVAL2_def"]
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   162
  "!! phi::'a::domain=>'b::ring. homo phi ==> EVAL2 phi a (monom 1 1) = a";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   163
(* Must be able to distinguish 0 from 1, hence 'a::domain *)
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   164
by (Asm_simp_tac 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   165
qed "EVAL2_monom1";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   166
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   167
Goalw [thm "EVAL2_def"]
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   168
  "!! phi::'a::domain=>'b::ring. homo phi ==> EVAL2 phi a (monom 1 n) = a ^ n";
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   169
by (Simp_tac 1);
8707
paulson
parents: 7998
diff changeset
   170
by (case_tac "n" 1); 
paulson
parents: 7998
diff changeset
   171
by Auto_tac;
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   172
qed "EVAL2_monom";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   173
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   174
Goal
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   175
  "!! phi::'a::ring=>'b::ring. \
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   176
\    homo phi ==> EVAL2 phi a (b *s p) = phi b * EVAL2 phi a p";
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   177
by (asm_simp_tac (simpset() 
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   178
    addsimps [monom_mult_is_smult RS sym, EVAL2_homo, EVAL2_const]) 1);
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   179
qed "EVAL2_smult";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   180
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   181
val up_eqI = thm "up_eqI";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   182
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   183
Goal "monom (a::'a::ring) n = monom a 0 * monom 1 n";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   184
by (simp_tac (simpset() addsimps [monom_mult_is_smult]) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   185
by (rtac up_eqI 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   186
by (Simp_tac 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   187
qed "monom_decomp";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   188
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   189
Goal
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   190
  "!! phi::'a::domain=>'b::ring. \
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   191
\    homo phi ==> EVAL2 phi a (monom b n) = phi b * a ^ n";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   192
by (stac monom_decomp 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   193
by (asm_simp_tac (simpset() 
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   194
    addsimps [EVAL2_homo, EVAL2_const, EVAL2_monom]) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   195
qed "EVAL2_monom_n";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   196
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   197
Goalw [thm "EVAL_def"] "!! a::'a::ring. homo (EVAL a)";
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   198
by (asm_simp_tac (simpset() addsimps [EVAL2_homo]) 1);
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   199
qed "EVAL_homo";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   200
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   201
Goalw [thm "EVAL_def"] "!! a::'a::ring. EVAL a (monom b 0) = b";
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   202
by (asm_simp_tac (simpset() addsimps [EVAL2_const]) 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   203
qed "EVAL_const";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   204
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   205
Goalw [thm "EVAL_def"] "!! a::'a::domain. EVAL a (monom 1 n) = a ^ n";
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   206
by (asm_simp_tac (simpset() addsimps [EVAL2_monom]) 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   207
qed "EVAL_monom";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   208
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   209
Goalw [thm "EVAL_def"] "!! a::'a::ring. EVAL a (b *s p) = b * EVAL a p";
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   210
by (asm_simp_tac (simpset() addsimps [EVAL2_smult]) 1);
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   211
qed "EVAL_smult";
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   212
17479
68a7acb5f22e converted to Isar theory format;
wenzelm
parents: 13735
diff changeset
   213
Goalw [thm "EVAL_def"] "!! a::'a::domain. EVAL a (monom b n) = b * a ^ n";
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   214
by (asm_simp_tac (simpset() addsimps [EVAL2_monom_n]) 1);
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   215
qed "EVAL_monom_n";
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   216
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   217
(* Examples *)
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   218
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   219
Goal
11704
3c50a2cd6f00 * sane numerals (stage 2): plain "num" syntax (removed "#");
wenzelm
parents: 11701
diff changeset
   220
  "EVAL (x::'a::domain) (a*X^2 + b*X^1 + c*X^0) = a * x ^ 2 + b * x ^ 1 + c";
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   221
by (asm_simp_tac (simpset() delsimps [power_Suc]
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   222
    addsimps [EVAL_homo, EVAL_monom, EVAL_monom_n]) 1);
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   223
result();
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   224
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   225
Goal
11093
62c2e0af1d30 Changes to HOL/Algebra:
ballarin
parents: 8707
diff changeset
   226
  "EVAL (y::'a::domain) \
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   227
\    (EVAL (monom x 0) (monom 1 1 + monom (a*X^2 + b*X^1 + c*X^0) 0)) = \
11704
3c50a2cd6f00 * sane numerals (stage 2): plain "num" syntax (removed "#");
wenzelm
parents: 11701
diff changeset
   228
\  x ^ 1 + (a * y ^ 2 + b * y ^ 1 + c)";
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   229
by (asm_simp_tac (simpset() delsimps [power_Suc]
13735
7de9342aca7a HOL-Algebra partially ported to Isar.
ballarin
parents: 11704
diff changeset
   230
    addsimps [EVAL_homo, EVAL_monom, EVAL_monom_n, EVAL_const]) 1);
7998
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   231
result();
3d0c34795831 Algebra and Polynomial theories, by Clemens Ballarin
paulson
parents:
diff changeset
   232