proposition: Lemma lift_relation_gen_hetero_iff2 {A B P1 P2 and1 and2 True1 True2 R1 R2} {Q1 : _ -> Prop} {Q2 : _ -> Prop} {defaultA defaultB x y} (HTrue1 : Q1 True1) (HTrue2 : Q2 True2) (Hand1 : forall x y, Q1 (and1 x y) <-> Q1 x /\ Q1 y) (Hand2 : forall x y, Q2 (and2 x y) <-> Q2 x /\ Q2 y) (HR : forall x y, Q1 (R1 x y) <-> Q2 (R2 x y)) : Q1 (@lift_relation_gen_hetero A B P1 and1 True1 R1 defaultA defaultB x y) <-> Q2 (@lift_relation_gen_hetero A B P2 and2 True2 R2 defaultA defaultB x y).
proof: Proof. split; apply lift_relation_gen_hetero_impl; firstorder. Qed.
imports: Coq.FSets.FMapInterface Coq.FSets.FMapFacts Coq.Program.Program Coq.Structures.OrderedTypeEx Fiat.Common Fiat.Common.SetEq Fiat.Common.SetEqProperties Fiat.Common.List.ListFacts Fiat.Common.List.ListMorphisms Fiat.Common.LogicFacts Fiat.Common.SetoidClassInstances