Skip to content

Commit 8df783d

Browse files
MarieTragicus
authored andcommitted
ComplexNumfieldtype
1 parent d4e52e7 commit 8df783d

File tree

1 file changed

+74
-38
lines changed

1 file changed

+74
-38
lines changed

theories/holomorphy.v

Lines changed: 74 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Import Order.TTheory GRing.Theory Num.Theory ComplexField Num.Def complex.
1111
Local Open Scope ring_scope.
1212
Local Open Scope classical_set_scope.
1313
Local Open Scope complex_scope.
14+
Import numFieldNormedType.Exports.
1415

1516
Set Implicit Arguments.
1617
Unset Strict Implicit.
@@ -19,6 +20,41 @@ Unset Printing Implicit Defensive.
1920
(* I need to import ComplexField to use its lemmas on RComplex,
2021
I don't want the canonical lmodtype structure on C,
2122
Therefore this is based on a fork of real-closed *)
23+
Section ComplexNumfieldType.
24+
Variable R : rcfType.
25+
Local Notation sqrtr := Num.sqrt.
26+
Local Notation C := R[i].
27+
28+
Local Canonical complex_pointedType := [pointedType of C for [pointedType of C^o]].
29+
Local Canonical complex_filteredType :=
30+
[filteredType C of C for [filteredType C of C^o]].
31+
Local Canonical complex_topologicalType :=
32+
[topologicalType of C for [topologicalType of C^o]].
33+
Local Canonical complex_uniformType := [uniformType of C for [uniformType of C^o]].
34+
35+
Local Canonical complex_pseudoMetricType :=
36+
[pseudoMetricType [numDomainType of C] of C for [pseudoMetricType [numDomainType of C] of C^o]].
37+
(* missing join ? is [numDomainType of C] ok here ? *)
38+
39+
Local Canonical complex_lmodType := [lmodType C of C for [lmodType C of C^o]].
40+
Local Canonical complex_lalgType := [lalgType C of C for [lalgType C of C^o]].
41+
Local Canonical complex_algType := [algType C of C for [algType C of C^o]].
42+
Local Canonical complex_comAlgType := [comAlgType C of C].
43+
Local Canonical complex_unitAlgType := [unitAlgType C of C].
44+
Local Canonical complex_comUnitAlgType := [comUnitAlgType C of C].
45+
Local Canonical complex_vectType := [vectType C of C for [vectType C of C^o]].
46+
Local Canonical complex_FalgType := [FalgType C of C].
47+
Local Canonical complex_fieldExtType :=
48+
[fieldExtType C of C for [fieldExtType C of C^o]].
49+
Local Canonical complex_pseudoMetricNormedZmodType :=
50+
[pseudoMetricNormedZmodType C of C for [pseudoMetricNormedZmodType C of C^o]].
51+
Local Canonical complex_normedModType :=
52+
[normedModType C of C for [normedModType C of C^o]].
53+
54+
(* TODO : joins*)
55+
56+
End ComplexNumfieldType.
57+
2258

2359
Section complex_extras.
2460
Variable R : rcfType.
@@ -33,22 +69,22 @@ by move=> -> ; split.
3369
by case=> //= -> ->.
3470
Qed.
3571

36-
Lemma Re0 : Re 0 = 0 :> R.
37-
Proof. by []. Qed.
72+
Lemma Re0 : Re 0 = 0 :> R.
73+
Proof. by []. Qed.
3874

3975
Lemma Im0 : Im 0 = 0 :> R.
4076
Proof. by []. Qed.
4177

4278
Lemma ReIm_eq0 (x : C) : (x = 0) = ((Re x = 0) /\ (Im x = 0)).
4379
Proof. by rewrite -[in Re x= _]Re0 -Im0 -eqE_complex. Qed.
4480

45-
Lemma scalei_muli (z : C^o) : 'i * z = 'i *: z.
81+
Lemma scalei_muli (z : C) : 'i * z = 'i *: z.
4682
Proof. by []. Qed.
4783

4884
Lemma iE : 'i%C = 'i :> C.
4985
Proof. by []. Qed.
5086

51-
Lemma scalecM : forall (w v : C^o), (v *: w = v * w).
87+
Lemma scalecM : forall (w v : C), (v *: w = v * w).
5288
Proof. by []. Qed.
5389

