From 87308ebf68157055705d3ed0d6c1b348270230c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Cl=C3=A9ment?= <francois.clement@inria.fr>
Date: Tue, 30 Jan 2024 22:01:51 +0100
Subject: [PATCH] ord_compl: Add and prove cast_ord_incrF,
 filterP_cast_ord_incrF.

Finite_family:
WIP: filterP_ord_incrF (modified, use new incrF_Rg_eq_eq).
Modify filterP_f_ord_incrF.
---
 FEM/Algebra/Finite_family.v | 23 +++++++++++------------
 FEM/Algebra/ord_compl.v     | 11 +++++++++++
 2 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/FEM/Algebra/Finite_family.v b/FEM/Algebra/Finite_family.v
index c28494ef..942574ec 100644
--- a/FEM/Algebra/Finite_family.v
+++ b/FEM/Algebra/Finite_family.v
@@ -4858,16 +4858,15 @@ Qed.
 
 Lemma filterP_ord_incrF :
   forall {n1 n2} {f : 'I_{n1,n2}} (Hf : incrF f) {P1 : 'Prop^n1}
-      {P2 : 'Prop^n2} (HP : extendPF f P1 P2) {j1 : 'I_(lenPF P1)},
+      {P2 : 'Prop^n2} (HP : extendPF f P1 P2),
     let H := lenPF_extendPF (incrF_inj Hf) HP in
-    f (filterP_ord j1) = filterP_ord (cast_ord H j1).
+    f \o filterP_ord = filterP_ord \o (cast_ord H).
 Proof.
-intros n1 n2 f Hf P1 P2 HP j1 H.
+intros n1 n2 f Hf P1 P2 HP H; apply incrF_Rg_eq_eq.
+apply incrF_comp; [apply filterP_ord_incrF | easy].
+apply filterP_cast_ord_incrF.
+
 
-(* trying high-level.
-move: (lenPF_n0_alt j1) => [i1 Hi1].
-move: (extendPF_unfunF_rev (incrF_inj Hf) HP) => HP2; subst.
-*)
 
 
 
@@ -4893,14 +4892,14 @@ Admitted.
 Lemma filterP_f_ord_incrF :
   forall {n1 n2} {f : 'I_{n1,n2}} (Hf : incrF f)
       {P1 : 'Prop^n1} {P2 : 'Prop^n2} (HP : extendPF f P1 P2)
-      {i1} (HP2 : P2 (f i1)) {j1 : 'I_(lenPF P1)},
+      {i1} (HP2 : P2 (f i1)),
     let H := lenPF_extendPF (incrF_inj Hf) HP in
-    filterP_f_ord f HP2 j1 = cast_ord H j1.
+    filterP_f_ord f HP2 = cast_ord H.
 Proof.
-intros n1 n2 f Hf P1 P2 HP i1 HP2 j1 H.
+intros n1 n2 f Hf P1 P2 HP i1 HP2 H; apply extF; intros j1.
 move: (extendPF_unfunF_rev (incrF_inj Hf) HP) => HP2'; subst.
-rewrite (filterP_f_ord_correct_alt _ (incrF_inj Hf) HP).
-apply filterP_ord_incrF.
+rewrite (filterP_f_ord_correct_alt _ (incrF_inj Hf) HP) -(comp_correct _ f).
+rewrite (filterP_ord_incrF Hf HP); easy.
 Qed.
 
 (* Was:
diff --git a/FEM/Algebra/ord_compl.v b/FEM/Algebra/ord_compl.v
index 84dad81c..d845d2c2 100644
--- a/FEM/Algebra/ord_compl.v
+++ b/FEM/Algebra/ord_compl.v
@@ -984,6 +984,9 @@ intros Hi; apply ord_inj; simpl; rewrite Hi subn1 //.
 move=>> ->; simpl; rewrite subn1 //.
 Qed.
 
+Lemma cast_ord_incrF : forall {n1 n2} (H : n1 = n2), incrF (cast_ord H).
+Proof. easy. Qed.
+
 (* Definition and properties of cast_f_ord. *)
 
 Definition cast_f_ord {n1 n2} (H : n1 = n2) (p1 : 'I_[n1]) : 'I_[n2] :=
@@ -2084,6 +2087,14 @@ intros n P j1 j2 Hj.
 
 Admitted.
 
+Lemma filterP_cast_ord_incrF :
+  forall {n1 n2} {P1 : 'I_n1 -> Prop} {P2 : 'I_n2 -> Prop}
+      (H : lenPF P1 = lenPF P2),
+    incrF (filterP_ord \o (cast_ord H)).
+Proof.
+intros; apply incrF_comp; [apply cast_ord_incrF | apply filterP_ord_incrF].
+Qed.
+
 Lemma filterP_cast_ord_eq :
   forall {n m} {P : 'I_n -> Prop} (H1 H2 : m = lenPF P) (j : 'I_m),
     filterP_ord (cast_ord H1 j) = filterP_ord (cast_ord H2 j).
-- 
GitLab