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 |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 theBoolean
or theString
will result in different conclusionsa 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>
specificallyTuple<False, "I don't">
. The booleanFalse
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 theBoolean
andString
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 theString
usually overwrites theBoolean
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 |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.