apply (rename_tac s t) (* we show s and t are non-zero in the following 4
lines *) apply (erule conjE,
frule_tac x = t and v = "vv 0"in val_neg_nonzero, assumption+) apply (simp add:less_ant_def, (erule conjE)+,
frule_tac x = s and v = "vv (Suc 0)"in val_neg_nonzero,
assumption+, unfold less_ant_def) apply (rule conjI, assumption+)
apply (frule_tac s = s and t = t and v = "vv 0"in OstrowskiTr2,
assumption+, rule ale_neq_less, assumption+) apply (frule_tac s = s and t = t and v = "vv (Suc 0)"in OstrowskiTr3,
assumption+, rule ale_neq_less, assumption+) apply (subgoal_tac "t ⋅r (( s ± t)<hyphen>K) ∈ carrier K",
simp only:Ostrowski_elem_def,
simp only: nset_m_m[of "Suc 0"], blast) (* Here simp add:nset_m_m[of "Suc 0"] wouldn't work *) apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
rule Ring.ring_tOp_closed, assumption+,
frule_tac s = s and t = t and v = "vv 0"in OstrowskiTr1,
assumption+, rule ale_neq_less, assumption+,
frule_tac x = s and y = t in aGroup.ag_pOp_closed[of "K"], assumption+) apply (cut_tac x = "s ± t"in invf_closed, blast) apply assumption (* in the above two lines, simp wouldn't work *) done
(** subsection on inequality **)
lemma (in Corps) Ostrowski:"∀vv. vals_nonequiv K (Suc n) vv ⟶ (∃x∈carrier K. Ostrowski_elem K (Suc n) vv x)" apply (induct_tac n,
rule allI, rule impI, simp add:Ostrowski_first) (** case (Suc n) **) apply (rule allI, rule impI,
frule_tac n = n and vv = vv in restrict_vals_nonequiv1,
frule_tac n = n and vv = vv in restrict_vals_nonequiv2,
frule_tac a = "compose {h. h ≤ Suc n} vv (skip 1)"in forall_spec,
assumption,
drule_tac a = "compose {h. h ≤ Suc n} vv (skip 2)"in forall_spec,
assumption+, (erule bexE)+) apply (rename_tac n vv s t,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"]) (** case * * * **) apply (frule_tac x = s and y = t in Ring.ring_tOp_closed[of "K"], assumption+,
case_tac "0 ≤ vv (Suc 0) s ∧ 0 ≤ vv (Suc (Suc 0)) t",
frule_tac vv = vv and s = s and t = t in OstrowskiTr5, assumption+) apply blast
(** case * * * **) apply (simp,
case_tac "0 ≤ (vv (Suc 0) s)", simp,
frule_tac n = "Suc (Suc n)"and m = "Suc (Suc 0)"and vv = vv in
vals_nonequiv_valuation,
simp,
frule_tac v = "vv (Suc (Suc 0))"and x = t in OstrowskiTr6,
assumption+,
frule_tac x = "1r± t ⋅r (1r± -a t)"in invf_closed1,
frule_tac x = t and y = "(1r± t ⋅r (1r± -a t))<hyphen>K"in
Ring.ring_tOp_closed, assumption+, simp) apply (subgoal_tac "Ostrowski_elem K (Suc (Suc n)) vv (t ⋅r ((1r± t ⋅r (1r± (-a t)))<hyphen>K))",
blast) apply (subst Ostrowski_elem_def,
rule conjI,
thin_tac "Ostrowski_elem K (Suc n) (compose {h. h ≤ Suc n} vv (skip (Suc 0))) s",
thin_tac "vals_nonequiv K (Suc n) (compose {h. h ≤ Suc n} vv (skip (Suc 0)))",
thin_tac "vals_nonequiv K (Suc n) (compose {h. h≤ Suc n} vv (skip 2))",
thin_tac "0 ≤ (vv (Suc 0) s)",
frule_tac n = "Suc (Suc n)"and vv = vv and m = 0in
vals_nonequiv_valuation, simp,
rule_tac v = "vv 0"and x = t in
OstrowskiTr8, assumption+)
apply (simp add:Ostrowski_elem_def, (erule conjE)+,
thin_tac "∀j∈nset (Suc 0) (Suc n). 0 < (compose {h. h ≤ (Suc n)} vv (skip 2) j t)",
simp add:compose_def skip_def,
rule ballI,
thin_tac "0 ≤ (vv (Suc 0) s)",
thin_tac "Ostrowski_elem K (Suc n) (compose {h. h ≤ (Suc n)} vv (skip (Suc 0))) s",
frule_tac n = "Suc (Suc n)"and vv = vv and m = j in
vals_nonequiv_valuation,
simp add:nset_def, simp add:Ostrowski_elem_def, (erule conjE)+) (** case * * * **) apply (case_tac "j = Suc 0", simp,
drule_tac x = "Suc 0"in bspec,
simp add:nset_def,
simp add:compose_def skip_def,
rule_tac v = "vv (Suc 0)"and x = t in
OstrowskiTr9, assumption+,
frule_tac j = j and n = n in nset_Tr51, assumption+,
drule_tac x = "j - Suc 0"in bspec, assumption+,
simp add:compose_def skip_def) (** case * * * **) apply (case_tac "j = Suc (Suc 0)", simp) apply (
rule_tac v = "vv (Suc (Suc 0))"and x = t in OstrowskiTr10,
assumption+) apply (
subgoal_tac "¬ j - Suc 0 ≤ Suc 0", simp add:nset_def) apply(
rule_tac v = "vv j"and x = t in
OstrowskiTr9) apply (simp add:nset_def, assumption+) apply (simp add:nset_def, (erule conjE)+, rule nset_Tr52, assumption+,
thin_tac "vals_nonequiv K (Suc n) (compose {h. h ≤ (Suc n)} vv (skip (Suc 0)))",
thin_tac "vals_nonequiv K (Suc n) (compose {h. h ≤ (Suc n)} vv (skip 2))",
thin_tac "Ostrowski_elem K (Suc n) (compose {h. h ≤(Suc n)} vv (skip 2)) t") apply (subgoal_tac "s ⋅r ((1r± s ⋅r (1r± -a s))<hyphen>K) ∈ carrier K",
subgoal_tac "Ostrowski_elem K (Suc (Suc n)) vv (s ⋅r ((1r± s ⋅r (1r± -a s))<hyphen>K))", blast) prefer2 apply (frule_tac n = "Suc (Suc n)"and m = "Suc 0"and vv = vv in
vals_nonequiv_valuation, simp,
frule_tac v = "vv (Suc 0)"and x = s in OstrowskiTr6, assumption+,
rule Ring.ring_tOp_closed, assumption+,
frule_tac x = "1r± s ⋅r (1r± -a s)"in invf_closed1, simp,
simp add:Ostrowski_elem_def) apply (rule conjI) apply (rule_tac v = "vv 0"and x = s in OstrowskiTr8,
simp add:vals_nonequiv_valuation, assumption+) apply (
thin_tac "vals_nonequiv K (Suc (Suc n)) vv",
(erule conjE)+,
thin_tac "∀j∈nset (Suc 0) (Suc n). 0 < (compose {h. h ≤ (Suc n)} vv (skip (Suc 0)) j s)",
simp add:compose_def skip_def, rule ballI) (** case *** *** **) apply (case_tac "j = Suc 0", simp,
rule_tac v = "vv (Suc 0)"and x = s in OstrowskiTr10,
simp add:vals_nonequiv_valuation, assumption+,
rule_tac v = "vv j"and x = s in OstrowskiTr9,
simp add:vals_nonequiv_valuation nset_def, assumption,
(erule conjE)+, simp add:compose_def skip_def,
frule_tac j = j in nset_Tr51, assumption+,
drule_tac x = "j - Suc 0"in bspec, assumption+) apply (simp add:nset_def) done
lemma (in Corps) val_1_nonzero:"[valuation K v; x ∈ carrier K; v x = 1]==> x ≠0" apply (rule contrapos_pp, simp+,
simp add:value_of_zero,
rotate_tac 3, drule sym, simp only:ant_1[THEN sym],
simp del:ant_1) done
lemma (in Corps) Approximation1_5Tr1:"[vals_nonequiv K (Suc n) vv; n_val K (vv 0) = vv 0; a ∈ carrier K; vv 0 a = 1; x ∈ carrier K; Ostrowski_elem K (Suc n) vv x]==> ∀m. 2 ≤ m ⟶ vv 0 ((1r± -a x)^ m± a ⋅r (x^ m)) = 1" apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"],
rule allI, rule impI,
frule vals_nonequiv_valuation[of "Suc n""vv""0"],
simp,
simp add:Ostrowski_elem_def, frule conjunct1, fold Ostrowski_elem_def,
frule val_1_nonzero[of "vv 0""a"], assumption+) apply (frule vals_nonequiv_valuation[of "Suc n""vv""0"], simp,
frule val_nonzero_noninf[of "vv 0""a"], assumption+,
frule val_unit_cond[of "vv 0""x"], assumption+,
frule_tac n = m in Ring.npClose[of "K""x"], assumption+,
frule aGroup.ag_mOp_closed[of "K""x"], assumption+,
frule aGroup.ag_pOp_closed[of "K""1r""-a x"], assumption+) apply (subgoal_tac "0 < m",
frule_tac x = "a ⋅r (x^ m)"and y = "(1r± -a x)^ m"in
value_less_eq[of "vv 0"],
rule Ring.ring_tOp_closed, assumption+,
rule Ring.npClose, assumption+, simp add: val_t2p,
frule value_zero_nonzero[of "vv 0""x"], assumption+,
simp add:val_exp_ring[THEN sym], simp add:asprod_n_0 aadd_0_r) apply (case_tac "x = 1r", simp add:aGroup.ag_r_inv1,
frule_tac n = m in Ring.npZero_sub[of "K"], simp,
simp add:value_of_zero) apply (cut_tac inf_ge_any[of "1"], simp add: less_le) apply (rotate_tac -1, drule not_sym,
frule aGroup.ag_neq_diffnonzero[of "K""1r""x"],
simp add:Ring.ring_one[of "K"], assumption+, simp,
simp add:val_exp_ring[THEN sym],
cut_tac n1 = m in of_nat_0_less_iff[THEN sym]) apply (cut_tac a = "0 < m"and b = "0 < int m"in a_b_exchange, simp,
assumption) apply (thin_tac "(0 < m) = (0 < int m)",
frule val_nonzero_z[of "vv 0""1r± -a x"], assumption+,
erule exE, simp, simp add:asprod_amult a_z_z,
simp only:ant_1[THEN sym], simp only:aless_zless, simp add:ge2_zmult_pos)
apply (subst aGroup.ag_pOp_commute[of "K"], assumption+,
rule Ring.npClose, assumption+, rule Ring.ring_tOp_closed[of "K"],
assumption+,
rotate_tac -1, drule sym, simp,
thin_tac "vv 0 (a ⋅r x^ m± (1r± -a x)^ m) = vv 0 (a ⋅r x^ m)") apply (simp add:val_t2p,
frule value_zero_nonzero[of "vv 0""x"], assumption+,
simp add:val_exp_ring[THEN sym], simp add:asprod_n_0,
simp add:aadd_0_r,
cut_tac z = m in less_le_trans[of "0""2"], simp, assumption+) done
lemma (in Corps) Approximation1_5Tr3:"[vals_nonequiv K (Suc n) vv; x ∈ carrier K; Ostrowski_elem K (Suc n) vv x; j ∈ nset (Suc 0) (Suc n)] ==> vv j ((1r± -a x)^ m) = 0" apply (frule Ostrowski_elem_not_one[of "n""vv""x"], assumption+,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"],
frule aGroup.ag_pOp_closed[of "K""1r""-a x"], assumption+) apply (simp add:aGroup.ag_mOp_closed, simp add:nset_def,
frule_tac m = j in vals_nonequiv_valuation[of "Suc n""vv"],
simp,
frule_tac v1 = "vv j"and x1 = "1r± -a x"and n1 = m in
val_exp_ring[THEN sym], assumption+)
apply (case_tac "m = 0", simp,
drule_tac x = l in bspec, simp add:nset_def,
simp add:transpos_ij_2,
drule_tac x = m in bspec, simp add:nset_def,
simp add:transpos_id) done
lemma (in Corps) Ostrowski_baseTr1:"[vals_nonequiv K (Suc n) vv; l ≤ (Suc n)] ==> 0 < ((vv l) (1r± -a (Ostrowski_base K vv (Suc n) l)))" by (simp add:Ostrowski_baseTr0)
lemma (in Corps) Ostrowski_baseTr2:"[vals_nonequiv K (Suc n) vv; l ≤ (Suc n); m ≤ (Suc n); l ≠ m]==> 0 < ((vv m) (Ostrowski_base K vv (Suc n) l))" apply (frule Ostrowski_baseTr0[of "n""vv""l"], assumption+) apply simp done
lemma (in Corps) nsum_in_VrTr:"valuation K v ==> (∀j ≤ n. f j ∈ carrier K) ∧ (∀j ≤ n. 0 ≤ (v (f j))) ⟶ (nsum K f n) ∈ carrier (Vr K v)" apply (induct_tac n) apply (rule impI, erule conjE, simp add:val_pos_mem_Vr) apply (rule impI, erule conjE) apply (frule Vr_ring[of v], frule Ring.ring_is_ag[of "Vr K v"],
frule_tac x = "f (Suc n)"and y = "nsum K f n"in
aGroup.ag_pOp_closed[of "Vr K v"],
subst val_pos_mem_Vr[THEN sym, of "v"], assumption+,
simp, simp, simp) apply (simp, subst Vr_pOp_f_pOp[of "v", THEN sym], assumption+,
subst val_pos_mem_Vr[THEN sym, of v], assumption+,
simp+) apply (subst aGroup.ag_pOp_commute, assumption+, simp add:val_pos_mem_Vr,
assumption) done
lemma (in Corps) nsum_in_Vr:"[valuation K v; ∀j ≤ n. f j ∈ carrier K; ∀j ≤ n. 0 ≤ (v (f j))]==> (nsum K f n) ∈ carrier (Vr K v)" apply (simp add:nsum_in_VrTr) done
lemma (in Corps) nsum_mem_in_Vr:"[valuation K v; ∀j ≤ n. (f j) ∈ carrier K; ∀j ≤ n. 0 ≤ (v (f j))]==> (nsum K f n) ∈ carrier (Vr K v)" by (rule nsum_in_Vr)
lemma (in Corps) val_nscal_ge_selfTr:"[valuation K v; x ∈ carrier K; 0 ≤ v x] ==> v x ≤ v (n × x)" apply (cut_tac field_is_ring, induct_tac n, simp) apply (simp add:value_of_zero,
simp,
frule_tac y = "n × x"in amin_le_plus[of "v""x"], assumption+,
rule Ring.nsClose, assumption+) apply (simp add:amin_def,
frule Ring.ring_is_ag[of K],
frule_tac n = n in Ring.nsClose[of K x], assumption+,
simp add:aGroup.ag_pOp_commute) done
lemma (in Corps) ApproximationTr:"[valuation K v; x ∈ carrier K; 0 ≤ (v x)]==> v x ≤ (v (1r± -a ((1r± x)^ (Suc n))))" apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
case_tac "x = 0",
simp, frule Ring.ring_one[of "K"], simp add:aGroup.ag_r_zero,
simp add:Ring.npOne, simp add:Ring.ring_l_one,simp add:aGroup.ag_r_inv1,
subst Ring.tail_of_expansion1[of "K""x"], assumption+,
frule Ring.ring_one[of "K"]) apply (subgoal_tac "(nsum K (λi. nC i× x^ i) n)∈carrier (Vr K v)",
frule Vr_mem_f_mem[of "v""(nsum K (λi. nC i× x^ i) n)"],
assumption+,
frule_tac x = x and y = "nsum K (λi. nC i× x^ i) n"in
Ring.ring_tOp_closed[of "K"], assumption+,
subst aGroup.ag_pOp_commute[of "K" _ "1r"], assumption+,
subst aGroup.ag_p_inv[of "K""1r"], assumption+,
subst aGroup.ag_pOp_assoc[THEN sym], assumption+,
simp add:aGroup.ag_mOp_closed, rule aGroup.ag_mOp_closed, assumption+,
simp del:binomial_Suc_Suc add:aGroup.ag_r_inv1, subst aGroup.ag_l_zero,
assumption+,
rule aGroup.ag_mOp_closed, assumption+, simp add:val_minus_eq)
apply (subst val_t2p[of v], assumption+) apply (
simp add:val_pos_mem_Vr[THEN sym, of v "nsum K (λi.(C + C i) × x^ i) n"],
frule aadd_le_mono[of "0""v (nsum K (λi.(C + C i) × x^ i) n)" "v x"], simp add:aadd_0_l, simp add:aadd_commute[of "v x"])
lemma (in Corps) x_pow_fSum_in_Vr:"[valuation K v; x ∈ carrier (Vr K v)]==> (nsum K (npow K x) n) ∈ carrier (Vr K v)" apply (frule Vr_ring[of v]) apply (induct_tac n) apply simp apply (frule Ring.ring_one[of "Vr K v"]) apply (simp add:Vr_1_f_1) apply (simp del:npow_suc) apply (frule Ring.ring_is_ag[of "Vr K v"])
apply (subst Vr_pOp_f_pOp[THEN sym, of v], assumption+) apply (subst Vr_exp_f_exp[THEN sym, of v], assumption+) apply (rule Ring.npClose[of "Vr K v"], assumption+) apply (rule aGroup.ag_pOp_closed[of "Vr K v"], assumption+) apply (subst Vr_exp_f_exp[THEN sym, of v], assumption+) apply (rule Ring.npClose[of "Vr K v"], assumption+) done
lemma (in Corps) val_1mx_pos:"[valuation K v; x ∈ carrier K; 0 < (v (1r± -a x))]==> v x = 0" apply (cut_tac field_is_ring, frule Ring.ring_one[of "K"],
frule Ring.ring_is_ag[of "K"]) apply (frule aGroup.ag_mOp_closed[of "K""x"], assumption+) apply (frule aGroup.ag_pOp_closed[of "K""1r""-a x"], assumption+) apply (frule aGroup.ag_mOp_closed[of "K""1r± -a x"], assumption+) apply (cut_tac x = x and y = "1r± -a (1r± -a x)"and f = v in
eq_elems_eq_val) apply (subst aGroup.ag_p_inv, assumption+,
subst aGroup.ag_pOp_assoc[THEN sym], assumption+,
rule aGroup.ag_mOp_closed, assumption+,
subst aGroup.ag_inv_inv, assumption+,
subst aGroup.ag_r_inv1, assumption+,
subst aGroup.ag_l_zero, assumption+,
(simp add:aGroup.ag_inv_inv)+,
frule value_less_eq[of v "1r""-a (1r± -a x)"],
assumption+) apply (simp add:val_minus_eq value_of_one,
simp add:value_of_one) done
lemma (in Corps) val_1mx_pow:"[valuation K v; x ∈ carrier K; 0 < (v (1r± -a x))]==> 0 < (v (1r± -a x^ (Suc n)))" apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"]) apply (subst Ring.one_m_x_times[THEN sym, of K x n], assumption+) apply (frule Ring.ring_one[of "K"],
frule x_pow_fSum_in_Vr[of v x n],
subst val_pos_mem_Vr[THEN sym], assumption+,
frule val_1mx_pos[of "v""x"], assumption+,
simp)
apply (subst val_t2p, assumption+,
rule aGroup.ag_pOp_closed, assumption+,
simp add:aGroup.ag_mOp_closed, simp add:Vr_mem_f_mem,
frule val_pos_mem_Vr[THEN sym, of v "nsum K (npow K x) n"],
simp add:Vr_mem_f_mem, simp) apply(frule aadd_le_mono[of "0""v (nsum K (npow K x) n)""v (1r± -a x)"],
simp add:aadd_0_l, simp add:aadd_commute) done
lemma (in Corps) ApproximationTr3:"[vals_nonequiv K (Suc n) vv; ∀l ≤ (Suc n). x l ∈ carrier K; j ≤ (Suc n)]==> ∃L.(∀N. L < N ⟶ (an m) ≤ (vv j ((Σe K (λk∈{h. h ≤ (Suc n)}. (x k) ⋅r (1r± -a ((1r± -a (((Ω vv (Suc n)) k)^ N))^ N))) (Suc n)) ± -a (x j))))" apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"]) apply (frule_tac vals_nonequiv_valuation[of "Suc n""vv" j], assumption+) apply (subgoal_tac "∀N. Σe K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅r (1r± -a (1r± -a ((Ω vv (Suc n)) j)^ N)^ N)) (Suc n) ± -a (x j) = Σe K (λl∈{h. h≤ (Suc n)}. (if l ≠ j then (x l) ⋅r (1r± -a (1r± -a ((Ω vv (Suc n)) l)^ N)^ N) else (x j) ⋅r (1r± -a (1r± -a ((Ω vv (Suc n)) l)^ N)^ N± -a 1r))) (Suc n)") apply (simp del:nsum_suc) apply (thin_tac "∀N. Σe K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅r (1r± -a (1r± -a (Ω vv (Suc n)) j^ N)^ N)) (Suc n) ± -a (x j) = Σe K (λl∈{h. h ≤ (Suc n)}. if l ≠ j then (x l) ⋅r (1r± -a (1r± -a (Ω vv (Suc n)) l^ N)^ N) else (x j) ⋅r (1r± -a (1r± -a (Ω vv (Suc n)) l^ N)^ N± -a 1r)) (Suc n)") prefer2apply (rule allI) apply (rule eSum_minus_x, assumption+) apply (rule allI, rule impI) apply (rule ApproximationTr0) apply (simp add:Ostrowski_base_mem) apply assumption apply (rule ballI, simp) apply simp apply (frule Ring.ring_one[of "K"]) apply (cut_tac aa = "(Ω vv (Suc n)) j"and N = N in
ApproximationTr0) apply (simp add:Ostrowski_base_mem) apply (subst aGroup.ag_pOp_assoc, assumption+) apply (rule aGroup.ag_mOp_closed, assumption+)+ apply (subst aGroup.ag_pOp_commute[of "K" _ "-a 1r"], assumption+) apply (rule aGroup.ag_mOp_closed, assumption+)+
apply (subgoal_tac "∃L. ∀N. L < N ⟶ (∀ja ≤ (Suc n). (an m) ≤ ((vv j ∘ (λl∈{h. h ≤ (Suc n)}. if l ≠ j then (x l) ⋅r (1r± -a (1r± -a ((Ω vv (Suc n)) l)^ N)^ N) else (x j) ⋅r (1r± -a (1r± -a ((Ω vv (Suc n)) l)^ N)^ N± -a 1r))) ja))")
definition
distinct_pds :: "[_, nat, nat → ('b → ant) set] → bool"where "distinct_pds K n P ⟷ (∀j≤ n. P j ∈ PdsK) ∧ (∀l≤ n. ∀m≤ n. l ≠ m ⟶ P l ≠ P m)"
(** pds --- prime divisors **) lemma (in Corps) distinct_pds_restriction:"[distinct_pds K (Suc n) P]==> distinct_pds K n P" apply (simp add:distinct_pds_def) done
lemma (in Corps) ring_n_distinct_prime_divisors:"distinct_pds K n P ==> Ring (Sr K {x. x∈carrier K ∧ (∀j≤ n. 0 ≤ ((νK (P j)) x))})" apply (simp add:distinct_pds_def) apply (erule conjE) apply (cut_tac field_is_ring) apply (rule Ring.Sr_ring, assumption+) apply (subst sr_def) apply (rule conjI) apply (rule subsetI) apply simp apply (rule conjI) apply (simp add:Ring.ring_one) apply (rule allI, rule impI) apply (cut_tac P = "P j"in representative_of_pd_valuation, simp,
simp add:value_of_one) apply (rule ballI)+ apply simp apply (frule Ring.ring_is_ag[of "K"]) apply (erule conjE)+ apply (frule_tac x = y in aGroup.ag_mOp_closed[of "K"], assumption+) apply (frule_tac x = x and y = "-a y"in aGroup.ag_pOp_closed[of "K"],
assumption+) apply simp apply (rule conjI) apply (rule allI, rule impI) apply (rotate_tac -4, frule_tac a = j in forall_spec, assumption,
rotate_tac -3,
drule_tac a = j in forall_spec, assumption) apply (cut_tac P = "P j"in representative_of_pd_valuation, simp) apply (frule_tac v = "ν (P j)"and x = x and y = "-a y"in amin_le_plus,
assumption+) apply (simp add:val_minus_eq) apply (frule_tac x = "(ν (P j)) x"and y = "(ν (P j)) y"in amin_ge1[of "0"]) apply simp apply (rule_tac j = "amin ((ν (P j)) x) ((ν (P j)) y)"and k = "(ν (P j)) (x ± -a y)"in ale_trans[of "0"], assumption+) apply (simp add:Ring.ring_tOp_closed)
definition
ring_n_pd :: "[('b, 'm) Ring_scheme, nat → ('b → ant) set, nat ] → ('b, 'm) Ring_scheme"
(‹(3O _ _)› [98,98,99]98) where "O P n = Sr K {x. x ∈ carrier K ∧ (∀j ≤ n. 0 ≤ ((ν (P j)) x))}" (** ring defined by n prime divisors **)
lemma (in Corps) ring_n_pd:"distinct_pds K n P ==> Ring (O P n)" by (simp add:ring_n_pd_def, simp add:ring_n_distinct_prime_divisors)
lemma (in Corps) ring_n_pd_Suc:"distinct_pds K (Suc n) P ==> carrier (OK P (Suc n)) ⊆ carrier (O P n)" apply (rule subsetI) apply (simp add:ring_n_pd_def Sr_def) done
lemma (in Corps) ring_n_pd_pOp_K_pOp:"[distinct_pds K n P; x∈carrier (O P n); y ∈ carrier (O P n)]==> x ±O P n) y = x ± y" apply (simp add:ring_n_pd_def Sr_def) done
lemma (in Corps) ring_n_pd_tOp_K_tOp:"[distinct_pds K n P; x ∈carrier (O P n); y ∈ carrier (O P n)]==> x ⋅rO P n) y = x ⋅r y" apply (simp add:ring_n_pd_def Sr_def) done
lemma (in Corps) ring_n_eSum_K_eSumTr:"distinct_pds K n P ==> (∀j≤m. f j ∈ carrier (O P n)) ⟶ nsum (O P n) f m = nsum K f m" apply (induct_tac m) apply (rule impI, simp)
apply (rule impI, simp,
subst ring_n_pd_pOp_K_pOp, assumption+,
frule_tac n = n in ring_n_pd[of _ "P"],
frule_tac Ring.ring_is_ag, drule sym, simp) apply (rule aGroup.nsum_mem, assumption+, simp+) done
lemma (in Corps) ring_n_eSum_K_eSum:"[distinct_pds K n P; ∀j ≤ m. f j ∈ carrier (O P n)]==> nsum (O P n) f m = nsum K f m" apply (simp add:ring_n_eSum_K_eSumTr) done
lemma (in Corps) ideal_eSum_closed:"[distinct_pds K n P; ideal (O P n) I; ∀j ≤ m. f j ∈ I]==> nsum K f m ∈ I" apply (frule ring_n_pd[of "n""P"]) thm Ring.ideal_nsum_closed apply (frule_tac n = m in
Ring.ideal_nsum_closed[of "(O P n)""I" _ "f"], assumption+) apply (subst ring_n_eSum_K_eSum [THEN sym, of n P m f], assumption+,
rule allI, simp add:Ring.ideal_subset) apply assumption done
definition
prime_n_pd :: "[_, nat → ('b → ant) set, nat, nat] → 'b set"
(‹(4P _ _ _)› [98,98,98,99]98) where "P P n j = {x. x ∈ (carrier (O P n)) ∧ 0 < ((ν (P j)) x)}"
lemma (in Corps) zero_in_ring_n_pd_zero_K:"distinct_pds K n P ==> 0O P n) = 0" apply (simp add:ring_n_pd_def Sr_def) done
lemma (in Corps) one_in_ring_n_pd_one_K:"distinct_pds K n P ==> 1rO P n) = 1r" apply (simp add:ring_n_pd_def Sr_def) done
lemma (in Corps) mem_ring_n_pd_mem_K:"[distinct_pds K n P; x ∈carrier (O P n)] ==> x ∈ carrier K" apply (simp add:ring_n_pd_def Sr_def) done
lemma (in Corps) ring_n_tOp_K_tOp:"[distinct_pds K n P; x ∈ carrier (O P n); y ∈ carrier (O P n)]==> x ⋅rO P n) y = x ⋅r y" apply (simp add:ring_n_pd_def Sr_def) done
lemma (in Corps) ring_n_exp_K_exp:"[distinct_pds K n P; x ∈ carrier (O P n)] ==> x^ m = x^O P n) m" apply (frule ring_n_pd[of "n""P"]) apply (induct_tac m) apply simp apply (simp add:one_in_ring_n_pd_one_K)
apply simp apply (frule_tac n = na in Ring.npClose[of "O P n""x"], assumption+) apply (simp add:ring_n_tOp_K_tOp) done
lemma (in Corps) prime_n_pd_prime:"[distinct_pds K n P; j ≤ n]==> prime_ideal (O P n) (P P n j)" apply (subst prime_ideal_def) apply (rule conjI) apply (simp add:ideal_def) apply (rule conjI) apply (rule aGroup.asubg_test) apply (frule ring_n_pd[of "n""P"], simp add:Ring.ring_is_ag) apply (rule subsetI, simp add:prime_n_pd_def) apply (subgoal_tac "0O P n)∈ P P n j") apply blast
lemma (in Corps) n_eq_val_eq_idealTr: "[distinct_pds K n P; x ∈ carrier (O P n); y ∈ carrier (O P n); \<forall>j ≤ n. ((ν (P j)) x) ≤ ((ν (P j)) y)]==> Rxa (O P n) y ⊆ Rxa (O P n) x" apply (subgoal_tac "∀j ≤ n. valuation K (ν (P j))") apply (case_tac "x = 0O P n)",
simp add:zero_in_ring_n_pd_zero_K) apply (simp add:value_of_zero) apply (subgoal_tac "y = 0", simp,
drule_tac a = n in forall_spec, simp,
drule_tac a=n in forall_spec, simp) apply (cut_tac inf_ge_any[of "(ν (P n)) y"],
frule ale_antisym[of "(ν (P n)) y""∞"], assumption+) apply (rule value_inf_zero, assumption+) apply (simp add:mem_ring_n_pd_mem_K, assumption)
apply (frule ring_n_pd[of n P]) apply (subgoal_tac "∀j≤n. 0 ≤ ((ν (P j)) (y ⋅r (x<hyphen>K)))") apply (subgoal_tac "(y ⋅r (x<hyphen>K)) ∈ carrier (O P n)") apply (cut_tac field_frac_mul[of "y""x"],
frule Ring.rxa_in_Rxa[of "O P n""x""y ⋅r (x<hyphen>K)"], assumption+,
simp add:ring_n_pd_tOp_K_tOp[THEN sym],
frule Ring.principal_ideal[of "O P n""x"], assumption+)
lemma (in Corps) n_eq_val_eq_ideal:"[distinct_pds K n P; x ∈ carrier (O P n); y ∈ carrier (O P n); ∀j ≤ n.((ν (P j)) x) = ((ν (P j)) y)]==> Rxa (O P n) x = Rxa (O P n) y" apply (rule equalityI) apply (subgoal_tac "∀j≤ n. (ν (P j)) y ≤ ((ν (P j)) x)") apply (rule n_eq_val_eq_idealTr, assumption+) apply (rule allI, rule impI, simp)
definition
mI_gen :: "[_ , nat → ('r → ant) set, nat, 'r set] → 'r"where "mI_gen K P n I = (SOME x. x ∈ I ∧ (∀j ≤ n. (ν (P j)) x = LI K (ν (P j)) I))"
definition
mL :: "[_, nat → ('r → ant) set, 'r set, nat] → int"where "mL K P I j = tna (LI K (ν (P j)) I)"
lemma (in Corps) mI_vals_nonempty:"[distinct_pds K n P; ideal (O P n) I; j≤n] ==> (ν (P j)) ` I ≠ {}" apply (frule ring_n_pd[of "n""P"]) apply (frule Ring.ideal_zero [of "O P n""I"], assumption+)
apply (simp add:image_def) apply blast done
lemma (in Corps) mI_vals_LB:"[distinct_pds K n P; ideal (O P n) I; j ≤ n]==> ((ν (P j)) `I) ⊆ LBset (ant 0)" apply (rule subsetI) apply (simp add:image_def, erule bexE) apply (frule ring_n_pd[of "n""P"]) apply (frule_tac h = xa in Ring.ideal_subset[of "O P n""I"], assumption+) apply (thin_tac "ideal (O P n) I") apply (thin_tac "Ring (O P n)") apply (simp add: ring_n_pd_def Sr_def) apply (erule conjE)+ apply (drule_tac a = j in forall_spec, simp)
apply (simp add:LBset_def ant_0) done
lemma (in Corps) mL_hom:"[distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n)]==> ∀j ≤ n. mL K P I j ∈ Zset" apply (rule allI, rule impI) apply (simp add:mL_def LI_def) apply (simp add:Zset_def) done
lemma (in Corps) ex_Zleast_in_mI:"[distinct_pds K n P; ideal (O P n) I; j ≤ n] ==>∃x∈I. (ν (P j)) x = LI K (ν (P j)) I" apply (frule_tac j = j in mI_vals_nonempty[of "n""P""I"], assumption+) apply (frule_tac j = j in mI_vals_LB[of "n""P""I"], assumption+) apply (frule_tac A = "(ν (P j)) ` I"and z = 0in AMin_mem, assumption+) apply (simp add:LI_def) apply (thin_tac "(ν (P j)) ` I ⊆ LBset (ant 0)") apply (simp add:image_def, erule bexE) apply (drule sym) apply blast done
lemma (in Corps) val_LI_pos:"[distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; j ≤ n]==> 0 ≤ LI K (ν (P j)) I" apply (frule_tac j = j in mI_vals_nonempty[of n P I], assumption+) apply (frule_tac j = j in mI_vals_LB[of n P I], assumption+) apply (frule_tac A = "(ν (P j)) ` I"and z = 0in AMin_mem, assumption+) apply (simp add:LI_def) apply (frule subsetD[of "(ν (P j)) ` I""LBset (ant 0)""AMin ((ν (P j)) ` I)"], assumption+) apply (simp add:LBset_def ant_0) done
lemma (in Corps) val_LI_noninf:"[distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; j ≤ n]==> LI K (ν (P j)) I ≠∞" apply (frule_tac j = j in mI_vals_nonempty[of "n""P""I"], assumption+) apply (frule_tac j = j in mI_vals_LB[of "n""P""I"], assumption+) apply (frule_tac A = "(ν (P j)) ` I"and z = 0in AMin, assumption+) apply (thin_tac "(ν (P j)) ` I ⊆ LBset (ant 0)",
thin_tac "(ν (P j) ) ` I ≠ {}") apply (frule ring_n_pd[of "n""P"]) apply (frule Ring.ideal_zero[of "O P n""I"], assumption+) apply (erule conjE, simp add:LI_def) apply (frule singleton_sub[of "0 P n""I"]) apply (frule sets_not_eq[of "I""{0 P n}"],
assumption+, erule bexE) apply (simp add:zero_in_ring_n_pd_zero_K) apply (subgoal_tac "∃x∈I. AMin ((ν (P j)) ` I) = (ν (P j)) x",
erule bexE) apply simp apply (drule_tac x = a in bspec, assumption) apply (thin_tac "AMin ((ν (P j)) ` I) = (ν (P j)) x")
apply (frule_tac h = a in Ring.ideal_subset[of "O P n""I"], assumption+) apply (frule_tac x = a in mem_ring_n_pd_mem_K[of n P], assumption+) apply (simp add:distinct_pds_def, (erule conjE)+) apply (cut_tac representative_of_pd_valuation[of "P j"]) deferapply simp apply blast apply (frule_tac x = a in val_nonzero_z[of "ν (P j)"], assumption+,
erule exE, simp) apply (thin_tac "∀l ≤ n. ∀m ≤ n. l ≠ m ⟶ P l ≠ P m",
thin_tac "(ν (P j)) a = ant z")
lemma (in Corps) Zleast_in_mI_pos:"[distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; j ≤ n]==> 0 ≤ mL K P I j" apply (simp add:mL_def) apply (frule ex_Zleast_in_mI[of "n""P""I""j"], assumption+,
erule bexE, frule sym, thin_tac "(ν (P j)) x = LI K (ν (P j)) I") apply (subgoal_tac "LI K (ν (P j)) I ≠∞", simp) apply (thin_tac "LI K (ν (P j)) I = (ν (P j)) x")
apply (frule ring_n_pd[of "n""P"]) apply (frule_tac h = x in Ring.ideal_subset[of "O P n""I"], assumption+) apply (thin_tac "ideal (O P n) I") apply (thin_tac "Ring (O P n)") apply (simp add: ring_n_pd_def Sr_def) apply (erule conjE) apply (drule_tac a = j in forall_spec, assumption) apply (simp add:apos_tna_pos) apply (rule val_LI_noninf, assumption+) done
lemma (in Corps) Zleast_mL_I:"[distinct_pds K n P; ideal (O P n) I; j ≤ n; I ≠ {0O P n)}; x ∈ I]==> ant (mL K P I j) ≤ ((ν (P j)) x)" apply (frule val_LI_pos[of "n""P""I""j"], assumption+) apply (frule apos_neq_minf[of "LI K (ν (P j)) I"]) apply (frule val_LI_noninf[of "n""P""I""j"], assumption+) apply (simp add:mL_def LI_def) apply (simp add:ant_tna) apply (frule Zleast_in_mI_pos[of "n""P""I""j"], assumption+)
lemma (in Corps) KbaseTr1:"distinct_pds K n P ==> KbaseP K P n (Kb n P )" apply (subst Kbase_def) apply (frule KbaseTr[of n P]) apply (erule exE) apply (simp add:someI) done
lemma (in Corps) Kbase_hom:"distinct_pds K n P ==> ∀j ≤ n. (Kb n P) j ∈ carrier K" apply (frule KbaseTr1[of "n""P"]) apply (simp add:KbaseP_def) done
lemma (in Corps) Kbase_Kronecker:"distinct_pds K n P ==> ∀j ≤ n. ∀l ≤ n. (ν (P j)) ((Kb n P) l) = δ l" apply (frule KbaseTr1[of n P]) apply (simp add:KbaseP_def) done
lemma (in Corps) Kbase_nonzero:"distinct_pds K n P ==> ∀j ≤ n. (Kb n P) j ≠0" apply (rule allI, rule impI) apply (frule Kbase_Kronecker[of n P]) apply (subgoal_tac "(ν (P j)) ((Kb n P) j) = δ j") apply (thin_tac "∀j≤n. (∀l≤n. ((ν P j) ((Kb n P) l)) = δ l)") apply (simp add:Kronecker_delta_def) apply (rule contrapos_pp, simp+) apply (cut_tac P = "P j"in representative_of_pd_valuation) apply (simp add:distinct_pds_def) apply (simp only:value_of_zero, simp only:ant_1[THEN sym],
frule sym, thin_tac " ∞ = ant 1", simp del:ant_1) apply simp done
lemma (in Corps) Kbase_hom1:"distinct_pds K n P ==> ∀j ≤ n. (Kb n P) j ∈ carrier K - {0}" by(simp add:Kbase_nonzero Kbase_hom)
definition
Zl_mI :: "[_, nat → ('b → ant) set, 'b set] → nat → 'b"where "Zl_mI K P I j = (SOME x. (x ∈ I ∧ ( (ν (P j)) x = LI K (ν (P j)) I)))"
lemma (in Corps) value_Zl_mI:"[distinct_pds K n P; ideal (O P n) I; j ≤ n] ==> (Zl_mI K P I j ∈ I) ∧ (ν (P j)) (Zl_mI K P I j) = LI K (ν (P j)) I" apply (subgoal_tac "∃x. (x ∈ I ∧ ((ν (P j)) x = LI K (ν (P j)) I))") apply (subst Zl_mI_def)+ apply (rule someI2_ex, assumption+) apply (frule ex_Zleast_in_mI[of "n""P""I""j"], assumption+) apply (erule bexE, blast) done
lemma (in Corps) Zl_mI_nonzero:"[distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; j ≤ n]==> Zl_mI K P I j ≠0" apply (case_tac "n = 0") apply (simp add:distinct_pds_def) apply (frule representative_of_pd_valuation[of "P 0"]) apply (subgoal_tac "O P 0 = Vr K (ν (P 0))") apply (subgoal_tac "Zl_mI K P I 0 = Ig K (ν (P 0)) I") apply simp apply (simp add:Ig_nonzero) apply (simp add:Ig_def Zl_mI_def) apply (simp add:ring_n_pd_def Vr_def)
apply (simp) apply (frule value_Zl_mI[of n P I j], assumption+) apply (erule conjE) apply (rule contrapos_pp, simp+) apply (frule distinct_pds_valuation1[of n j P], assumption+) apply (simp add:value_of_zero) apply (simp add:zero_in_ring_n_pd_zero_K) apply (frule singleton_sub[of "0""I"],
frule sets_not_eq[of "I""{0}"], assumption,
erule bexE, simp) apply (frule_tac x = a in Zleast_mL_I[of "n""P""I""j"], assumption+) apply (frule_tac x = a in val_nonzero_z[of "ν (P j)"]) apply (frule ring_n_pd[of "n""P"]) apply (frule_tac h = a in Ring.ideal_subset[of "O P n""I"], assumption+) apply (simp add:mem_ring_n_pd_mem_K) apply assumption
lemma (in Corps) Zl_mI_mem_K:"[distinct_pds K n P; ideal (O P n) I; l ≤ n] ==> (Zl_mI K P I l) ∈ carrier K" apply (frule value_Zl_mI[of "n""P""I""l"], assumption+) apply (erule conjE) apply (frule ring_n_pd[of "n""P"]) apply (frule Ring.ideal_subset[of "O P n""I""Zl_mI K P I l"], assumption+) apply (simp add:mem_ring_n_pd_mem_K[of "n""P""Zl_mI K P I l"]) done
definition
mprod_exp :: "[_, nat → int, nat → 'b, nat] → 'b"where "mprod_exp K e f n = nprod K (λj. ((f j)e j))) n"
lemma (in Corps) mprod_expR_memTr:"(∀j≤n. f j ∈ carrier K) ⟶ mprod_expR K e f n ∈ carrier K" apply (cut_tac field_is_ring) apply (induct_tac n) apply (rule impI, simp) apply (simp add:mprod_expR_def) apply (cut_tac Ring.npClose[of K "f 0""e 0"], assumption+)
lemma (in Corps) mprod_expR_mem:"∀j ≤ n. f j ∈ carrier K ==> mprod_expR K e f n ∈ carrier K" apply (cut_tac field_is_ring) apply (cut_tac Ring.mprod_expR_memTr[of K e n f]) apply simp apply (subgoal_tac "f ∈ {j. j ≤ n} → carrier K", simp+) done
lemma (in Corps) mprod_Suc:"[∀j≤(Suc n). e j ∈ Zset; ∀j ≤ (Suc n). f j ∈ (carrier K - {0})]==> mprod_exp K e f (Suc n) = (mprod_exp K e f n) ⋅r ((f (Suc n))e (Suc n)))" apply (simp add:mprod_exp_def) done
lemma (in Corps) mprod_mem:"[∀j ≤ n. e j ∈ Zset; ∀j ≤ n. f j ∈ ((carrier K) - {0})]==> (mprod_exp K e f n) ∈ ((carrier K) - {0})" apply (cut_tac mprod_memTr[of n e f]) apply simp done
lemma (in Corps) mprod_mprodR:"[∀j ≤ n. e j ∈ Zset; ∀j ≤ n. 0 ≤ (e j); ∀j ≤ n. f j ∈ ((carrier K) - {0})]==> mprod_exp K e f n = mprod_expR K (nat o e) f n" apply (cut_tac field_is_ring) apply (simp add:mprod_exp_def mprod_expR_def) apply (rule Ring.nprod_eq, assumption+) apply (rule allI, rule impI, simp add:npowf_mem) apply (rule allI, rule impI, rule Ring.npClose, assumption+, simp) apply (rule allI, rule impI) apply (simp add:npowf_def) done
subsection"Representation of an ideal I as a product of prime ideals"
lemma (in Corps) ring_n_mprod_mprodRTr:"distinct_pds K n P ==> (∀j ≤ m. e j ∈ Zset) ∧ (∀j ≤ m. 0 ≤ (e j)) ∧ (∀j ≤ m. f j ∈ carrier (O P n)-{0O P n)}) ⟶ mprod_exp K e f m = mprod_expR (O P n) (nat o e) f m" apply (frule ring_n_pd[of n P]) apply (induct_tac m) apply (rule impI, (erule conjE)+,
simp add:mprod_exp_def mprod_expR_def) apply (erule conjE, simp add:npowf_def, simp add:ring_n_exp_K_exp)
lemma (in Corps) ring_n_mprod_mprodR:"[distinct_pds K n P; ∀j ≤ m. e j ∈ Zset; ∀j ≤ m. 0 ≤ (e j); ∀j ≤ m. f j ∈ carrier (O P n)-{0O P n)}] ==> mprod_exp K e f m = mprod_expR (O P n) (nat o e) f m" apply (simp add:ring_n_mprod_mprodRTr) done
lemma (in Corps) value_mprod_expTr:"valuation K v ==> (∀j ≤ n. e j ∈ Zset) ∧ (∀j ≤ n. f j ∈ (carrier K - {0})) ⟶ v (mprod_exp K e f n) = ASum (λj. (e j) *a (v (f j))) n" apply (induct_tac n) apply simp apply (rule impI, erule conjE) apply(simp add:mprod_exp_def val_exp)
lemma (in Corps) value_mprod_exp:"[valuation K v; ∀j ≤ n. e j ∈ Zset; ∀j ≤ n. f j ∈ (carrier K - {0})]==> v (mprod_exp K e f n) = ASum (λj. (e j) *a (v (f j))) n" apply (simp add:value_mprod_expTr) done
lemma (in Corps) mgenerator0_1:"[distinct_pds K (Suc n) P; ideal (O P (Suc n)) I; I ≠ {0O P (Suc n))}; I ≠ carrier (O P (Suc n)); j ≤ (Suc n)]==> ((ν (P j)) (mprod_exp K (mL K P I) (Kb (Suc n) P) (Suc n))) = ((ν (P j)) (Zl_mI K P I j))" apply (frule distinct_pds_valuation[of j n P], assumption+) apply (frule mL_hom[of "Suc n""P""I"], assumption+) apply (frule Kbase_hom1[of "Suc n""P"]) apply (frule value_mprod_exp[of "ν (P j)""Suc n""mL K P I" "Kb (Suc n) P"], assumption+)
apply (simp del:ASum_Suc) apply (thin_tac "(ν (P j)) (mprod_exp K (mL K P I) (Kb (Suc n) P) (Suc n)) = ASum (λja. (mL K P I ja) *a (ν (P j)) ((Kb (Suc n) P) ja)) (Suc n)") apply (subgoal_tac "ASum (λja. (mL K P I ja) *a ((ν (P j)) ((Kb (Suc n) P) ja))) (Suc n) = ASum (λja. (mL K P I ja) *a (δ ja)) (Suc n)") apply (simp del:ASum_Suc) apply (subgoal_tac "∀h ≤ (Suc n). (λja. (mL K P I ja) *a (δ ja)) h ∈ Z\<infinity>") apply (cut_tac eSum_single[of "Suc n""λja. (mL K P I ja) *a (δ ja)""j"]) apply simp apply (simp add:Kronecker_delta_def asprod_n_0) apply (rotate_tac -1, drule not_sym) apply (simp add:mL_def[of "K""P""I""j"])
lemma (in Corps) mgenerator0_2:"[ 0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n); j ≤ n]==> ((ν (P j)) (mprod_exp K (mL K P I) (Kb n P) n)) = ((ν (P j)) (Zl_mI K P I j))" apply (cut_tac mgenerator0_1[of "n - Suc 0""P""I""j"]) apply simp+ done
lemma (in Corps) mgenerator1:"[distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n); j ≤ n]==> ((ν (P j)) (mprod_exp K (mL K P I) (Kb n P) n)) = ((ν (P j)) (Zl_mI K P I j))" apply (case_tac "n = 0",
frule value_Zl_mI[of "n""P""I""j"], assumption+,
frule val_LI_noninf[of "n""P""I""j"], assumption+,
frule val_LI_pos[of "n""P""I""j"], assumption+,
frule apos_neq_minf[of "LI K (ν (P j)) I"],
simp add:distinct_pds_def, erule conjE) apply (cut_tac representative_of_pd_valuation[of "P j"], simp+,
simp add:mprod_exp_def,
subst val_exp[THEN sym, of "ν (P 0)""(Kb 0 P) 0"], assumption+,
cut_tac Kbase_hom[of "0""P"], simp,
simp add:distinct_pds_def,
cut_tac Kbase_nonzero[of "0""P"], simp+,
simp add:distinct_pds_def) apply (cut_tac Kbase_nonzero[of "0""P"], simp add:distinct_pds_def) apply (cut_tac Kbase_Kronecker[of "0""P"], simp add:distinct_pds_def) apply (simp add:Kronecker_delta_def, simp add:mL_def, simp add:ant_tna) apply (simp add:distinct_pds_def)+ apply (cut_tac mgenerator0_2[of "n""P""I""j"], simp+) apply (simp add:distinct_pds_def) apply simp+ done
lemma (in Corps) mgenerator2Tr1:"[0 < n; j ≤ n; k ≤ n; distinct_pds K n P]==> (ν (P j)) (mprod_exp K (λl. γ l ) (Kb n P) n) = (γ j) *a (δ j)" apply (frule distinct_pds_valuation1[of "n""j""P"], assumption+) apply (frule K_gamma_hom[of k n]) apply (subgoal_tac "∀j ≤ n. (Kb n P) j ∈ carrier K - {0}") apply (simp add:value_mprod_exp[of "ν (P j)" n "K_gamma k""(Kb n P)"]) apply (subgoal_tac "ASum (λja. (γ ja) *a (ν (P j)) ((Kb n P) ja)) n = ASum (λja. (((γ ja) *a (δ ja)))) n") apply simp apply (subgoal_tac "∀j ≤ n. (λja. (γ ja) *a (δ ja)) j ∈ Z\<infinity>") apply (cut_tac eSum_single[of n "λja. ((γ ja) *a (δ ja))""j"], simp) apply (rule allI, rule impI, simp add:Kronecker_delta_def,
rule impI, simp add:asprod_n_0 Zero_in_aug_inf, assumption+) apply (rule ballI, simp) apply (simp add:K_gamma_def, rule impI, simp add:Kronecker_delta_def) apply (rule allI, rule impI) apply (simp add:Kronecker_delta_def, simp add:K_gamma_def) apply (simp add:ant_0 Zero_in_aug_inf) apply (cut_tac z_in_aug_inf[of 1], simp add:ant_1)
lemma (in Corps) mgenerator2Tr3_1:"[0 < n; j ≤ n; k ≤ n; j = k; distinct_pds K n P]==> (ν (P j)) ((mprod_exp K (λl. (γ l)) (Kb n P) n)) = 0" apply (simp add:mgenerator2Tr2) apply (simp add:K_gamma_def) done
lemma (in Corps) mgenerator2Tr3_2:"[0 < n; j ≤ n; k ≤ n; j ≠ k; distinct_pds K n P]==> (ν (P j)) ((mprod_exp K (λl. (γ l)) (Kb n P) n)) = ant m" apply (simp add:mgenerator2Tr2) apply (simp add:K_gamma_def) done
lemma (in Corps) mgeneratorTr4:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0 P n}; I ≠ carrier (O P n)]==> mprod_exp K (mL K P I) (Kb n P) n ∈ carrier (O P n)" apply (subst ring_n_pd_def) apply (simp add:Sr_def) apply (frule mL_hom[of "n""P""I"], assumption+) apply (frule mprod_mem[of n "mL K P I""Kb n P"]) apply (rule Kbase_hom1, assumption+)
definition
m_zmax_pdsI_hom :: "[_, nat → ('b → ant) set, 'b set] → nat → int"where "m_zmax_pdsI_hom K P I = (λj. tna (AMin ((ν (P j)) ` I)))"
definition
m_zmax_pdsI :: "[_, nat, nat → ('b → ant) set, 'b set] → int"where "m_zmax_pdsI K n P I = (m_zmax n (m_zmax_pdsI_hom K P I)) + 1"
lemma (in Corps) value_Zl_mI_pos:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n); j ≤ n; l ≤ n]==> 0 ≤ ((ν (P j)) (Zl_mI K P I l))" apply (frule value_Zl_mI[of "n""P""I""l"], assumption+) apply (erule conjE) apply (frule ring_n_pd[of "n""P"]) apply (frule Ring.ideal_subset[of "O P n""I""Zl_mI K P I l"], assumption+) apply (thin_tac "ideal (O P n) I") apply (thin_tac "I ≠ {0 P n}") apply (thin_tac "I ≠ carrier (O P n)") apply (thin_tac "Ring (O P n)") apply (simp add:ring_n_pd_def Sr_def) done
lemma (in Corps) value_mI_genTr1:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0 P n}; I ≠ carrier (O P n); j ≤ n]==> (mprod_exp K (K_gamma j) (Kb n P) n)m_zmax_pdsI K n P I)∈ carrier K" apply (frule K_gamma_hom[of "j""n"]) apply (frule mprod_mem[of n "K_gamma j""Kb n P"]) apply (rule Kbase_hom1, assumption+) apply (rule npowf_mem) apply simp+ done
lemma (in Corps) value_mI_genTr1_0:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0 P n}; I ≠ carrier (O P n); j ≤ n] ==> (mprod_exp K (K_gamma j) (Kb n P) n) ∈ carrier K" apply (frule K_gamma_hom[of "j""n"]) apply (frule mprod_mem[of n "K_gamma j""Kb n P"]) apply (rule Kbase_hom1, assumption+) apply simp done
lemma (in Corps) value_mI_genTr2:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0 P n}; I ≠ carrier (O P n); j ≤ n]==> (mprod_exp K (K_gamma j) (Kb n P) n)m_zmax_pdsI K n P I)≠0" apply (frule K_gamma_hom[of "j""n"]) apply (frule mprod_mem[of n "K_gamma j""Kb n P"]) apply (rule Kbase_hom1, assumption+) apply simp apply (erule conjE) apply (simp add: field_potent_nonzero1) done
lemma (in Corps) value_mI_genTr3:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0 P n}; I ≠ carrier (O P n); j ≤ n]==> (Zl_mI K P I j) ⋅r ((mprod_exp K (K_gamma j) (Kb n P) n)m_zmax_pdsI K n P I)) ∈ carrier K" apply (cut_tac field_is_ring) apply (rule Ring.ring_tOp_closed, assumption+) apply (simp add:Zl_mI_mem_K) apply (simp add:value_mI_genTr1) done
lemma (in Corps) value_mI_gen:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n); j ≤ n]==> (ν (P j)) (nsum K (λk. ((Zl_mI K P I k) ⋅r ((mprod_exp K (λl. (γ l)) (Kb n P) n)m_zmax_pdsI K n P I)))) n) = LI K (ν (P j)) I" apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"]) apply (case_tac "j = n", simp) apply (cut_tac nsum_suc[of K "λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I""n - Suc 0"],
simp,
thin_tac "Σe K (λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I) n = Σe K (λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I) (n - Suc 0) ± Zl_mI K P I n ⋅r mprod_exp K (K_gamma n) (Kb n P) n K n P I") apply (cut_tac distinct_pds_valuation[of "n""n - Suc 0""P"]) prefer2apply simp prefer2apply simp apply (subst value_less_eq1[THEN sym, of "ν (P n)" "(Zl_mI K P I n)⋅r (mprod_exp K (K_gamma n) (Kb n P) n K n P I)" "nsum K (λk.(Zl_mI K P I k)⋅r (mprod_exp K (K_gamma k) (Kb n P) n K n P I)) (n - Suc 0)"], assumption+)
apply (cut_tac e = "K_gamma ja"in mprod_mem[of n _ "Kb n P"]) apply (simp add:Zset_def) apply (rule Kbase_hom1, assumption+) apply (subst val_exp[of "ν (P n)", THEN sym], assumption+) apply simp+
apply (subst mgenerator2Tr1[of "n""n" _ "P"], assumption+, simp, simp,
assumption+) apply (simp add:K_gamma_def Kronecker_delta_def) apply (frule_tac l = ja in value_Zl_mI_pos[of "n""P""I""n"],
assumption+, simp, simp) apply (simp add:Nset_preTr1) apply (frule_tac y = "(ν (P n)) (Zl_mI K P I ja)"in
aadd_le_mono[of "0" _ "ant (m_zmax_pdsI K n P I)"]) apply (simp add:aadd_0_l) apply (subgoal_tac "LI K (ν (P n)) I < ant (m_zmax_pdsI K n P I)") apply simp apply (rule aless_le_trans[of "LI K (ν (P n)) I" "ant (m_zmax_pdsI K n P I)"])
apply (simp add:m_zmax_pdsI_def) apply (cut_tac aless_zless[of "tna (LI K (ν (P n)) I)" "m_zmax n (m_zmax_pdsI_hom K P I) + 1"]) apply (frule val_LI_noninf[of "n""P""I""n"], assumption+, simp, simp) apply (frule val_LI_pos[of "n""P""I""n"], assumption+, simp,
frule apos_neq_minf[of "LI K (ν (P n)) I"], simp add:ant_tna) apply (subst m_zmax_pdsI_hom_def) apply (subst LI_def) apply (cut_tac m_zmax_gt_each[of n "λu.(tna (AMin ((ν (P u)) ` I)))"]) apply simp
apply (subst val_t2p[of "ν (P n)"], assumption+) apply (rule Zl_mI_mem_K, assumption+, simp) apply (simp add:value_mI_genTr1) apply (simp add:mgenerator2Tr3_1[of "n""n""n""P""m_zmax_pdsI K n P I"]) apply (simp add:aadd_0_r) apply (simp add:value_Zl_mI[of "n""P""I""n"])
(*** case j = n done ***) apply (frule aGroup.addition3[of "K""n - Suc 0""λk. (Zl_mI K P I k) ⋅r ((mprod_exp K (K_gamma k) (Kb n P) n)m_zmax_pdsI K n P I))""j"])
apply (thin_tac "Σe K (λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I) n = Σe K (cmp (λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I) (τ n)) n") apply (cut_tac nsum_suc[of K "cmp (λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I) (τ n)""n - Suc 0"]) apply (simp del:nsum_suc) apply (
thin_tac "Σe K (cmp (λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I) (τ n)) n = Σe K (cmp (λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I) (τ n)) (n - Suc 0) ± (cmp (λk. Zl_mI K P I k ⋅r mprod_exp K (K_gamma k) (Kb n P) n K n P I) (τ n)) n") apply (cut_tac distinct_pds_valuation[of "j""n - Suc 0""P"]) prefer2apply simp prefer2apply simp apply (simp add:cmp_def)
apply (cut_tac n_in_Nsetn[of "n"]) apply (simp add:transpos_ij_2) apply (subst value_less_eq1[THEN sym, of "ν (P j)" "(Zl_mI K P I j) ⋅r (mprod_exp K (K_gamma j) (Kb n P) n K n P I)""Σe K (λx.(Zl_mI K P I ((τ n) x)) ⋅r (mprod_exp K (K_gamma ((τ n) x)) (Kb n P) n K n P I)) (n - Suc 0)"], assumption+) apply (simp add:value_mI_genTr3) apply (rule aGroup.nsum_mem[of "K""n - Suc 0"], assumption+) apply (rule allI, rule impI) apply (frule_tac l = ja in transpos_mem[of "j""n""n"], simp+) apply (simp add:value_mI_genTr3)
apply (frule value_Zl_mI[of "n""P""I""j"], assumption+) apply (erule conjE) apply (simp add:aadd_0_r) apply (cut_tac f = "λx. (Zl_mI K P I ((τ n) x)) ⋅r (mprod_exp K (K_gamma ((τ n) x)) (Kb n P) n K n P I)"in
value_ge_add[of "ν (P j)" "n - Suc 0" _ "ant (m_zmax_pdsI K n P I)"], assumption+) apply (rule allI, rule impI) apply (frule_tac l = ja in transpos_mem[of "j""n""n"], simp+) apply (simp add:value_mI_genTr3) apply (rule allI, rule impI) apply (simp add:cmp_def)
apply (frule_tac l = ja in transpos_mem[of "j""n""n"], simp+)
apply (subst val_t2p [where v="ν P j"], assumption+) apply (simp add:Zl_mI_mem_K) apply (simp add:value_mI_genTr1) apply (cut_tac k = ja in transpos_noteqTr[of "n" _ "j"], simp+) apply (subst mgenerator2Tr3_2[of "n""j" _ "P"], simp+) apply (cut_tac l = "(τ n) ja"in value_Zl_mI_pos[of "n""P""I""j"],
simp+) apply (frule_tac y = "(ν (P j)) (Zl_mI K P I ((τ n) ja))"in
aadd_le_mono[of "0" _ "ant (m_zmax_pdsI K n P I)"]) apply (simp add:aadd_0_l) apply (subgoal_tac "LI K (ν (P j)) I < ant (m_zmax_pdsI K n P I)") apply (rule aless_le_trans[of "LI K (ν (P j)) I" "ant (m_zmax_pdsI K n P I)"], assumption+)
apply (simp add:mgenerator2Tr3_1[of "n""j""j""P" "m_zmax_pdsI K n P I"]) apply (simp add:aadd_0_r) apply (simp add:value_Zl_mI[of "n""P""I""j"]) done
lemma (in Corps) mI_gen_in_I:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n)]==> (nsum K (λk. ((Zl_mI K P I k) ⋅r ((mprod_exp K (λl. (γ l)) (Kb n P) n)m_zmax_pdsI K n P I)))) n) ∈ I" apply (cut_tac field_is_ring, frule ring_n_pd[of n P]) apply (rule ideal_eSum_closed[of n P I n], assumption+) apply (rule allI, rule impI) apply (frule_tac j = j in value_Zl_mI[of "n""P""I"], assumption+) apply (erule conjE) apply (thin_tac "(ν (P j)) (Zl_mI K P I j) = LI K (ν (P j)) I") apply (subgoal_tac "(mprod_exp K (K_gamma j) (Kb n P) n)m_zmax_pdsI K n P I) ∈ carrier (O P n)") apply (frule_tac x = "Zl_mI K P I j"and
r = "(mprod_exp K (K_gamma j) (Kb n P) n)m_zmax_pdsI K n P I)" in Ring.ideal_ring_multiple1[of "(O P n)""I"], assumption+) apply (frule_tac h = "Zl_mI K P I j"in
Ring.ideal_subset[of "O P n""I"], assumption+) apply (simp add:ring_n_pd_tOp_K_tOp[of "n""P"])
text‹We write the element ‹eΣ K (λk. (Zl_mI K P I k) ⋅K ((mprod_exp K (K_gamma k) (Kb n P)
n)K(m_zmax_pdsI K n P I))) n›
as ‹mIg G a i n P I››
definition
mIg :: "[_, nat, nat → ('b → ant) set, 'b set] → 'b" (‹(4mIg_ _ _ _)› [82,82,82,83]82) where "mIg n P I = Σe K (λk. (Zl_mI K P I k) ⋅r ((mprod_exp K (K_gamma k) (Kb n P) n)m_zmax_pdsI K n P I))) n"
text‹We can rewrite above two lemmas by using ‹mIg G a i n P I››
lemma (in Corps) value_mI_gen1:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n)]==> ∀j ≤ n.(ν (P j)) (mIg n P I) = LI K (ν (P j)) I" apply (rule allI, rule impI) apply (simp add:mIg_def value_mI_gen) done
lemma (in Corps) mI_gen_in_I1:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n)]==> (mIg n P I) ∈ I" apply (simp add:mIg_def mI_gen_in_I) done
lemma (in Corps) mI_principalTr:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n); x ∈ I]==> ∀j ≤ n. ((ν (P j)) (mIg n P I)) ≤ ((ν (P j)) x)" apply (simp add:value_mI_gen1) apply (rule allI, rule impI) apply (rule Zleast_LI, assumption+) done
lemma (in Corps) mI_principal:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0O P n)}; I ≠ carrier (O P n)]==> I = Rxa (O P n) (mIg n P I)" apply (frule ring_n_pd[of "n""P"]) apply (rule equalityI) apply (rule subsetI) apply (frule_tac x = x in mI_principalTr[of "n""P""I"],
assumption+) apply (frule_tac y = x in n_eq_val_eq_idealTr[of "n""P""mIg n P I"]) apply (frule mI_gen_in_I1[of "n""P""I"], assumption+) apply (simp add:Ring.ideal_subset)+ apply (thin_tac "∀j≤n. (ν (P j)) (mIgK n P I) ≤ (ν (P j)) x") apply (frule_tac h = x in Ring.ideal_subset[of "O P n""I"], assumption+) apply (frule_tac a = x in Ring.a_in_principal[of "O P n"], assumption+) apply (simp add:subsetD) apply (rule Ring.ideal_cont_Rxa[of "O P n""I""mIgK n P I"], assumption+) apply (rule mI_gen_in_I1[of "n""P""I"], assumption+) done
subsection‹‹prime_n_pd››
lemma (in Corps) prime_n_pd_principal:"[distinct_pds K n P; j ≤ n]==> (P P n j) = Rxa (O P n) (((Kb n P) j))" apply (frule ring_n_pd[of "n""P"]) apply (frule prime_n_pd_prime[of "n""P""j"], assumption+) apply (simp add:prime_ideal_def, frule conjunct1) apply (fold prime_ideal_def) apply (thin_tac "prime_ideal (O P n) (P P n j)") apply (rule equalityI) apply (rule subsetI) apply (frule_tac y = x in n_eq_val_eq_idealTr[of n P "(Kb n P) j"]) apply (thin_tac "Ring (O P n)", thin_tac "ideal (O P n) (P P n j)") apply (simp add:ring_n_pd_def Sr_def) apply (frule Kbase_hom[of "n""P"], simp) apply (rule allI, rule impI) apply (frule Kbase_Kronecker[of "n""P"]) apply (simp add:Kronecker_delta_def, rule impI) apply (simp only:ant_0[THEN sym], simp only:ant_1[THEN sym]) apply (simp del:ant_1) apply (simp add:prime_n_pd_def)
apply (rule allI, rule impI) apply (frule Kbase_Kronecker[of "n""P"]) apply simp apply (thin_tac "∀j≤n. ∀l≤n. (ν (P j)) ((Kb n P) l) = δ l") apply (case_tac "ja = j", simp add:Kronecker_delta_def) apply (thin_tac "ideal (O P n) (P P n j)") apply (simp add:prime_n_pd_def, erule conjE) apply (frule_tac x = x in mem_ring_n_pd_mem_K[of "n""P"],
assumption+) apply (case_tac "x = 0") apply (frule distinct_pds_valuation2[of "j""n""P"], assumption+) apply (rule gt_a0_ge_1, assumption)+
apply (simp add:Kronecker_delta_def) apply (frule_tac j = ja in distinct_pds_valuation2[of _ "n""P"],
assumption+) apply (simp add:prime_n_pd_def, erule conjE) apply (thin_tac "ideal (O P n) {x. x ∈ carrier (O P n) ∧ 0 < (ν (P j)) x}") apply (simp add:ring_n_pd_def Sr_def) apply (cut_tac h = x in Ring.ideal_subset[of "O P n""P P n j"]) apply (frule_tac a = x in Ring.a_in_principal[of "O P n"]) apply (simp add:Ring.ideal_subset, assumption+)
apply (rule_tac c = x and A = "(O P n) ♢p x"and B = "(O P n) ♢p (Kb n P) j" in subsetD, assumption+) apply (simp add:Ring.a_in_principal) apply (rule Ring.ideal_cont_Rxa[of "O P n""P P n j""(Kb n P) j"], assumption+) apply (subst prime_n_pd_def, simp) apply (frule Kbase_Kronecker[of "n""P"]) apply (simp add:Kronecker_delta_def) apply (simp only:ant_1[THEN sym], simp only:ant_0[THEN sym]) apply (simp del:ant_1 add:aless_zless) apply (subst ring_n_pd_def, simp add:Sr_def) apply (frule Kbase_hom[of "n""P"]) apply simp apply (rule allI) apply (simp add:ant_0) apply (rule impI) apply (simp only:ant_1[THEN sym], simp only:ant_0[THEN sym]) apply (simp del:ant_1) done
lemma (in Corps) ring_n_prod_primesTr:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0 P n}; I ≠ carrier (O P n)]==> ∀j ≤ n.(ν (P j)) (mprod_exp K (mL K P I) (Kb n P) n) = (ν (P j)) (mIg n P I)" apply (rule allI, rule impI) apply (simp add:mgenerator1) apply (simp add:value_mI_gen1)
apply (simp add:value_Zl_mI) done
lemma (in Corps) ring_n_prod_primesTr1:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0 P n}; I ≠ carrier (O P n)]==> I = (O P n) ♢p (mprod_exp K (mL K P I) (Kb n P) n)" apply (frule ring_n_pd[of "n""P"]) apply (subst n_eq_val_eq_ideal[of "n""P""mprod_exp K (mL K P I) (Kb n P) n""mIg n P I"], assumption+) apply (simp add:mgeneratorTr4) apply (frule mI_gen_in_I1[of "n""P""I"], assumption+) apply (simp add:Ring.ideal_subset) apply (simp add:ring_n_prod_primesTr) apply (simp add:mI_principal) done
lemma (in Corps) ring_n_prod_primes:"[0 < n; distinct_pds K n P; ideal (O P n) I; I ≠ {0 P n}; I ≠ carrier (O P n); ∀k ≤ n. J k = (P P n k)<diamondsuit>(O P n) (nat ((mL K P I) k))]==> I = iΠO P n),n J" apply (simp add:prime_n_pd_principal[of "n""P"]) apply (subst ring_n_prod_primesTr1[of "n""P""I"], assumption+) apply (frule ring_n_pd[of "n""P"]) apply (frule Ring.prod_n_principal_ideal[of "O P n""nat o (mL K P I)""n" "Kb n P""J"]) apply (frule Kbase_hom[of "n""P"]) apply (simp add:nat_def) apply (subst ring_n_pd_def) apply (simp add:Sr_def) apply (rule Pi_I, simp) apply (simp add:Kbase_Kronecker[of "n""P"]) apply (simp add:Kronecker_delta_def) apply (simp only:ant_1[THEN sym], simp only:ant_0[THEN sym]) apply (simp del:ant_1) apply (simp add:Kbase_hom) apply simp
apply simp apply (frule ring_n_mprod_mprodR[of "n""P" n "mL K P I""Kb n P"]) apply (rule allI, rule impI, simp add:Zset_def) apply (rule allI, rule impI) apply (simp add: Zleast_in_mI_pos)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.