úÎ6ö4     None%Return value of .YEach constraint function ([Int] -> Bool) is associated with a certain set of variables. ? represents this relationship for a given constraint function.Each w has a finite set of possible values, a value it holds and a probability distribution over the set of possible values.The integer values a  can take on.6Probability distribution; generally associated with a .+Returns the number of finite values that a  is over.bConstant, as defined in the research paper "Decentralized Constraint Satisfaction" Duffy, et al.Internally called function.yInitialize a distribution with each possible value having the same probability. For example, initDistribution 5 gives   [0.2, 0.2, 0.2, 0.2, 0.2]. DAdjust probability for the value which has just failed a constraint.OAdjust probability for values other than the one that just failed a constraint.6Adjust probability of taking on a value for a certain * given that a constraint was just failed.àGiven a distribution, update it based on the value of success. If successful, then set the probability of the current value to 1.0 and the probability for every other value to 0.0. Otherwise, update it with failureProb.Same as , but rather than returning a , this function returns a .$Internal iteration function used by .Creates a cummulative  out of a given .Given a cummulative P, this function returns the where a random value should be "placed" within the .3Returns a single random number between 0.0 and 1.0.Randomize the value of a .  Evaluate one ! with a list of values."&Evaluate the set constraint functions  constraints with a list of values.#@Apply a function at only one index of a list. Internal function.Get the  Constraints associated with a  of index n in the list of s..Get the constraint functions out of a list of s.$$Get a list of values from a list of s. !Randomizes the value of a single  in a list of . &Randomize all the variables in a list. Print variables. ZEither randomize or let a variable stay, depending on what the constraint check tells us.%UUpdate each variable in the indices list once. Internal function used by updateEach. LUpdate each variable in the variable set based on the constraint set value.Update the variable set n number of times.&wChecks if every probability in the distribution is either 0 or 1. If it is, then, all constraints have been satisfied.SCheck if the constraints have been solved by looking at the distributions of each .KThis is the moost important function within this library. Given a list of  and a list of I, the library uses the Communcation Free Learning Algorithm to return a  value. See  solveThreaded# for a parallelized implementation.rUpdates each variable in the variable set a number of times and does each variable's update in a separate thread.ŸSolve the constraint set in parallel using Haskell threads. In order for the solution to be parallelized, the program using DCFL must be compiled with GHC's  '-threaded' option.8'()*+!,-./0123 "#$ % &4567   +'()*+!,-./0123 "#$ % &45678      !"#$%&'()*+,-./012345 DCFL-0.1.6.0 Data.DCFLSolved ConstraintElVariableValues DistributioninitDistributioncummDistributiongetConstraintsForjustConstraintsrandomizeSingle randomizeprintVariablesupdate updateEachupdateEachTimes checkSolvedsolveupdateEachParallelupdateEachTimesParallel solveParallelwidthb oneIfEqualfailureCurrProbfailureOtherProb failureProb updateProbupdateVariableProbcummDistributionIter getValueIndex randomNumrandomizeVariableevalConstraint constraintevalConstraintsapplyAt getValues updateEach'checkDistrSolved variablesiterationCountvariableIndicespossible valueIndexdistrprobabreplicateDouble updateMapF$fShowConstraintEl$fNFDataVariable$fNFDataDistribution