Record is_linear (l : U -> V) := {
  linear_plus : forall (x y : U), l (plus x y) = plus (l x) (l y) ;
  linear_scal : forall (k : K) (x : U), l (scal k x) = scal k (l x) ;
  linear_norm : exists M : R, 0 < M /\ (forall x : U, norm (l x) <= M * norm x) }.Record is_linear (l : U -> V) := {
  linear_plus : forall (x y : U), l (plus x y) = plus (l x) (l y) ;
  linear_scal : forall (k : K) (x : U), l (scal k x) = scal k (l x) ;
  linear_norm : exists M : R, 0 < M /\ (forall x : U, norm (l x) <= M * norm x) }.Record is_linear (l : U -> V) := {
  linear_plus : forall (x y : U), l (plus x y) = plus (l x) (l y) ;
  linear_scal : forall (k : K) (x : U), l (scal k x) = scal k (l x) ;
  linear_norm : exists M : R, 0 < M /\ (forall x : U, norm (l x) <= M * norm x) }.Record is_linear (l : U -> V) := {
  linear_plus : forall (x y : U), l (plus x y) = plus (l x) (l y) ;
  linear_scal : forall (k : K) (x : U), l (scal k x) = scal k (l x) ;
  linear_norm : exists M : R, 0 < M /\ (forall x : U, norm (l x) <= M * norm x) }.

(* Specifications: *)
Lemma linear_zero (l : U -> V) : is_linear l -> l zero = zero.
Lemma linear_opp (l : U -> V) (x : U) : is_linear l -> l (opp x) = opp (l x).
Lemma linear_cont (l : U -> V) (x : U) : is_linear l -> continuous l x.
Lemma is_linear_ext (l1 l2 : U -> V) : (forall x, l1 x = l2 x) -> is_linear l1 -> is_linear l2.
Lemma is_linear_zero : is_linear (fun _ => zero).
Lemma is_linear_comp {K : AbsRing} {U V W : NormedModule K} (l1 : U -> V) (l2 : V -> W) : is_linear l1 -> is_linear l2 -> is_linear (fun x => l2 (l1 x)).
Lemma is_linear_id : is_linear (fun (x : V) => x).
Lemma is_linear_opp : is_linear (@opp V).
Lemma is_linear_plus : is_linear (fun x : V * V => plus (fst x) (snd x)).
Lemma is_linear_scal_l (x : V) : is_linear (fun k : K => scal k x).
Lemma is_linear_scal_r (k : K) : (forall n m : K, mult n m = mult m n) -> is_linear (fun x : V => scal k x).
Lemma is_linear_prod {K : AbsRing} {T U V : NormedModule K} (l1 : T -> U) (l2 : T -> V) : is_linear l1 -> is_linear l2 -> is_linear (fun t : T => (l1 t, l2 t)).
Lemma is_linear_fst {K : AbsRing} {U V : NormedModule K} : is_linear (fun t : U * V => fst t).
Lemma is_linear_snd {K : AbsRing} {U V : NormedModule K} : is_linear (fun t : U * V => snd t).
Lemma is_domin_linear {F : (T -> Prop) -> Prop} {FF : Filter F} (f : T -> W) (g : T -> U) (l : U -> V) : is_linear l -> is_domin F f g -> is_domin F f (fun t => l (g t)).