Hints for Y1,Y2.

  • Begin by trying to define X1 and X2 directly assignment 4 hint 3 hint 1, then once they're working, you can abstract back to a pair of combinators Y1 and Y2 that generate X1 and X2 for a given pair of arguments T1 and T2.

    You want:

    X1 <~~> T1 X1 X2 and
    X2 <~~> T2 X1 X2
    
  • X1 is presumably going to have some form like:

    (\elem1 elem2 ... (T1
                        (do-something-with-the-elems-to-make-X1)
                        (do-something-with-the-elems-to-make-X2)
                      ))
    some-elem1 some-elem2 ...
    

    Right? What will the form of X2 be?

  • Can you see how to go on?

  • Call the displayed abstract above (\elem1 elem2 ... (...)) "elem0". What's the relation between X1, elem0, elem1, elem2...?

  • Go on, now you can do it.