this blogpost was partially inspired by https://lajili.com/posts/post-1/
IPC
Type mismatches
consider the following conversation
Q: “Does god exist?”
A: “In my opinion, the existence of a deity or deities is not supported by scientific evidence or reasoning, which guides my understanding of the universe and our place in it.”
| 2 | answer(Opinion("the existence of ...")); | -------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `String`, found `Opinion<String>` | | | arguments to this function are incorrect | = note: expected type `String` found enum `Opinion<String>`
This is a type mismatch, the Asker was seeking a statement of fact. Thankfully our interpreter can do context dependent implicit conversion.
here are a couple of other examples and what types they would expect,
|----------------------------------------------|-------------------------|-----------------------|
| Question | Expected Type | Available Conversions |
|----------------------------------------------|-------------------------|-----------------------|
| "do you still want this, or can I eat this?" | `Tuple<Boolean,Boolean>`| `Boolean` |
| "do you want A, B or C" | `Enum(A,B,C)` | `Integer` |
| "A or B" | `Enum(A,B)` | `Boolean, Integer` |
|----------------------------------------------|-------------------------|-----------------------|
Value/Sign mismatch
Another source of misunderstanding is the use of double negatives.
Sometimes when we ask a question we get an answer in the form of a Tuple<Boolean,String>
where examining either the Boolean
or the String
will result in different conclusions
a common example would be:
Q: “You don’t want desert right?” A: “No, I don’t.”
“No I don’t.” is of type Tuple<Boolean,String>
specifically Tuple<False, "I don't">
.
The boolean False
could initially suggest agreement with the statement (implying they do want dessert),
but the string “I don’t” actually affirms the initial question’s negative phrasing,
indicating they do not want dessert. This creates a situation where the Boolean
and String
components of the answer seem to contradict each other if taken at face value without considering
the context of double negatives. In cases like this the String
usually overwrites the Boolean
Type aliasing and Conflicting Definitions
When having a conversation, two parties might have conflicting definitions of concepts, similar to a “dependency conflict” in software development. This issue is akin to a linker error that arises when your project’s dependencies require two different versions of a library, each containing conflicting definitions.
error[E0499]: version conflict for 'definitions' dependency --> src/conversation.ipc:1:5 | 1 | use definitions::RATIONALITY; | ^^^^^^^^^^^^^^^^^^^^^^^^ | = note: the current application depends on 'definitions' version 15.3.8 (economics) and 13.7.3 (philosophy) = note: Answerer's 'definitions' version 15.3.8 (economics) defines RATIONALITY as "Making decisions based on maximizing utility or benefit within constraints." = note: Asker's 'definitions' version 13.7.3 (philosophy) defines RATIONALITY as "Being reasonable, coherent, and logical in thinking and decision-making, beyond just self-interest" = note: consider calling "evidence_sharing()" or "agree_to_disagree()" or explicitly specifying which version you are referencing to resolve the conflict
Sometimes it’s acceptable to fail silently when encountering conflicting definitions in a conversation, like in cases where: (A) the definition in question is not central to the information being communicated. (B) the definitions are close enough that they still allow for effective communication.
However, in all other scenarios, it may be necessary to engage in evidence sharing to resolve these conflicts.