5490
Lemma normc0 : normc 0 = 0 :> R .
@@ -125,7 +161,7 @@ Qed.
125161
Lemma realCM (a b :R) : a%:C * b%:C = (a * b)%:C.
126162
Proof. by rewrite eqE_complex /= !mulr0 mul0r addr0 subr0. Qed.
127163

128-
Lemma complexA: forall (h : C^o), h%:A = h.
164+
Lemma complexA: forall (h : C), h%:A = h.
129165
Proof. by move => h; rewrite scalecM mulr1. Qed.
130166

131167
Lemma lecM (a b : R) k : a +i* b *+ k = (a *+ k) +i* (b *+ k).
@@ -319,12 +355,12 @@ Lemma filter_compE ( T U V : topologicalType)
319355
Proof. by []. Qed.
320356

321357
Lemma within_continuous_withinNx
322-
(R C : numFieldType) (U : normedModType C) (f : U -> R^o) :
358+
(R C : numFieldType) (U : normedModType C) (f : U -> R) :
323359
{for (0 : U), continuous f} ->
324-
(forall x, f x = 0 -> x = 0) -> f @ nbhs' (0 :U) --> nbhs' (0 : R^o).
360+
(forall x, f x = 0 -> x = 0) -> f @ nbhs' (0 :U) --> nbhs' (0 : R).
325361
Proof.
326362
move => cf f0 A /=.
327-
rewrite !/nbhs /= /nbhs /= /nbhs' /within /= !nearE => H. Admitted.
363+
rewrite !/nbhs /= /nbhs /= /nbhs' /within /= !nearE => []. Admitted.
328364

329365
Notation "f %:Rfun" :=
330366
(f : (Rcomplex_normedModType _) -> (Rcomplex_normedModType _))
@@ -353,7 +389,7 @@ apply/eqP; rewrite eq_complex; apply/andP.
353389
by split; simpl; apply/eqP; rewrite ?mulr1 ?mulr0.
354390
Qed.
355391

356-
Lemma scalecr: forall w: C^o, forall r : R, r *: (w: Rcomplex) = r%:C *: w .
392+
Lemma scalecr: forall w: C, forall r : R, r *: (w: Rcomplex) = r%:C *: w .
357393
Proof.
358394
Proof. by move=> [a b] r; rewrite eqE_complex //=; split; simpc. Qed.
359395

@@ -370,7 +406,7 @@ Proof. rewrite eqE_complex //=. Qed.
370406
End algebraic_lemmas.
371407

372408

373-
Section complex_topological.
409+
(* Section complex_topological.
374410
Variable R : realType.
375411
Local Notation C := R[i].
376412
@@ -411,7 +447,7 @@ Canonical complex_pseudoMetricNormedZmodType :=
411447
Canonical complex_normedModType :=
412448
[normedModType C of C for [normedModType C of C^o]].
413449
414-
End complex_topological.
450+
End complex_topological. *)
415451

