proposition: Lemma bool_true_iff_bneq_pick (b1 b2 b3 : bool) : refineEquiv { b0 : bool | b0 = b1 <-> b2 <> b3 } (ret (if b1 then if b3 then negb b2 else b2 else if b3 then b2 else negb b2)).
proof: Proof. setoid_rewrite bool_true_iff_bneq. rewrite refineEquiv_pick_eq. reflexivity. Qed.
imports: Coq.Strings.String Coq.Sets.Ensembles Coq.Sets.Finite_sets Coq.Lists.List Coq.Sorting.Permutation Coq.Classes.RelationPairs Fiat.ADT Fiat.ADT.ComputationalADT Fiat.ADTRefinement.Core Fiat.ADTNotation Fiat.ADTRefinement.GeneralRefinements Fiat.Computation Fiat.Common Fiat.Common.Ensembles Fiat.Common.Ensembles.Tactics Fiat.ComputationalEnsembles Fiat.FiniteSetADTs.FiniteSetADTMethodLaws Fiat.FiniteSetADTs.FiniteSetADT