proposition: Lemma refine_let : forall {A B : Type} (PA : A -> Prop) (PB : B -> Prop), refineEquiv (Pick (fun x: A * B => let (a, b) := x in PA a /\ PB b)) (a <- {a | PA a}; b <- {b | PB b}; ret (a, b)).
proof: Proof. t_refine. Qed.
imports: Coq.Strings.String Coq.Sets.Ensembles Coq.Bool.Bool Fiat.Common Fiat.Common.BoolFacts Fiat.Common.LogicFacts Fiat.Computation.Core Fiat.Computation.Monad Fiat.Computation.SetoidMorphisms Fiat.Computation.Refinements.Tactics