proposition: Proposition monotone_fubini_swap' {X Y Z : dcpo} (D₁ : directed_set X) (D₂ : directed_set Y) (f : monotone_function (X × Y) Z) : ⨆_{D₁} (fubini_monotone_function_l f (prod_directed_set D₁ D₂)) = ⨆_{D₂} (fubini_monotone_function_r f (prod_directed_set D₁ D₂)).
proof: Proof. refine (_ @ monotone_fubini_swap f (prod_directed_set D₁ D₂) @ _). - use antisymm_dcpo. + use dcpo_lub_is_least. cbn ; intro i. use dcpo_lub_is_least. cbn ; intro j. use less_than_dcpo_lub. * exact (i ,, pr2 j). * cbn. use less_than_dcpo_lub. ** exact (i ,, pr2 j). ** cbn. apply refl_dcpo. + use dcpo_lub_is_least. cbn ; intro i. use dcpo_lub_is_least. cbn ; intro j. use less_than_dcpo_lub. * exact (pr1 i). * cbn. use less_than_dcpo_lub. ** exact j. ** cbn. apply refl_dcpo. - use antisymm_dcpo. + use dcpo_lub_is_least. cbn ; intro i. use dcpo_lub_is_least. cbn ; intro j. use less_than_dcpo_lub. * exact (pr2 i). * cbn. use less_than_dcpo_lub. ** exact j. ** cbn. apply refl_dcpo. + use dcpo_lub_is_least. cbn ; intro i. use dcpo_lub_is_least. cbn ; intro j. use less_than_dcpo_lub. * exact (pr1 j ,, i). * cbn. use less_than_dcpo_lub. ** exact (pr1 j ,, i). ** cbn. apply refl_dcpo. Qed.
imports: UniMath.MoreFoundations.All UniMath.OrderTheory.Posets.Basics UniMath.OrderTheory.Posets.MonotoneFunctions UniMath.OrderTheory.DCPOs.Core.DirectedSets UniMath.OrderTheory.DCPOs.Core.Basics UniMath.OrderTheory.DCPOs.Core.ScottContinuous UniMath.OrderTheory.DCPOs.Examples.BinaryProducts