416452
Section Holomorphe_der.
417453
Variable R : realType.
@@ -430,10 +466,10 @@ Lemma limin_scaler (K : numFieldType) (V : normedModType K) (T : topologicalType
430466
cvg(f @ F) -> k *: lim (f @ F) = lim ((k \*: f) @ F ).
431467
Proof. by move => cv; apply/esym/cvg_lim => //; apply: cvgZr. Qed.
432468

433-
Definition holomorphic (f : C^o -> C^o) (c : C) :=
434-
cvg ((fun h => h^-1 *: (f (c + h) - f c)) @ (nbhs' (0:C^o))).
469+
Definition holomorphic (f : C-> C ) (c : C) :=
470+
cvg ((fun h => h^-1 *: (f (c + h) - f c)) @ (nbhs' (0:C))).
435471

436-
Lemma holomorphicP (f : C^o -> C^o) (c: C^o) : holomorphic f c <-> derivable f c 1.
472+
Lemma holomorphicP (f : C -> C) (c: C) : holomorphic f c <-> derivable f c 1.
437473
Proof.
438474
rewrite /holomorphic /derivable.
439475
suff -> : (fun h : C => h^-1 *: ((f(c + h) - f c))) =
@@ -445,44 +481,44 @@ Definition Rdifferentiable (f : C -> C) (c : C) := (differentiable f%:Rfun c%:Rc
445481

446482
(* No Rmodule structure on C if we can avoid,
447483
so the following line shouldn't type check. *)
448-
Fail Definition Rderivable_fromcomplex_false (f : C^o -> C^o) (c v: C^o) :=
449-
cvg (fun (h : R^o) => h^-1 *: (f (c +h *: v) - f c)) @ (nbhs' (0:R^o)).
484+
Fail Definition Rderivable_fromcomplex_false (f : C -> C) (c v: C) :=
485+
cvg (fun (h : R) => h^-1 *: (f (c +h *: v) - f c)) @ (nbhs' (0:R)).
450486

451-
Definition realC : R^o -> C := (fun r => r%:C).
487+
Definition realC : R -> C := (fun r => r%:C).
452488

453489
Lemma continuous_realC: continuous realC.
454490
Proof.
455491
move => x A /= [] r /[dup] /realC_gt0 Rer0 /gt0_realC rRe H; exists (Re r); first by [].
456492
by move => z /= nz; apply: (H (realC z)); rewrite /= -realCB realC_norm rRe ltcR.
457-
Qed.
493+
Qed.
458494

459495
Lemma Rdiff1 (f : C -> C) c :
460496
lim ( (fun h : C => h^-1 *: ((f (c + h) - f c) ) )
461497
@ (realC @ (nbhs' 0)))
462498
= 'D_1 (f%:Rfun) c%:Rc :> C.
463499
Proof.
464500
rewrite /derive.
465-
have -> : (fun h : C^o => h^-1 *: ((f (c + h) - f c))) @ (realC @ (nbhs' 0)) =
466-
(fun h : C^o => h^-1 *: ((f (c + h) - f c)))
467-
\o realC @ (nbhs' (0 : R^o)) by [].
501+
have -> : (fun h : C => h^-1 *: ((f (c + h) - f c))) @ (realC @ (nbhs' 0)) =
502+
(fun h : C => h^-1 *: ((f (c + h) - f c)))
503+
\o realC @ (nbhs' (0 : R)) by [].
468504
suff -> : ( (fun h : C => h^-1 *: (f (c + h) - f c)) \o realC)
469-
= (fun h : R^o => h^-1 *: ((f%:Rfun \o shift c) (h *: (1%:Rc)) - f c) ) :> (R -> C) .
470-
by [].
505+
= (fun h : R => h^-1 *: ((f%:Rfun \o shift c) (h *: (1%:Rc)) - f c) ) :> (R -> C) .
506+
by []. (*TODO : very long*)
471507
apply: funext => h /=.
472508
by rewrite Inv_realC /= -!scalecr realC_alg [X in f X]addrC.
473509
Qed.
474510

475511

476-
Lemma Rdiffi (f : C^o -> C^o) c:
477-
lim ( (fun h : C^o => h^-1 *: ((f (c + h * 'i) - f c)))
512+
Lemma Rdiffi (f : C -> C) c:
513+
lim ( (fun h : C => h^-1 *: ((f (c + h * 'i) - f c)))
478514
@ (realC @ (nbhs' (0 ))))
479515
= 'D_('i) (f%:Rfun) c%:Rc :> C.
480516
Proof.
481517
rewrite /derive.
482518
have -> :
483-
((fun h : (R[i])^o => h^-1 *: (f (c + h * 'i) - f c)) @ (realC @ nbhs' 0))
484-
= ((fun h : (R[i])^o => h^-1 *: (f (c + h * 'i) - f c)) \o realC) @ nbhs' 0 by [].
485-
suff -> : (fun h : (R[i])^o => h^-1 * (f (c + h * 'i) - f c)) \o
519+
((fun h : (R[i]) => h^-1 *: (f (c + h * 'i) - f c)) @ (realC @ nbhs' 0))
520+
= ((fun h : (R[i]) => h^-1 *: (f (c + h * 'i) - f c)) \o realC) @ nbhs' 0 by [].
521+
suff -> : (fun h : (R[i]) => h^-1 * (f (c + h * 'i) - f c)) \o
486522
realC = fun h : R => h^-1 *: ((f%:Rfun \o shift c) (h *: ('i%:Rc)) - f c).
487523
by [].
488524
apply: funext => h /=.
@@ -492,12 +528,12 @@ Qed.
492528
(* should be generalized to equivalent norms *)
493529
(* but there is no way to state it for now *)
494530
Lemma littleoCo (E : normedModType C) (h e : E -> C) (x : E) :
495-
[o_x (e : E -> C^o) of (h : E -> C^o)] =
531+
[o_x (e : E -> C) of (h : E -> C)] =
496532
[o_x (e : E -> Rc) of (h : E -> Rc)].
497533
Proof.
498-
suff heP : (h : E -> C^o) =o_x (e : E -> C^o) <->
534+
suff heP : (h : E -> C) =o_x (e : E -> C) <->
499535
(h : E -> Rc) =o_x (e : E -> Rc).
500-
have [ho|hNo] := asboolP ((h : E -> C^o) =o_x (e : E -> C^o)).
536+
have [ho|hNo] := asboolP ((h : E -> C) =o_x (e : E -> C)).
501537
by rewrite !littleoE// -!eqoP// -heP.
502538
by rewrite !littleoE0// -!eqoP// -heP.
503539
rewrite !eqoP; split => small _/posnumP[eps]; near=> y.
@@ -539,24 +575,24 @@ have realC'0: realC @ nbhs' 0 --> nbhs' 0.
539575
by move => /= x /complexI.
540576
have HR0:(quotC \o (realC) @ nbhs' 0) --> l.
541577
by apply: cvg_comp; last by exact: H.
542-
have lem : quotC \o *%R^~ 'i%R @ (realC @ (nbhs' (0 : R^o))) --> l.
578+
have lem : quotC \o *%R^~ 'i%R @ (realC @ (nbhs' (0 : R))) --> l.
543579
apply: cvg_comp; last by exact: H.
544580
rewrite (filter_compE _ realC); apply: cvg_comp; first by exact: realC'0.
545581
apply: within_continuous_withinNx; first by apply: scalel_continuous.
546582
move => x /eqP; rewrite mulIr_eq0 ; last by apply/rregP; apply: neq0Ci.
547583
by move/eqP.
548-
have HRcomp: cvg (quotC \o *%R^~ 'i%R @ (realC @ (nbhs' (0 : R^o)))) .
584+
have HRcomp: cvg (quotC \o *%R^~ 'i%R @ (realC @ (nbhs' (0 : R)))) .
549585
by apply/cvg_ex; simpl; exists l.
550-
have ->: lim (quotR @ (realC @ (nbhs' (0 : R^o))))
551-
= 'i *: lim (quotC \o ( fun h => h *'i) @ (realC @ (nbhs' (0 : R^o)))).
586+
have ->: lim (quotR @ (realC @ (nbhs' (0 : R))))
587+
= 'i *: lim (quotC \o ( fun h => h *'i) @ (realC @ (nbhs' (0 : R)))).
552588
have: 'i \*:quotC \o ( fun h => h *'i) =1 quotR.
553589
move => h /= ;rewrite /quotC /quotR /=.
554590
rewrite invcM scalerA mulrC -mulrA mulVf ?mulr1 ?neq0Ci //.
555591
by move => /funext <-; rewrite (limin_scaler _ 'i HRcomp).
556592
rewrite scalecM.
557-
suff: lim (quotC @ (realC @ (nbhs' (0 : R^o))))
558-
= lim (quotC \o *%R^~ 'i%R @ (realC @ (nbhs' (0 : R^o)))) by move => -> .
559-
suff -> : lim (quotC @ (realC @ (nbhs' (0 : R^o)))) = l.
593+
suff: lim (quotC @ (realC @ (nbhs' (0 : R))))
594+
= lim (quotC \o *%R^~ 'i%R @ (realC @ (nbhs' (0 : R)))) by move => -> .
595+
suff -> : lim (quotC @ (realC @ (nbhs' (0 : R)))) = l.
560596
by apply/eqP; rewrite eq_sym; apply/eqP; apply: (cvg_map_lim _ lem).
561597
by apply: cvg_map_lim.
562598
Qed.

0 commit comments

Comments
 (0)