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
app_lb :: "[_ , nat, nat ==> 'b ==> ant, nat ==> 'b, nat] ==> (nat ==> nat)" (‹(5Ψ _ _ _ _)› [98,98,98,98,99]98) where "Ψ n vv x m = (λj∈{h. h ≤ n}. (SOME L. (∀N. L < N ⟶ (an m) ≤ (vv j (Σe K (λj∈{h. h ≤ n}. (x j) ⋅r (1r± -a (1r± -a ((Ω vv n) j)^ N)^ N)) n ± -a (x j))))))" (** Approximation lower bound **)
lemma (in Corps) app_LB:"[vals_nonequiv K (Suc n) vv; ∀l≤ (Suc n). x l ∈ carrier K; j ≤ (Suc n)]==> ∀N. (Ψ (Suc n) vv x m) j < N ⟶ (an m) ≤ (vv j (Σ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)))" apply (frule ApproximationTr3[of "n""vv""x""j""m"],
assumption+) apply (simp del:nsum_suc add:app_lb_def) apply (rule allI) apply (rule someI2_ex) apply assumption+ apply (rule impI) apply blast done
lemma (in Corps) ApplicationTr4:"[vals_nonequiv K (Suc n) vv; ∀j∈{h. h ≤ (Suc n)}. x j ∈ carrier K]==> ∃l. ∀N. l < N ⟶ (∀j ≤ (Suc n). (an m) ≤ (vv j (Σ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))))" apply (subgoal_tac "∀N. (m_max (Suc n) (Ψ (Suc n) vv x m)) < N ⟶ (∀j≤ (Suc n). (an m) ≤ (vv j (Σ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))))") apply blast apply (rule allI, rule impI)+ apply (frule_tac j = j in app_LB[of "n" "vv" "x" _ "m"], simp, assumption, subgoal_tac "(Ψ (Suc n) vv x m) j < N", blast) apply (frule_tac l = j and n = "Suc n" and f = "Ψ (Suc n) vv x m" in m_max_gt, frule_tac x = "(Ψ (Suc n) vv x m) j" and y = "m_max (Suc n) (Ψ (Suc n) vv x m)" and z = N in le_less_trans, assumption+) done
theorem (in Corps) Approximation_thm:"[vals_nonequiv K (Suc n) vv; \<forall>j≤ (Suc n). (x j) ∈ carrier K]==> \<exists>y∈carrier K. ∀j≤ (Suc n). (an m) ≤ (vv j (y ± -a (x j)))" apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"]) apply (subgoal_tac "∃l. (∀N. l < N ⟶ (∀j ≤ (Suc n). (an m) ≤ ((vv j) ((nsum K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅r (1r± -a (1r± -a ((Ω vv (Suc n)) j)^ N)^ N)) (Suc n)) ± -a (x j)))))") apply (erule exE) apply (rename_tac M) apply (subgoal_tac "∀j≤ (Suc n). (an m) ≤ (vv j ( (Σe K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅r (1r± -a (1r± -a ((Ω vv (Suc n)) j)^ (Suc M))^ (Suc M))) (Suc n)) ± -a (x j)))") apply (subgoal_tac "Σe K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅r (1r± -a (1r± -a ((Ω vv (Suc n)) j)^ (Suc M))^ (Suc M))) (Suc n) ∈ carrier K") apply blast apply (rule aGroup.nsum_mem[of "K" "Suc n"], assumption+) apply (rule allI, rule impI, simp del:nsum_suc npow_suc) apply (rule Ring.ring_tOp_closed, assumption+, simp, rule ApproximationTr1, simp add:Ostrowski_base_mem)
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) apply (rule allI, rule impI, cut_tac P = "P j" in representative_of_pd_valuation, simp, subst val_t2p [where v="ν P j"], assumption+, rule aadd_two_pos, simp+) done
lemma (in Corps) distinct_pds_valuation:"[j ≤ (Suc n); distinct_pds K (Suc n) P]==> valuation K (ν (P j))" apply (rule_tac P = "P j" in representative_of_pd_valuation) apply (simp add:distinct_pds_def) done
lemma (in Corps) distinct_pds_valuation1:"[0 < n; j ≤ n; distinct_pds K n P] ==> valuation K (ν (P j))" apply (rule distinct_pds_valuation[of "j" "n - Suc 0" "P"]) apply simp+ done
lemma (in Corps) distinct_pds_valuation2:"[j ≤ n; distinct_pds K n P]==> valuation K (ν (P j))" apply (case_tac "n = 0", simp add:distinct_pds_def, subgoal_tac "0 ∈ {0::nat}", simp add:representative_of_pd_valuation[of "P 0"], simp) apply (simp add:distinct_pds_valuation1[of "n"]) done
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 apply (simp add:zero_in_ring_n_pd_zero_K) apply (simp add:prime_n_pd_def) apply (simp add: ring_n_pd_def Sr_def) apply (cut_tac field_is_ring, simp add:Ring.ring_zero) apply (rule conjI) apply (rule allI, rule impI) apply (cut_tac P = "P ja" in representative_of_pd_valuation, simp add:distinct_pds_def, simp add:value_of_zero) apply (cut_tac P = "P j" in representative_of_pd_valuation, simp add:distinct_pds_def, simp add:value_of_zero) apply (simp add:ant_0[THEN sym])
apply (rule ballI)+ apply (simp add:prime_n_pd_def) apply (erule conjE)+ apply (frule ring_n_pd [of "n" "P"], frule Ring.ring_is_ag[of "O P n"]) apply (frule_tac x = b in aGroup.ag_mOp_closed[of "O P n"], assumption+) apply (simp add:aGroup.ag_pOp_closed) apply (thin_tac "Ring (O P n)") apply (thin_tac "aGroup (O P n)") apply (simp add:ring_n_pd_def Sr_def) apply (erule conjE)+ apply (cut_tac v = "ν (P j)" and x = a and y = "-a b" in amin_le_plus) apply (rule_tac P = "P j" in representative_of_pd_valuation, simp add:distinct_pds_def) apply assumption+ apply (cut_tac P = "P j" in representative_of_pd_valuation) apply (simp add:distinct_pds_def) apply (frule_tac x = "(ν (P j)) a" and y = "(ν (P j)) (-a b)" in amin_gt[of "0"]) apply (simp add:val_minus_eq)
apply (frule_tac y = "amin ((ν (P j)) a) ((ν (P j)) (-a b))" and z = "(ν (P j)) ( a ± -a b)" in aless_le_trans[of "0"], assumption+)
apply (rule ballI)+ apply (frule ring_n_pd [of "n" "P"]) apply (frule_tac x = r and y = x in Ring.ring_tOp_closed[of "O P n"], assumption+) apply (simp add:prime_n_pd_def) apply (cut_tac P = "P j" in representative_of_pd_valuation, simp add:distinct_pds_def) apply (thin_tac "Ring (O P n)") apply (simp add:prime_n_pd_def ring_n_pd_def Sr_def, (erule conjE)+, simp add:val_t2p) apply (subgoal_tac "0 ≤ ((ν (P j)) r)") apply (simp add:aadd_pos_poss, simp)
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+) apply (cut_tac Ring.ideal_cont_Rxa[of "O P n" "(O P n) ♢p x" "y"], assumption+, simp add:mem_ring_n_pd_mem_K, simp add:mem_ring_n_pd_mem_K, simp add:zero_in_ring_n_pd_zero_K) apply (frule Ring.rxa_in_Rxa[of "O P n" "x" "y ⋅r (x<hyphen>K)"], assumption+, simp add:ring_n_pd_def Sr_def, (erule conjE)+, cut_tac field_is_ring, rule Ring.ring_tOp_closed, assumption+, cut_tac invf_closed1[of x], simp, simp, simp add:ring_n_pd_def Sr_def) apply (cut_tac Ring.ring_tOp_closed, assumption+, cut_tac field_is_ring, assumption+, simp+, cut_tac invf_closed1[of x], simp, simp)
apply (rule allI, rule impI, drule_tac a = j in forall_spec, assumption+, cut_tac invf_closed1[of x], simp, erule conjE) apply (subst val_t2p [where v="ν P j"], simp, rule mem_ring_n_pd_mem_K[of "n" "P" "y"], assumption+, frule_tac x = j in spec, simp, simp add:zero_in_ring_n_pd_zero_K) apply (subst value_of_inv [where v="ν P j"], simp, simp add:ring_n_pd_def Sr_def, assumption+) apply (frule_tac x = "(ν (P j)) x" and y = "(ν (P j)) y" in ale_diff_pos, simp add:diff_ant_def, simp add:mem_ring_n_pd_mem_K[of "n" "P" "x"] zero_in_ring_n_pd_zero_K)
apply (rule allI, rule impI, simp add:distinct_pds_def, (erule conjE)+, rule_tac P = "P j" in representative_of_pd_valuation, simp) done 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)
apply (subgoal_tac "∀j≤ n. (ν (P j)) x ≤ ((ν (P j)) y)") apply (rule n_eq_val_eq_idealTr, assumption+) apply (rule allI, rule impI) apply simp done 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 = 0 in 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 = 0 in 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 = 0 in 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"]) defer apply 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")
apply (rule contrapos_pp, simp+) apply (cut_tac x = "ant z" in inf_ge_any) apply (frule_tac x = "ant z" in ale_antisym[of _ "∞"], assumption+) apply simp done
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
apply (simp add:zero_in_ring_n_pd_zero_K) apply assumption apply (frule val_LI_noninf[THEN not_sym, of "n" "P" "I" "j"], assumption+) apply (simp add:zero_in_ring_n_pd_zero_K) apply assumption apply simp done 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)
apply (rule impI, erule conjE) apply simp apply (subst mprod_Suc, assumption+) apply (rule allI, rule impI, simp) apply (subst val_t2p[of v], assumption+) apply (cut_tac n = "n" in mprod_mem[of _ e f], (rule allI, rule impI, simp)+, simp) apply (simp add:npowf_mem, simp add:field_potent_nonzero1) apply (simp add:val_exp[THEN sym, of "v"]) done
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) mgenerator2Tr2:"[0 < n; j ≤ n; k ≤ n; distinct_pds K n P]==> (ν (P j)) ((mprod_exp K (λl. γ l ) (Kb n P) n))= ant (m * (γ j))"
apply (frule K_gamma_hom[of k n]) apply (frule Kbase_hom1[of "n" "P"]) apply (frule mprod_mem[of n "K_gamma k" "Kb n P"], assumption+) apply (frule distinct_pds_valuation1[of "n" "j" "P"], assumption+) apply (simp, erule conjE) apply (simp add:val_exp[THEN sym]) apply (simp add:mgenerator2Tr1) apply (simp add:K_gamma_def Kronecker_delta_def) apply (rule impI) apply (simp add:asprod_def a_z_z) done
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"]) prefer 2 apply simp prefer 2 apply 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 (simp add:mgenerator2Tr3_1[of "n" "n" "n" "P"]) apply (simp add:aadd_0_r) apply (frule value_Zl_mI[of "n" "P" "I" "n"], assumption+, simp) apply (erule conjE) apply (frule_tac f = "λk. (Zl_mI K P I k) ⋅r (mprod_exp K (K_gamma k) (Kb n P) n K n P I)" in value_ge_add[of "ν (P n)" "n - Suc 0" _ "ant (m_zmax_pdsI K n P I)"]) apply (rule allI, rule impI) apply (rule Ring.ring_tOp_closed, assumption+) apply (simp add:Zl_mI_mem_K) apply (simp add:value_mI_genTr1)
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 simp apply (rule allI, rule impI) apply (simp add:value_mI_genTr3) apply simp+
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"]) prefer 2 apply simp prefer 2 apply 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 (simp add:mgenerator2Tr3_1[of "n" "j" "j" "P"])
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:m_zmax_pdsI_def) apply (cut_tac aless_zless[of "tna (LI K (ν (P j)) I)" "m_zmax n (m_zmax_pdsI_hom K P I) + 1"]) apply (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:ant_tna) apply (subst m_zmax_pdsI_hom_def) apply (subst LI_def) apply (subgoal_tac "∀h ≤ n. (λu. (tna (AMin ((ν (P u)) ` I)))) h ∈ Zset") apply (frule m_zmax_gt_each[of n "λu.(tna (AMin ((ν (P u)) ` I)))"]) apply simp apply (rule allI, rule impI) apply (simp add:Zset_def) apply (subst val_t2p[of "ν (P j)"], assumption+) apply (rule Zl_mI_mem_K, assumption+) apply (simp add:value_mI_genTr1) 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"]) apply (subst ring_n_pd_def) apply (simp add:Sr_def) apply (simp add:value_mI_genTr1)
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.0.201Bemerkung:
¤
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.