Index: doc/rob_thesis/examples/tuples/assign.c
===================================================================
--- doc/rob_thesis/examples/tuples/assign.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/tuples/assign.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,9 @@
+int x, z;
+double y;
+[double, double] f();
+
+int main () {
+  [x, y, z] = [f(), 3];       // multiple assignment
+  // [x, y, z] = 1.5;            // mass assignment
+}
+
Index: doc/rob_thesis/examples/tuples/cast.c
===================================================================
--- doc/rob_thesis/examples/tuples/cast.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/tuples/cast.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,10 @@
+[int, int, int] f();
+[int, [int, int], int] g();
+
+int main() {
+  ([int, double])f();           // (1)
+  ([int, [int], int])g();         // (2)
+  printf("%d %d\n", ([void, [int, int]])g());      // (3) -- should work and doesn't -- tries to construct void object, but should ignore that component in terms of the type of the tuple
+  // ([int, int, int, int])g();    // (4) -- should not work and doesn't
+  // ([int, [int, int, int]])g();  // (5) -- should not work and doesn't
+}
Index: doc/rob_thesis/examples/tuples/ctor.c
===================================================================
--- doc/rob_thesis/examples/tuples/ctor.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/tuples/ctor.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,10 @@
+struct S { int x; double y; };
+[void] ?{}(* [int, double] this, S s) {
+  this->0 = s.x;
+  this->1 = s.y;
+}
+int main() {
+  S s = { 123, 345 };
+  [int, double] x = s;
+  printf("%d %g\n", x);
+}
Index: doc/rob_thesis/examples/tuples/mrv.c
===================================================================
--- doc/rob_thesis/examples/tuples/mrv.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/tuples/mrv.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,2 @@
+[int, int] foo();
+[double, int] bar();
Index: doc/rob_thesis/examples/tuples/mrv_1.c
===================================================================
--- doc/rob_thesis/examples/tuples/mrv_1.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/tuples/mrv_1.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,34 @@
+#include <stdio.h>
+#include <ctype.h>
+struct mf_ret {
+  int freq;
+  char ch;
+};
+
+struct mf_ret most_frequent(const char * str) {
+  char freqs [26] = { 0 };
+  struct mf_ret ret = { 0, 'a' };
+  for (int i = 0; str[i] != '\0'; ++i) {
+    if (isalpha(str[i])) {        // only count letters
+      int ch = tolower(str[i]);   // convert to lower case
+      int idx = ch-'a';
+      if (++freqs[idx] > ret.freq) {  // update on new max
+        ret.freq = freqs[idx];
+        ret.ch = ch;
+      }
+    }
+  }
+  return ret;
+}
+
+void dothing(const char * str) {
+  struct mf_ret ret = most_frequent(str);
+  printf("%s -- %d %c\n", str, ret.freq, ret.ch);
+}
+
+int main() {
+  dothing("hello");
+  dothing("hello, world!");
+  dothing("aaabbbba");
+  dothing("");
+}
Index: doc/rob_thesis/examples/tuples/mrv_2.c
===================================================================
--- doc/rob_thesis/examples/tuples/mrv_2.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/tuples/mrv_2.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <ctype.h>
+
+int most_frequent(const char * str, char * ret_ch) {
+  char freqs [26] = { 0 };
+  int ret_freq = 0;
+  for (int i = 0; str[i] != '\0'; ++i) {
+    if (isalpha(str[i])) {        // only count letters
+      int ch = tolower(str[i]);   // convert to lower case
+      int idx = ch-'a';
+      if (++freqs[idx] > ret_freq) {  // update on new max
+        ret_freq = freqs[idx];
+        *ret_ch = ch;
+      }
+    }
+  }
+  return ret_freq;
+}
+
+void dothing(const char * str) {
+  char ch;
+  int freq = most_frequent(str, &ch);
+  printf("%s -- %d %c\n", str, freq, ch);
+}
+
+int main() {
+  dothing("hello");
+  dothing("hello, world!");
+  dothing("aaabbbba");
+  dothing("");
+}
Index: doc/rob_thesis/examples/tuples/mrv_3.c
===================================================================
--- doc/rob_thesis/examples/tuples/mrv_3.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
+++ doc/rob_thesis/examples/tuples/mrv_3.c	(revision 9c14ae94c6baf3aa3a91be49b0076852ea86e5ef)
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <ctype.h>
+
+[int, char] most_frequent(const char * str) {
+  char freqs [26] = { 0 };
+  int ret_freq = 0;
+  char ret_ch = 'a';
+  for (int i = 0; str[i] != '\0'; ++i) {
+    if (isalpha(str[i])) {        // only count letters
+      int ch = tolower(str[i]);   // convert to lower case
+      int idx = ch-'a';
+      if (++freqs[idx] > ret_freq) {  // update on new max
+        ret_freq = freqs[idx];
+        ret_ch = ch;
+      }
+    }
+  }
+  return [ret_freq, ret_ch];
+}
+
+void dothing(const char * str) {
+  int freq;
+  char ch;
+  [freq, ch] = most_frequent(str);
+  printf("%s -- %d %c\n", str, ret_freq, ret_ch);
+}
+
+int main() {
+  dothing("hello");
+  dothing("hello, world!");
+  dothing("aaabbbba");
+  dothing("");
+}
