<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
&nbsp;Hello,<br><br>I am trying to write an agda program (mySolution.agda) for the "Escape From Zurg: An Exercise in Logic Programming" ( <a href="http://web.engr.oregonstate.edu/%7Eerwig/zurg/" target="_blank">http://web.engr.oregonstate.edu/~erwig/zurg/</a> ).<br><br>This program lists all the possible options, after figuring out how to use the "&lt;" (less-than) in agda.<br><br>Can you please let me know what agda functionality / features I can add to make this program better?<br><br>Thanks a lot<br><br><br>module mySolution where<br><br>open import Data.List --&nbsp;&nbsp; using (List; []; _:_)<br>open import Data.Nat&nbsp; --&nbsp;&nbsp; using (ℕ)<br>open import Data.Tuple<br>open import Data.Bool<br>open import Data.Maybe<br>open import Function<br><br>data Toy : Set where<br>&nbsp;&nbsp; Buzz&nbsp;&nbsp; Woody&nbsp;&nbsp; Rex&nbsp;&nbsp; Hamm : Toy<br><br>time : Toy → ℕ<br>time Buzz&nbsp;&nbsp; = 5<br>time Woody&nbsp; = 10<br>time Rex&nbsp;&nbsp;&nbsp; = 20<br>time Hamm&nbsp;&nbsp; = 25<br><br>allToys : List Toy<br>allToys = Buzz ∷ Woody ∷ Rex ∷ Hamm ∷ []<br><br>LeftToys : Set<br>LeftToys = List Toy<br><br>RightToys : Set<br>RightToys = List Toy<br><br>FirstToy : Set<br>FirstToy = Toy<br>SecondToy : Set<br>SecondToy = Toy<br><br>mutual<br>&nbsp;&nbsp; Backwards : Set<br>&nbsp;&nbsp; Backwards = List (Maybe Tree)<br>&nbsp;&nbsp; Forwards : Set<br>&nbsp;&nbsp; Forwards = List (Maybe Tree)<br>&nbsp;&nbsp; data Tree : Set where<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; treeForward : FirstToy&nbsp;&nbsp;&nbsp; → SecondToy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → LeftToys&nbsp; → RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Backwards → Tree<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; treeBackward : Toy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → LeftToys&nbsp; → RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Forwards → Tree<br>{-<br>record Forward : Set where<br>&nbsp;&nbsp; field firstToy&nbsp; : Toy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secondToy : Toy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leftToys&nbsp; : LeftToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rightToys : RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nextBackwardSteps : List BackwardTree<br>record Backward : Set where<br>&nbsp;&nbsp; field toy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Toy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; leftToys&nbsp; : LeftToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rightToys : RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nextForwardSteps : List ForwardTree<br>mutual<br>&nbsp;&nbsp; data Forward (FirstToy : Toy) (SecondToy : Toy)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (LeftToys : Set) (RightToys : Set)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Backwards : List Tree)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Set where<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forward : FirstToy&nbsp;&nbsp; → SecondToy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → LeftToys → RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Backwards<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Forward FirstToy SecondToy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LeftToys RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Backwards<br>&nbsp;&nbsp; data Backward (Toy : Set)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (LeftToys : Set) (RightToys : Set)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Set where<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; backward : Toy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → LeftToys → RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Forwards<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Backward Toy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LeftToys RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forwards<br>-}<br>{-<br>mutual<br>&nbsp;&nbsp; Backwards : Set<br>&nbsp;&nbsp; Backwards = List Backward<br>&nbsp;&nbsp; Forwards : Set<br>&nbsp;&nbsp; Forwards = List Forward<br>&nbsp;&nbsp; data Forward (FirstToy : Toy) (SecondToy : Toy)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (LeftToys : Set) (RightToys : Set)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Backwards : Set)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Set where<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forward : FirstToy&nbsp;&nbsp; → SecondToy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → LeftToys → RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Backwards<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Forward FirstToy SecondToy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LeftToys RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Backwards<br>&nbsp;&nbsp; data Backward (Toy : Set)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (LeftToys : Set) (RightToys : Set)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Set where<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; backward : Toy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → LeftToys → RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Forwards<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; → Backward Toy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LeftToys RightToys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forwards<br>-}<br><br>-- subsets of size k<br>combinationsOf : ℕ → List Toy → List (List Toy)<br>combinationsOf 0 _&nbsp;&nbsp; = [ [] ]<br>combinationsOf _ []&nbsp; = []<br>combinationsOf k (x ∷ xs) = map (_∷_ x) (combinationsOf (k ∸ 1) xs)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++ combinationsOf k xs<br><br>toTuple : List Toy → Maybe (Toy × Toy)<br>toTuple (x ∷ y ∷ []) = just (tuple x y)<br>toTuple _ = nothing -- error "unknown combination"<br><br>_==_ : Toy → Toy → Bool<br>Buzz&nbsp; == Buzz&nbsp; = true<br>Woody == Woody = true<br>Rex&nbsp;&nbsp; == Rex&nbsp;&nbsp; = true<br>Hamm&nbsp; == Hamm&nbsp; = true<br>_&nbsp;&nbsp;&nbsp;&nbsp; == _&nbsp;&nbsp;&nbsp;&nbsp; = false<br><br>delete : Toy → List Toy → List Toy<br>delete toy toys = filter (λ a → not (a == toy)) toys<br><br>--fromJust : List (Maybe Toy) → List Toy<br>--fromJust xs = filter (λ a → not $ maybeToBool a) xs<br><br>mutual<br>&nbsp;&nbsp; buildTree : LeftToys → RightToys → Maybe (Toy × Toy) → Maybe Tree<br>&nbsp;&nbsp; buildTree (_ ∷ _ ∷ []) right (just (tuple firstToy secondToy))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = just&nbsp; (treeForward firstToy secondToy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- toys on the left<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; []<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- toys on the right<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (firstToy ∷ secondToy ∷ right)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- child trees<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [])<br>&nbsp;&nbsp; buildTree left right (just (tuple firstToy secondToy))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = just&nbsp; (treeForward firstToy secondToy<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- toys on the left<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lefttoys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- toys on the right<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; righttoys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- child trees<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --(fromJust ∘ map (backwardMoves<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (map (backwardMoves<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lefttoys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; righttoys)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ righttoys))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where lefttoys&nbsp; = delete firstToy ∘ delete secondToy $ left<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; righttoys = firstToy ∷ secondToy ∷ right<br>&nbsp;&nbsp; buildTree _ _ _ = nothing<br><br>&nbsp;&nbsp; backwardMoves : LeftToys → RightToys → Toy → Maybe Tree<br>&nbsp;&nbsp; backwardMoves left right backward<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = just&nbsp; (treeBackward backward -- Backward<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- toys on the left<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lefttoys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- toys on the right<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (delete backward right)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- child trees<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --(fromJust ∘ map (buildTree<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (map (buildTree lefttoys righttoys<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ∘ toTuple)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ∘ combinationsOf 2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ lefttoys))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where lefttoys = backward ∷ left<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; righttoys = (delete backward right)<br><br>allOptions : List (Maybe Tree)<br>allOptions = map (buildTree allToys [] ∘ toTuple)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ∘ combinationsOf 2 $ allToys<br><br>data Move : Set where<br>&nbsp;&nbsp; moveF : FirstToy → SecondToy → Move<br>&nbsp;&nbsp; moveB : Toy → Move<br><br>Choice : Set<br>Choice = List Move<br><br>mutual<br>&nbsp;&nbsp; treesToChoices : List (Maybe Tree) → List Choice<br>&nbsp;&nbsp; treesToChoices trees = concatMap treeToChoices trees<br><br>&nbsp;&nbsp; treeToChoices : Maybe Tree → List Choice<br>&nbsp;&nbsp; treeToChoices (just (treeForward x y [] _ []))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (((moveF x y) ∷ [] ) ∷ [])<br>&nbsp;&nbsp; treeToChoices (just (treeForward x y _ _ nextSteps))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = map (_∷_ (moveF x y)) $ treesToChoices nextSteps<br>&nbsp;&nbsp; treeToChoices (just (treeBackward x _ _ nextSteps))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = map (_∷_ (moveB x)) $ treesToChoices nextSteps<br>&nbsp;&nbsp; treeToChoices (nothing) = (([]) ∷ [])<br><br>Cost : Set<br>Cost = ℕ<br><br>moveCost : Move → Cost<br>moveCost (moveF x y) = (time x) ⊔ (time y)<br>moveCost (moveB x) = time x<br><br>costOfChoice : Choice → (Cost × Choice)<br>costOfChoice choice = tuple (sum ∘ map moveCost $ choice) choice<br><br>costOfChoices : List Choice → List (Cost × Choice)<br>costOfChoices = map costOfChoice<br><br>lessThan : ℕ → ℕ → Bool<br>lessThan zero (suc y)&nbsp;&nbsp;&nbsp; = true<br>lessThan (suc x) zero&nbsp;&nbsp;&nbsp; = false<br>lessThan zero zero&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = false<br>lessThan (suc x) (suc y) = lessThan x y<br><br>solution : List (Cost × Choice)<br>solution = filter (λ x → lessThan (fst x) 61)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ∘ costOfChoices ∘ treesToChoices $ allOptions<br><br>{-<br>main : IO Unit<br>--main = putStrLn ∘ groom ∘ filter (λ (cost , _) → cost &lt; 61)<br>main = putStrLn ∘ filter (λ &lt; cost , _ &gt; → cost &lt; 61)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ∘ costOfChoices ∘ treesToChoices $ allOptions<br>-}<br><br>                                               </body>
</html>