My Coursera “guided project” on Swish is now public - invalid link

The link doesn’t work:
And a search for “Prolog” at coursera finds nothing either.
So, it seems they removed your course early. (I had your course on my “to-do” list because I’ve failed multiple times in teaching Prolog to beginners and wondered how you had done it)

Are the course materials available elsewhere?

Hi Peter,

What kind of beginners are you referring to – to programming, or programmers to Prolog?

I am curious, what challenges did you encounter?


The link works for me, but Coursera sent me (and it seems all other participants in its community provided courses experiment) a termination notice, so it will only be up for another week or two.

I’ve started tinkering with Udemy’s alternative, so hope to have a new version of my course up “now now” as we say in South Africa (which basically means the same as manana in Mexico).

My idea is to call it “Programming in Logic with Prolog” since I’ve been inspired to go back to the classics, read the original writings of George Bool. Augustus de Morgan, John Venn… which I’ve found very inspiring. (I finally understood what “material implication” means, and it was a real Eureka! moment for me).

So within the next few weeks I hope to offer a course explaining classic logic alongside Prolog on Udemy. But it’s up to Udemy, and my relationships with corporations don’t tend to be loving.

1 Like

Strange. I added mine review (yesterday) and 4.1 became 4.2.
Should be enough ???


1 Like

Many thanks for the support @ghoen, but it seems Coursera set their deadline, and that’s it.

I’m focusing on an improved version to pitch to Udemy. One of the contraints I had with Coursera is free courses are limited to one hour, whereas Udemy allows what it calls promotional courses (ie free) to be up to two hours, so I can double the number of short lecture videos.

I’m planning to go through my translation of Jennifer Widom’s SQL intro into Prolog I put at SWISH -- SWI-Prolog for SHaring again, but more slowly and tying it into classical logic.

My outline would go something like this:

1.How logic, sets and relational databases are tied together by set-builder notation, using queries to make a set of student IDs for computer science applicants, electrical engineering applications etc.
2. Explaining how set complements are done in Prolog. (Creating a set of all the students who haven’t applied for computer science in the example may seem easy, but there are quite a lot of subtle traps most novices will fall into, and there’s a catch in Prolog that \+ breaks associativity).
3. One lecture devoted to and, showing how it creates joins and intersections in relational databases, how it equates to multiplication in two-valued algebra, and how it’s used for traditional “imperative” programing in Prolog.
4. One lecture devoted to or, how it equates to addition in two-valued algebra. In Prolog, or is a bit more complicated than and in that besides semi-colons, it can also be written as separate rules with neck operators (which one person complained I didn’t explain properly in the Coursera version). Or’s relationship to if p(x) then ... else... is generally confusing in programing, so I’ll also explain how cut ! fits in and Prolog’s -> syntactic sugar for ,!, which I previously omitted.
5. How to find all subsets in the application example. It only occurred to me after I used the difference between EE and CS applicants which in Jennifer Widom’s example is an empty set, ie false in Prolog, meant EE ⊆CS. I’d never understood the p ⇒ q rule in classical logic (which can be rewritten ¬p ∨q) before. Playing around with writing a general query to find all subsets of majors in Widom’s application example I found that De Morgan’s law converted my query to the material implication rule, so I found it a very educational example. Furthermore, if one writes the truth table for p ⇒ q using 0 and 1 instead of F and T, it equates to p ≤ q, a handy mnemonic for P ⊆ Q.
6. How to find all equivalent sets. Another bit of enlightenment I got was the algebraic manipulation required to get from P ⊆ Q and Q ⊆ P to (p ∧q) ∨(¬p ∧¬q) involves using algebra’s distribution rule in logic.
7. How to find all disjoint sets.

I’m going through a classical logic phase at the moment, so I find this stuff fascinating. But have to concede there is the slight problem it may bore most people comatose, so am battling to fill in Udemy’s questionnaire asking who the target market of my proposed course would be.

1 Like