proposition: Lemma merge_app : forall l1 l2 p l, CPropToProp (merge (l1 ++ l2) p) l <-> (CPropToProp (merge l1 p) l /\ CPropToProp (merge l2 p) l).
proof: Proof. intros l1 l2 p l. rewrite (merge_decomp (l1 ++ l2)). rewrite (merge_decomp l1). rewrite (merge_decomp l2). induction l1 as [| t l1]; simpl; [easy |]. destruct_tuple_obj t. rewrite (merge_decomp (l1 ++ l2)). rewrite (merge_decomp l1). split. - intros [[H12 H] h]. simpl in H. now repeat split; try easy; apply IHl1; split. - intros [[[H1 H] h] [H2 _]]. simpl in H. repeat split; try easy. now apply IHl1. Qed.
imports: Coq(Bool Floats Reals List Lia Lra) Flocq(Core PrimFloat BinarySingleNaN Operations) Specific_bigint Specific_ops Interval_helper Float_full Prog Lang_expr