Skip to content
George Heineman edited this page Feb 8, 2018 · 25 revisions

The nextgen-solitaire repository contains the latest manifestation of applying Combinatory Logic Synthesis (CLS) to synthesize Java Solitaire variations in a product line.

History

We have developed a number of prototype tools for applying CLS to synthesizing Solitaire Product Line members. The genesis of the idea occurred at a Dagstuhl Seminar Design and Synthesis from Components (June 2014).

Researchers Jakob Rehof, Boris Düdder and George Heineman put together two independent research streams:

  1. Using Inhabitation in Bounded Combinatory Logic with Intersection Types for Composition Synthesis [Boris Düdder (Technical University of Dortmund), Oliver Garbe (Technical University of Dortmund), Moritz Martens (Technical University of Dortmund), Jakob Rehof (Technical University of Dortmund), Paweł Urzyczyn (University of Warsaw)]
  2. An Instance-Oriented Approach to Constructing Product Lines from Layers [Heineman(WPI)]

The Solitaire Product Line example is the result of this combined effort.

V0.6 using synthesis tool developed by Boris Düdder

We started with a tool developed by Boris Düdder as part of his PhD dissertation Automatic Synthesis of Component & Connector-Software Architectures with Bounded Combinatory Logic, 2014.

The first working iteration (LaunchPad-v0.6) was completed in November 2014, using a standalone F# executable on a Windows platform which synthesized three different variations -- FreeCell, Narcotic and Klondike.

This was constructed from a library as follows:

  • narcotic
  • solitaire
  • Solitaire.inhab
  • Solitaire.scs
  • moves
  • DeckMove.{inhab, scs}
  • PileMove.{inhab,scs}
  • ResetDeckMove.{inhab, scs}
  • controllers
  • ColumnController.{inhab, scs}
  • DeckController.{inhab, scs}
  • PileController.{inhab, scs}

final

V1.0 using LaunchPad plugin in Eclipse

The paper Towards migrating object-oriented frameworks to enable synthesis of product line members describes the initial prototype of a tool developed to work with product lines.