ChatGPT for concept creation

Hey all :slight_smile:

Just completed the book (a quick read) and set up ChatGPT to help me define concepts.
I’m copying here the system message / prompt, just in case it helps others.
It’s the first draft version, you are welcome to make it better :slight_smile:

context = """
You are an assistant specialized in Conceptual Design. \
Conceptual Design is a semi-formal framework for software design. \
Conceptual Design's main idea is the Concept. \
A Concept is an user-facing, fully independent, reusable nanoservice. \
A Concept has an unique name, a well defined purpose, a state, a set of actions, and operational principles. \
The formal concept definition for the Catalog Concept is: \
--- \
Concept: Catalog [Item] \
Purpose: Provide information about product and allow users to find the product they are seeking \
State: \
	listings: Shop -> set Listing \
	SKUs: Listing -> set SKU \
	product: SKU -> one Product \
	desc: Product -> one String \
	basePrice: Product -> one Currency \
	addProduct(s: Shop, sku: SKU, p: Currency, desc: String, out prod: Product): \
		new Product prod with basePrice = p, desc = desc. \
		sku.product = prod \
		s.add(sku) \
	removeProduct(s: Shop, sku: SKU) \
		remove sku from s \
	changeDescription(s: Shop, sku: SKU, desc: String) \
		get the Product p with sku in s \
		p.desc = desc \
	modifyBasePrice(s:Shop, sku:SKU, price: Currency) \
		get the Product p with sku in s \
		p.basePrice  = price \
Operational Principles: \
	addProduct(), modifyBasePrice(), changeDescription() \
	#add a product to the catalog, and edit its info at a future date \
--- \
The formal concept definition for the Todo Concept is: \
--- \
Concept: Todo \
Purpose: Keep track of tasks \
State: \
	done, pending: set Task \
Actions: \
	add(t: Task) \
        when t not in done or pending \
        add t to pending \
    delete(T: Task) \
        when t in done or pending \
        remove t from done or pending \
    complete(T: Task) \
        when t in pending \
        move t from pending to done \
Operational Principles: \
	after add(t) until delete(t) or complete(t), t in pending \
    after complete(t) until delete(t), t in done \
--- \
The formal concept definition for the Label Concept is: \
--- \
Concept: Label [Item] \
Purpose: Organize items into overlapping categories \
State: \
	labels: Item => set Label \
Actions: \
	affix(i: Item, l: Label) \
        add l to the labels of i \
    detach(i: Item, l: Label) \
        remove l from the labels of i \
    find(l: Label): set Item \
        return the items labeled with l \
    clear(i: Item) \
        remove item i with all it's labels \
Operational Principles: \
	after affix(i,l) and no detach(i,l), i in find(l)
    if no affix(i,l) or detach(i,l), i not in find(l)
--- \
Apps are built by coupling together concepts.
Example app: \
--- \
    app todo-label
        label [todo.Task]
    sync todo.delete(t)

So far the prompt works, it can define concepts and compare them.
What I don’t know yet, is the level of hallucination.

Some examples:

# Define the Collection concept
Concept: Collection [Item]
Purpose: Group items together for easy management and manipulation
  items: set Item
  add(i: Item)
    add i to items
  remove(i: Item)
    remove i from items
    remove all items from the collection
  find(): set Item
    return all items in the collection
Operational Principles:
  after add(i), i in find()
  after remove(i), i not in find()
# What's the difference between the Collection, List, Group concepts?

The Collection, List, and Group concepts are all related to organizing and managing sets of items, but they have different characteristics and purposes.

The Collection concept is a general-purpose concept that represents a group of items that share some commonality or belong together for some reason. A Collection can be unordered and can contain any type of item. It is often used as a base concept for more specific collection types.

The List concept is a specific type of ordered Collection that maintains the order of its items. A List is typically used when the order of the items is important, such as in a to-do list or a shopping list. Items in a List can be accessed by their position in the list.

The Group concept is a specific type of Collection that represents a set of items that are related or belong together in some way. A Group can be unordered or ordered, and its items can be of any type. Groups are often used to organize items into categories or to represent a hierarchy of items.

In summary, the Collection concept is a general-purpose concept for grouping items, the List concept is a specific type of ordered Collection, and the Group concept is a specific type of Collection for organizing related items.
1 Like

Hi @metamn – welcome to the forum! This looks like a nice start. I’ve been experimenting with different prompts for concept design, and Geoffrey Litt and I are actually building a concept design tutor for use in our senior year software development class this fall. I am in the process of writing a collection of short tutorials on different parts of concept design, which anyone is welcome to use as prompts. I haven’t officially released them yet, but you can find the evolving collection here:

Thanks David! Looking forward for the tutorials / prompt engineering help. Meantime tweaking ChatGPT on my own. I wonder if we can build concept catalogs, clusters without entropy, perhaps in a fast fashion … I know it sounds too much but it worth trying :slight_smile:

BTW the correct link to Tutorials is Tutorials | The Essence of Software

Keep up! :slight_smile:

Oops! Belated thanks for correcting the link. Fixed in my post now too.