diff --git a/FEM/Algebra/MonoidComp.v b/FEM/Algebra/MonoidComp.v index 548295d2c45eccd59330e25557edf5c0a457ca11..c3200bc4ad3ef8ad5b5771b0a6dc7e337085e394 100644 --- a/FEM/Algebra/MonoidComp.v +++ b/FEM/Algebra/MonoidComp.v @@ -216,7 +216,7 @@ Lemma comp_n_funS : (forall i, funS PE PE (f i)) -> funS PE PE (comp_n f). Proof. intros n f Hf; induction n as [|n Hn]; - [rewrite comp_n_nil; [apply funS_id | easy] | rewrite comp_n_ind_l]. + [rewrite comp_n_nil; [apply funS_id |]; easy | rewrite comp_n_ind_l]. apply (funS_comp_compat PE); [apply Hn; unfold liftF_S |]; easy. Qed. @@ -292,9 +292,9 @@ Lemma comp_n_part_funS : funS PE PE (comp_n_part f j). Proof. intros n f j Hf; induction n as [|n Hn]; - [rewrite comp_n_part_nil; [apply funS_id | easy] |]. + [rewrite comp_n_part_nil; [apply funS_id |]; easy |]. destruct (ord_eq_dec j ord0) as [Hj0 | Hj0]; - [rewrite (comp_n_part_0 _ _ Hj0); apply funS_id |]. + [rewrite (comp_n_part_0 _ _ Hj0); apply funS_id; easy |]. rewrite comp_n_part_ind_l; apply (funS_comp_compat PE); [apply Hn |]. intros; apply (widenF_liftF_S_P_compat _ Hj0 Hf); easy. apply (widenF_0_P_compat Hj0 Hf). diff --git a/FEM/Compl/Function_sub.v b/FEM/Compl/Function_sub.v index 5afcaffd21933198918888c9d9fa6f9e6ccd54ab..f955325708a5bc176fe46d3ff65365391c5fcc77 100644 --- a/FEM/Compl/Function_sub.v +++ b/FEM/Compl/Function_sub.v @@ -292,10 +292,12 @@ Section FunS_Facts3. Context {T : Type}. -Variable P : T -> Prop. +Context {P : T -> Prop}. + +Context {f : T -> T}. -Lemma funS_id : funS P P id. -Proof. apply funS_equiv; easy. Qed. +Lemma funS_id : same_funS P f id -> funS P P f. +Proof. intros Hf _ [y Hy]; rewrite Hf; easy. Qed. End FunS_Facts3. @@ -623,6 +625,23 @@ End SurjS_Facts7. Section CanS_Facts1. +Context {T : Type}. + +Context {P : T -> Prop}. + +Context {f : T -> T}. + +Lemma canS_id_l : same_funS P f (id : T -> T) -> canS P f id. +Proof. easy. Qed. + +Lemma canS_id_r : same_funS P f (id : T -> T) -> canS P id f. +Proof. easy. Qed. + +End CanS_Facts1. + + +Section CanS_Facts2. + Context {T1 T2 : Type}. Context {P1 : T1 -> Prop}. @@ -638,10 +657,10 @@ Lemma canS_ext_r : funS P1 P2 f -> same_funS P2 g g' -> canS P1 f g -> canS P1 f g'. Proof. intros Hf Hg H x1 Hx1; rewrite -Hg//; [apply H | apply Hf]; easy. Qed. -End CanS_Facts1. +End CanS_Facts2. -Section CanS_Facts2. +Section CanS_Facts3. Context {T1 T2 : Type}. @@ -656,10 +675,10 @@ Lemma canS_ext : canS P1 f g -> canS P1 f' g'. Proof. move=> H1 H2 H3 /(canS_ext_r H1 H3) /(canS_ext_l H2); easy. Qed. -End CanS_Facts2. +End CanS_Facts3. -Section CanS_Facts3. +Section CanS_Facts4. Context {T1 T2 : Type}. @@ -704,10 +723,10 @@ intros Hf; exists (fun x2 => match imS_dec P1 f x2 with exists x1; rewrite not_imp_not_r_and_equiv; easy. Qed. -End CanS_Facts3. +End CanS_Facts4. -Section CanS_Facts4. +Section CanS_Facts5. Context {T1 T2 : Type}. @@ -724,10 +743,10 @@ intros H1 H2 H3 H4 x2 Hx2; apply H3; [apply H1, Im | easy | rewrite H4//]; apply H2; easy. Qed. -End CanS_Facts4. +End CanS_Facts5. -Section CanS_Facts5. +Section CanS_Facts6. Context {T1 T2 T3 : Type}. @@ -746,11 +765,28 @@ Proof. move=> /funS_equiv H1 H2 H3 x1 Hx1; rewrite -> !comp_correct, H3, H2; auto. Qed. -End CanS_Facts5. +End CanS_Facts6. Section BijS_Facts1. +Context {T : Type}. + +Context {P : T -> Prop}. + +Context {f : T -> T}. + +Lemma bijS_id : same_funS P f (id : T -> T) -> bijS P P f. +Proof. +intros; apply (BijS _ _ _ id); repeat split; + [apply funS_id.. | apply canS_id_l | apply canS_id_r]; easy. +Qed. + +End BijS_Facts1. + + +Section BijS_Facts2. + Context {T1 T2 : Type}. Hypothesis HT1 : inhabited T1. @@ -769,10 +805,10 @@ apply (canS_ext_l Hg Hf3). apply (canS_ext_r Hf2 Hg Hf4). Qed. -End BijS_Facts1. +End BijS_Facts2. -Section BijS_Facts2. +Section BijS_Facts3. Context {T1 T2 : Type}. Hypothesis HT1 : inhabited T1. @@ -816,10 +852,10 @@ Lemma bijS_ex_uniq_equiv : funS P1 P2 f /\ (forall x2, P2 x2 -> exists! x1, P1 x1 /\ f x1 = x2). Proof. split; [apply bijS_ex_uniq | intros; apply bijS_ex_uniq_rev; easy]. Qed. -End BijS_Facts2. +End BijS_Facts3. -Section BijS_Facts3. +Section BijS_Facts4. Context {T1 T2 : Type}. @@ -846,10 +882,10 @@ Qed. Lemma bijS_surjS : bijS P1 P2 f -> surjS P1 P2 f. Proof. move=> [g [_ [/funS_equiv Hg [_ Hf]]]] x2 Hx2; exists (g x2); auto. Qed. -End BijS_Facts3. +End BijS_Facts4. -Section BijS_Facts4. +Section BijS_Facts5. Context {T1 T2 : Type}. Hypothesis HT1 : inhabited T1. @@ -874,10 +910,10 @@ split; [apply (bijS_injS P2) | apply bijS_surjS]; easy. apply injS_surjS_bijS; easy. Qed. -End BijS_Facts4. +End BijS_Facts5. -Section BijS_Facts5. +Section BijS_Facts6. Context {T1 T2 : Type}. Hypothesis HT1 : inhabited T1. @@ -895,10 +931,10 @@ Qed. Lemma bij_S_equiv : bijective f <-> bijS fullset fullset f. Proof. rewrite bij_equiv bijS_equiv// inj_S_equiv surj_S_equiv; easy. Qed. -End BijS_Facts5. +End BijS_Facts6. -Section BijS_Facts6. +Section BijS_Facts7. Context {T1 T2 T3 : Type}. Hypothesis HT1 : inhabited T1. @@ -925,10 +961,10 @@ Proof. intros [f1 Hf] [g1 Hg]; exists (f1 \o g1); apply bijS_spec_comp_compat; easy. Qed. -End BijS_Facts6. +End BijS_Facts7. -Section BijS_Facts7. +Section BijS_Facts8. Context {T1 T2 T3 : Type}. Hypothesis HT1 : inhabited T1. @@ -946,10 +982,10 @@ intros H1 H2; move: (proj1 (bijS_equiv HT1) H2) => [_ [H3 _]]. apply injS_comp_reg with g; easy. Qed. -End BijS_Facts7. +End BijS_Facts8. -Section BijS_Facts8. +Section BijS_Facts9. Context {T1 T2 T3 : Type}. Hypothesis HT1 : inhabited T1. @@ -967,10 +1003,10 @@ intros H1 H2; move: (proj1 (bijS_equiv HT1) H2) => [_ [_ H3]]. apply (surjS_comp_reg P1 f); easy. Qed. -End BijS_Facts8. +End BijS_Facts9. -Section BijS_Facts9. +Section BijS_FactsA. Context {T1 T2 : Type}. @@ -989,10 +1025,10 @@ Lemma bijS_canS_uniq_r : bijS P1 P2 f -> canS P1 f g -> canS P1 f h -> same_funS P2 g h. Proof. move=> /bijS_surjS; apply surjS_canS_uniq_r. Qed. -End BijS_Facts9. +End BijS_FactsA. -Section BijS_Facts10. +Section BijS_FactsB. Context {T1 T2 : Type}. @@ -1021,7 +1057,7 @@ intros Hg Hf; apply bijS_ex; exists f; repeat split; [.. | easy]. apply (bijS_funS Hf). Qed. -End BijS_Facts10. +End BijS_FactsB. Section F_invS_Def.