%%% This is the scribe notes template for CS611
%%% There are several comments preceded by CS611: and boxed in %%%%'s
%%% which indicate where macros should be altered to set up the header
%%% for the paper.  Your Notes should go at the comment SCRIBE NOTES GO HERE!.

%%% In the various .sty files that accompany this .tex file you will
%%% find LaTeX macros that make it easier to typeset inference rules
%%% and programming language constructs.  You must make sure that the
%%% file proof.sty is in a path searched by LaTeX when you try to
%%% use this file.  Take a look to see what macros are available--it
%%% will save you time and make the notes look better.  Feel free to
%%% extend the set of macros--post them to the newsgroup and contact
%%% the course staff if you come up with some good ones so they can be
%%% added to the template.

%%% This template includes examples of how to use some of the macros
%%% to give you an idea of how they work.  (Delete the examples when
%%% you do your scribing.)

\documentclass[proof]{article} \usepackage{611-lecture}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% CS611: Please fill in these macros as appropriate:
\lecture{31}                  %% Lecture number
\title{Subtype Polymorphism}   %% Title of lecture
\author{Georgios Piliouras, Raghuram Ramanujan}       %% name of scribe
\lecturer{Radu Rugina}
\date{11 November, 2005}     %% Date of lecture, e.g., 1 January 2001
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% See 611.sty for a variety of macros that will be helpful in
% typesetting the lecture. Here are a few of particular interest:
%
% "x"       x in keyword font (e.g., "if", "#t")
% _x_       x in italics
% \nm{n}    n in slanted font (used for abbreviations)
% <e>       e in angle brackets
% \lt       less-than sign
% \gt       greater-than sign
% \SB{x}    x in semantic brackets
% \Tr x{y}  x[[y]] with x in calligraphic font
%           (if x is more than a single character, use \Tr{x}{y})

\begin{document}

\maketitle

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% CS611: SCRIBE NOTES GO HERE!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Introduction}

In this lecture, we make an attempt to extend the typed $\lambda$-calculus for it to support more advanced data structures such as records and references. In particular, we explore the concept of \textit{subtyping} in detail, which is one of the key features of object-oriented languages.

Subtyping was first introduced in SIMULA, a successor of ALGOL which is considered the first ever object-oriented programming language. Its inventors Ole-Johan Dahl and Kristen Nygaard later went on to win the Turing Award for their contribution to the field of object oriented programming. SIMULA introduced a number of innovative features that have become the mainstay of modern OO languages including objects, subtyping and inheritance.

The concept of subtyping is closely tied to those of inheritance and polymorphism and offers a formal way of studying them. It is best illustrated by means of an example:

\bigskip
\begin{center}
\unitlength 1mm
\begin{picture}(50.79,54.47)(0,0)
\linethickness{0.3mm}
\multiput(27.24,42.63)(0.12,0.12){83}{\line(0,1){0.12}}
\linethickness{0.3mm}
\multiput(39.08,52.63)(0.12,-0.12){83}{\line(0,-1){0.12}}
\put(26.32,40.92){\makebox(0,0)[cc]{Student}}

\put(50.79,40.66){\makebox(0,0)[cc]{Staff}}

\linethickness{0.3mm}
\multiput(15.39,28.95)(0.12,0.12){83}{\line(1,0){0.12}}
\linethickness{0.3mm}
\multiput(27.37,39.08)(0.12,-0.12){83}{\line(0,-1){0.12}}
\put(15.13,27.37){\makebox(0,0)[cc]{Graduate}}

\put(38.68,26.84){\makebox(0,0)[cc]{Undergrad}}

\linethickness{0.3mm}
\multiput(3.82,15.26)(0.12,0.12){83}{\line(1,0){0.12}}
\linethickness{0.3mm}
\multiput(15.92,25.26)(0.12,-0.12){83}{\line(0,-1){0.12}}
\put(3.16,13.68){\makebox(0,0)[cc]{TA}}

\put(26.97,13.68){\makebox(0,0)[cc]{RA}}

\put(38.03,54.47){\makebox(0,0)[cc]{Person}}

\put(35,5.79){\makebox(0,0)[cc]{Figure 1 - A Subtype Hierarchy}}

\end{picture}
\end{center}

This is an example of a subtype hierarchy, which describes the
relationship between different entities. In this case, the Student and
Staff types are both subtypes of the Person type (alternately, Person is
the supertype of Student and Staff). Similarly, TA is a subtype of the
Student and Person types and so on. A subtype relationship can also be
thought of in terms of subsets. For example, this example can be
visualized with the help of the following Venn diagram:

\bigskip
\begin{center}
\unitlength 1mm
\begin{picture}(73.06,56.64)(0,0)
\put(38.55,52.63){\makebox(0,0)[cc]{Person}}

\put(66.45,31.58){\makebox(0,0)[cc]{Staff}}

\put(31.71,43.29){\makebox(0,0)[cc]{Student}}

\put(48.95,33.29){\makebox(0,0)[cc]{Undergrad}}

\put(19.21,38.42){\makebox(0,0)[cc]{Graduate}}

\put(30,29.47){\makebox(0,0)[cc]{RA}}

\put(18.55,30.13){\makebox(0,0)[cc]{TA}}

\linethickness{0.3mm}
\put(66.32,31.32){\circle{10}}

\linethickness{0.3mm}
\multiput(59.36,34.66)(0.16,-0.29){1}{\line(0,-1){0.29}}
\multiput(59.2,34.94)(0.17,-0.29){1}{\line(0,-1){0.29}}
\multiput(59.02,35.22)(0.17,-0.28){1}{\line(0,-1){0.28}}
\multiput(58.84,35.51)(0.09,-0.14){2}{\line(0,-1){0.14}}
\multiput(58.65,35.79)(0.09,-0.14){2}{\line(0,-1){0.14}}
\multiput(58.45,36.07)(0.1,-0.14){2}{\line(0,-1){0.14}}
\multiput(58.25,36.34)(0.1,-0.14){2}{\line(0,-1){0.14}}
\multiput(58.04,36.62)(0.11,-0.14){2}{\line(0,-1){0.14}}
\multiput(57.82,36.89)(0.11,-0.14){2}{\line(0,-1){0.14}}
\multiput(57.59,37.16)(0.11,-0.14){2}{\line(0,-1){0.14}}
\multiput(57.35,37.43)(0.12,-0.13){2}{\line(0,-1){0.13}}
\multiput(57.11,37.7)(0.12,-0.13){2}{\line(0,-1){0.13}}
\multiput(56.86,37.96)(0.13,-0.13){2}{\line(0,-1){0.13}}
\multiput(56.6,38.23)(0.13,-0.13){2}{\line(0,-1){0.13}}
\multiput(56.33,38.48)(0.13,-0.13){2}{\line(1,0){0.13}}
\multiput(56.06,38.74)(0.14,-0.13){2}{\line(1,0){0.14}}
\multiput(55.78,39)(0.14,-0.13){2}{\line(1,0){0.14}}
\multiput(55.49,39.25)(0.14,-0.13){2}{\line(1,0){0.14}}
\multiput(55.2,39.5)(0.15,-0.12){2}{\line(1,0){0.15}}
\multiput(54.9,39.74)(0.15,-0.12){2}{\line(1,0){0.15}}
\multiput(54.59,39.98)(0.15,-0.12){2}{\line(1,0){0.15}}
\multiput(54.27,40.22)(0.16,-0.12){2}{\line(1,0){0.16}}
\multiput(53.95,40.46)(0.16,-0.12){2}{\line(1,0){0.16}}
\multiput(53.62,40.7)(0.16,-0.12){2}{\line(1,0){0.16}}
\multiput(53.29,40.93)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(52.95,41.15)(0.17,-0.11){2}{\line(1,0){0.17}}
\multiput(52.6,41.38)(0.17,-0.11){2}{\line(1,0){0.17}}
\multiput(52.25,41.6)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(51.89,41.81)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(51.52,42.03)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(51.15,42.24)(0.19,-0.1){2}{\line(1,0){0.19}}
\multiput(50.78,42.44)(0.19,-0.1){2}{\line(1,0){0.19}}
\multiput(50.39,42.65)(0.19,-0.1){2}{\line(1,0){0.19}}
\multiput(50.01,42.85)(0.19,-0.1){2}{\line(1,0){0.19}}
\multiput(49.61,43.04)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(49.22,43.23)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(48.81,43.42)(0.2,-0.09){2}{\line(1,0){0.2}}
\multiput(48.4,43.6)(0.2,-0.09){2}{\line(1,0){0.2}}
\multiput(47.99,43.78)(0.41,-0.18){1}{\line(1,0){0.41}}
\multiput(47.57,43.95)(0.42,-0.17){1}{\line(1,0){0.42}}
\multiput(47.15,44.12)(0.42,-0.17){1}{\line(1,0){0.42}}
\multiput(46.72,44.29)(0.43,-0.17){1}{\line(1,0){0.43}}
\multiput(46.29,44.45)(0.43,-0.16){1}{\line(1,0){0.43}}
\multiput(45.86,44.61)(0.44,-0.16){1}{\line(1,0){0.44}}
\multiput(45.42,44.76)(0.44,-0.15){1}{\line(1,0){0.44}}
\multiput(44.97,44.91)(0.44,-0.15){1}{\line(1,0){0.44}}
\multiput(44.53,45.06)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(44.07,45.2)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(43.62,45.33)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(43.16,45.46)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(42.7,45.59)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(42.24,45.71)(0.46,-0.12){1}{\line(1,0){0.46}}
\multiput(41.77,45.83)(0.47,-0.12){1}{\line(1,0){0.47}}
\multiput(41.3,45.94)(0.47,-0.11){1}{\line(1,0){0.47}}
\multiput(40.82,46.05)(0.47,-0.11){1}{\line(1,0){0.47}}
\multiput(40.35,46.15)(0.48,-0.1){1}{\line(1,0){0.48}}
\multiput(39.87,46.24)(0.48,-0.1){1}{\line(1,0){0.48}}
\multiput(39.39,46.34)(0.48,-0.09){1}{\line(1,0){0.48}}
\multiput(38.9,46.42)(0.48,-0.09){1}{\line(1,0){0.48}}
\multiput(38.42,46.51)(0.49,-0.08){1}{\line(1,0){0.49}}
\multiput(37.93,46.59)(0.49,-0.08){1}{\line(1,0){0.49}}
\multiput(37.44,46.66)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(36.95,46.73)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(36.46,46.79)(0.49,-0.06){1}{\line(1,0){0.49}}
\multiput(35.97,46.85)(0.49,-0.06){1}{\line(1,0){0.49}}
\multiput(35.47,46.9)(0.49,-0.05){1}{\line(1,0){0.49}}
\multiput(34.98,46.95)(0.5,-0.05){1}{\line(1,0){0.5}}
\multiput(34.48,46.99)(0.5,-0.04){1}{\line(1,0){0.5}}
\multiput(33.98,47.03)(0.5,-0.04){1}{\line(1,0){0.5}}
\multiput(33.49,47.06)(0.5,-0.03){1}{\line(1,0){0.5}}
\multiput(32.99,47.09)(0.5,-0.03){1}{\line(1,0){0.5}}
\multiput(32.49,47.11)(0.5,-0.02){1}{\line(1,0){0.5}}
\multiput(31.99,47.13)(0.5,-0.02){1}{\line(1,0){0.5}}
\multiput(31.49,47.14)(0.5,-0.01){1}{\line(1,0){0.5}}
\multiput(31,47.15)(0.5,-0.01){1}{\line(1,0){0.5}}
\multiput(30.5,47.15)(0.5,-0){1}{\line(1,0){0.5}}
\multiput(30,47.14)(0.5,0){1}{\line(1,0){0.5}}
\multiput(29.5,47.13)(0.5,0.01){1}{\line(1,0){0.5}}
\multiput(29.01,47.12)(0.5,0.01){1}{\line(1,0){0.5}}
\multiput(28.51,47.1)(0.5,0.02){1}{\line(1,0){0.5}}
\multiput(28.02,47.08)(0.49,0.02){1}{\line(1,0){0.49}}
\multiput(27.52,47.05)(0.49,0.03){1}{\line(1,0){0.49}}
\multiput(27.03,47.01)(0.49,0.03){1}{\line(1,0){0.49}}
\multiput(26.54,46.98)(0.49,0.04){1}{\line(1,0){0.49}}
\multiput(26.05,46.93)(0.49,0.04){1}{\line(1,0){0.49}}
\multiput(25.57,46.88)(0.49,0.05){1}{\line(1,0){0.49}}
\multiput(25.08,46.83)(0.48,0.05){1}{\line(1,0){0.48}}
\multiput(24.6,46.77)(0.48,0.06){1}{\line(1,0){0.48}}
\multiput(24.12,46.7)(0.48,0.06){1}{\line(1,0){0.48}}
\multiput(23.64,46.63)(0.48,0.07){1}{\line(1,0){0.48}}
\multiput(23.17,46.56)(0.48,0.07){1}{\line(1,0){0.48}}
\multiput(22.69,46.48)(0.47,0.08){1}{\line(1,0){0.47}}
\multiput(22.22,46.39)(0.47,0.08){1}{\line(1,0){0.47}}
\multiput(21.76,46.3)(0.47,0.09){1}{\line(1,0){0.47}}
\multiput(21.29,46.21)(0.46,0.09){1}{\line(1,0){0.46}}
\multiput(20.83,46.11)(0.46,0.1){1}{\line(1,0){0.46}}
\multiput(20.37,46.01)(0.46,0.1){1}{\line(1,0){0.46}}
\multiput(19.92,45.9)(0.45,0.11){1}{\line(1,0){0.45}}
\multiput(19.47,45.78)(0.45,0.11){1}{\line(1,0){0.45}}
\multiput(19.02,45.67)(0.45,0.12){1}{\line(1,0){0.45}}
\multiput(18.58,45.54)(0.44,0.12){1}{\line(1,0){0.44}}
\multiput(18.14,45.42)(0.44,0.13){1}{\line(1,0){0.44}}
\multiput(17.7,45.28)(0.43,0.13){1}{\line(1,0){0.43}}
\multiput(17.27,45.15)(0.43,0.14){1}{\line(1,0){0.43}}
\multiput(16.85,45)(0.43,0.14){1}{\line(1,0){0.43}}
\multiput(16.43,44.86)(0.42,0.15){1}{\line(1,0){0.42}}
\multiput(16.01,44.71)(0.42,0.15){1}{\line(1,0){0.42}}
\multiput(15.6,44.55)(0.41,0.15){1}{\line(1,0){0.41}}
\multiput(15.19,44.39)(0.41,0.16){1}{\line(1,0){0.41}}
\multiput(14.79,44.23)(0.4,0.16){1}{\line(1,0){0.4}}
\multiput(14.39,44.06)(0.4,0.17){1}{\line(1,0){0.4}}
\multiput(14,43.89)(0.39,0.17){1}{\line(1,0){0.39}}
\multiput(13.61,43.72)(0.39,0.18){1}{\line(1,0){0.39}}
\multiput(13.23,43.54)(0.19,0.09){2}{\line(1,0){0.19}}
\multiput(12.85,43.35)(0.19,0.09){2}{\line(1,0){0.19}}
\multiput(12.49,43.16)(0.18,0.09){2}{\line(1,0){0.18}}
\multiput(12.12,42.97)(0.18,0.1){2}{\line(1,0){0.18}}
\multiput(11.76,42.77)(0.18,0.1){2}{\line(1,0){0.18}}
\multiput(11.41,42.57)(0.18,0.1){2}{\line(1,0){0.18}}
\multiput(11.07,42.37)(0.17,0.1){2}{\line(1,0){0.17}}
\multiput(10.73,42.16)(0.17,0.1){2}{\line(1,0){0.17}}
\multiput(10.39,41.95)(0.17,0.11){2}{\line(1,0){0.17}}
\multiput(10.07,41.74)(0.16,0.11){2}{\line(1,0){0.16}}
\multiput(9.75,41.52)(0.16,0.11){2}{\line(1,0){0.16}}
\multiput(9.43,41.3)(0.16,0.11){2}{\line(1,0){0.16}}
\multiput(9.13,41.07)(0.15,0.11){2}{\line(1,0){0.15}}
\multiput(8.83,40.84)(0.15,0.11){2}{\line(1,0){0.15}}
\multiput(8.53,40.61)(0.15,0.12){2}{\line(1,0){0.15}}
\multiput(8.25,40.38)(0.14,0.12){2}{\line(1,0){0.14}}
\multiput(7.97,40.14)(0.14,0.12){2}{\line(1,0){0.14}}
\multiput(7.7,39.9)(0.14,0.12){2}{\line(1,0){0.14}}
\multiput(7.43,39.65)(0.13,0.12){2}{\line(1,0){0.13}}
\multiput(7.17,39.41)(0.13,0.12){2}{\line(1,0){0.13}}
\multiput(6.92,39.16)(0.12,0.12){2}{\line(0,1){0.12}}
\multiput(6.68,38.9)(0.12,0.13){2}{\line(0,1){0.13}}
\multiput(6.45,38.65)(0.12,0.13){2}{\line(0,1){0.13}}
\multiput(6.22,38.39)(0.11,0.13){2}{\line(0,1){0.13}}
\multiput(6,38.13)(0.11,0.13){2}{\line(0,1){0.13}}
\multiput(5.79,37.87)(0.11,0.13){2}{\line(0,1){0.13}}
\multiput(5.59,37.6)(0.1,0.13){2}{\line(0,1){0.13}}
\multiput(5.39,37.34)(0.1,0.13){2}{\line(0,1){0.13}}
\multiput(5.2,37.07)(0.09,0.13){2}{\line(0,1){0.13}}
\multiput(5.02,36.79)(0.09,0.14){2}{\line(0,1){0.14}}
\multiput(4.85,36.52)(0.17,0.27){1}{\line(0,1){0.27}}
\multiput(4.69,36.24)(0.16,0.28){1}{\line(0,1){0.28}}
\multiput(4.53,35.97)(0.16,0.28){1}{\line(0,1){0.28}}
\multiput(4.38,35.69)(0.15,0.28){1}{\line(0,1){0.28}}
\multiput(4.24,35.41)(0.14,0.28){1}{\line(0,1){0.28}}
\multiput(4.11,35.12)(0.13,0.28){1}{\line(0,1){0.28}}
\multiput(3.99,34.84)(0.12,0.28){1}{\line(0,1){0.28}}
\multiput(3.88,34.55)(0.11,0.29){1}{\line(0,1){0.29}}
\multiput(3.77,34.26)(0.11,0.29){1}{\line(0,1){0.29}}
\multiput(3.67,33.98)(0.1,0.29){1}{\line(0,1){0.29}}
\multiput(3.58,33.69)(0.09,0.29){1}{\line(0,1){0.29}}
\multiput(3.5,33.4)(0.08,0.29){1}{\line(0,1){0.29}}
\multiput(3.43,33.1)(0.07,0.29){1}{\line(0,1){0.29}}
\multiput(3.37,32.81)(0.06,0.29){1}{\line(0,1){0.29}}
\multiput(3.31,32.52)(0.05,0.29){1}{\line(0,1){0.29}}
\multiput(3.27,32.22)(0.05,0.29){1}{\line(0,1){0.29}}
\multiput(3.23,31.93)(0.04,0.3){1}{\line(0,1){0.3}}
\multiput(3.2,31.63)(0.03,0.3){1}{\line(0,1){0.3}}
\multiput(3.18,31.33)(0.02,0.3){1}{\line(0,1){0.3}}
\multiput(3.17,31.04)(0.01,0.3){1}{\line(0,1){0.3}}
\multiput(3.16,30.74)(0,0.3){1}{\line(0,1){0.3}}
\multiput(3.16,30.74)(0.01,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.17,30.44)(0.01,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.18,30.15)(0.02,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.2,29.85)(0.03,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.23,29.55)(0.04,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.27,29.25)(0.05,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.32,28.96)(0.06,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.38,28.66)(0.07,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.44,28.36)(0.07,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.52,28.07)(0.08,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.6,27.77)(0.09,-0.3){1}{\line(0,-1){0.3}}
\multiput(3.69,27.47)(0.1,-0.29){1}{\line(0,-1){0.29}}
\multiput(3.79,27.18)(0.11,-0.29){1}{\line(0,-1){0.29}}
\multiput(3.9,26.89)(0.12,-0.29){1}{\line(0,-1){0.29}}
\multiput(4.01,26.59)(0.12,-0.29){1}{\line(0,-1){0.29}}
\multiput(4.14,26.3)(0.13,-0.29){1}{\line(0,-1){0.29}}
\multiput(4.27,26.01)(0.14,-0.29){1}{\line(0,-1){0.29}}
\multiput(4.41,25.72)(0.15,-0.29){1}{\line(0,-1){0.29}}
\multiput(4.56,25.43)(0.16,-0.29){1}{\line(0,-1){0.29}}
\multiput(4.72,25.15)(0.17,-0.29){1}{\line(0,-1){0.29}}
\multiput(4.88,24.86)(0.17,-0.28){1}{\line(0,-1){0.28}}
\multiput(5.06,24.58)(0.09,-0.14){2}{\line(0,-1){0.14}}
\multiput(5.24,24.3)(0.09,-0.14){2}{\line(0,-1){0.14}}
\multiput(5.43,24.01)(0.1,-0.14){2}{\line(0,-1){0.14}}
\multiput(5.62,23.74)(0.1,-0.14){2}{\line(0,-1){0.14}}
\multiput(5.83,23.46)(0.11,-0.14){2}{\line(0,-1){0.14}}
\multiput(6.04,23.18)(0.11,-0.14){2}{\line(0,-1){0.14}}
\multiput(6.26,22.91)(0.11,-0.14){2}{\line(0,-1){0.14}}
\multiput(6.49,22.64)(0.12,-0.13){2}{\line(0,-1){0.13}}
\multiput(6.73,22.37)(0.12,-0.13){2}{\line(0,-1){0.13}}
\multiput(6.97,22.1)(0.13,-0.13){2}{\line(0,-1){0.13}}
\multiput(7.22,21.84)(0.13,-0.13){2}{\line(0,-1){0.13}}
\multiput(7.48,21.58)(0.13,-0.13){2}{\line(1,0){0.13}}
\multiput(7.75,21.32)(0.14,-0.13){2}{\line(1,0){0.14}}
\multiput(8.02,21.06)(0.14,-0.13){2}{\line(1,0){0.14}}
\multiput(8.3,20.81)(0.14,-0.13){2}{\line(1,0){0.14}}
\multiput(8.59,20.56)(0.15,-0.12){2}{\line(1,0){0.15}}
\multiput(8.88,20.31)(0.15,-0.12){2}{\line(1,0){0.15}}
\multiput(9.18,20.06)(0.15,-0.12){2}{\line(1,0){0.15}}
\multiput(9.49,19.82)(0.16,-0.12){2}{\line(1,0){0.16}}
\multiput(9.81,19.58)(0.16,-0.12){2}{\line(1,0){0.16}}
\multiput(10.13,19.34)(0.16,-0.12){2}{\line(1,0){0.16}}
\multiput(10.46,19.11)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(10.79,18.88)(0.17,-0.11){2}{\line(1,0){0.17}}
\multiput(11.13,18.65)(0.17,-0.11){2}{\line(1,0){0.17}}
\multiput(11.48,18.43)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(11.83,18.2)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(12.19,17.99)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(12.56,17.77)(0.19,-0.1){2}{\line(1,0){0.19}}
\multiput(12.93,17.56)(0.19,-0.1){2}{\line(1,0){0.19}}
\multiput(13.3,17.36)(0.19,-0.1){2}{\line(1,0){0.19}}
\multiput(13.68,17.16)(0.19,-0.1){2}{\line(1,0){0.19}}
\multiput(14.07,16.96)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(14.46,16.76)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(14.86,16.57)(0.2,-0.09){2}{\line(1,0){0.2}}
\multiput(15.27,16.38)(0.2,-0.09){2}{\line(1,0){0.2}}
\multiput(15.67,16.2)(0.41,-0.18){1}{\line(1,0){0.41}}
\multiput(16.09,16.02)(0.42,-0.17){1}{\line(1,0){0.42}}
\multiput(16.51,15.85)(0.42,-0.17){1}{\line(1,0){0.42}}
\multiput(16.93,15.68)(0.43,-0.17){1}{\line(1,0){0.43}}
\multiput(17.35,15.51)(0.43,-0.16){1}{\line(1,0){0.43}}
\multiput(17.79,15.35)(0.44,-0.16){1}{\line(1,0){0.44}}
\multiput(18.22,15.19)(0.44,-0.15){1}{\line(1,0){0.44}}
\multiput(18.66,15.04)(0.44,-0.15){1}{\line(1,0){0.44}}
\multiput(19.11,14.89)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(19.55,14.75)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(20,14.61)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(20.46,14.47)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(20.92,14.34)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(21.38,14.21)(0.46,-0.12){1}{\line(1,0){0.46}}
\multiput(21.84,14.09)(0.47,-0.12){1}{\line(1,0){0.47}}
\multiput(22.31,13.98)(0.47,-0.11){1}{\line(1,0){0.47}}
\multiput(22.78,13.86)(0.47,-0.11){1}{\line(1,0){0.47}}
\multiput(23.26,13.76)(0.48,-0.1){1}{\line(1,0){0.48}}
\multiput(23.73,13.66)(0.48,-0.1){1}{\line(1,0){0.48}}
\multiput(24.21,13.56)(0.48,-0.09){1}{\line(1,0){0.48}}
\multiput(24.69,13.47)(0.48,-0.09){1}{\line(1,0){0.48}}
\multiput(25.17,13.38)(0.49,-0.08){1}{\line(1,0){0.49}}
\multiput(25.66,13.29)(0.49,-0.08){1}{\line(1,0){0.49}}
\multiput(26.15,13.22)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(26.64,13.14)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(27.13,13.08)(0.49,-0.06){1}{\line(1,0){0.49}}
\multiput(27.62,13.01)(0.49,-0.06){1}{\line(1,0){0.49}}
\multiput(28.11,12.96)(0.49,-0.05){1}{\line(1,0){0.49}}
\multiput(28.61,12.9)(0.5,-0.05){1}{\line(1,0){0.5}}
\multiput(29.1,12.86)(0.5,-0.04){1}{\line(1,0){0.5}}
\multiput(29.6,12.81)(0.5,-0.04){1}{\line(1,0){0.5}}
\multiput(30.09,12.78)(0.5,-0.03){1}{\line(1,0){0.5}}
\multiput(30.59,12.74)(0.5,-0.03){1}{\line(1,0){0.5}}
\multiput(31.09,12.72)(0.5,-0.02){1}{\line(1,0){0.5}}
\multiput(31.59,12.69)(0.5,-0.02){1}{\line(1,0){0.5}}
\multiput(32.09,12.68)(0.5,-0.01){1}{\line(1,0){0.5}}
\multiput(32.59,12.66)(0.5,-0.01){1}{\line(1,0){0.5}}
\multiput(33.08,12.66)(0.5,-0){1}{\line(1,0){0.5}}
\multiput(33.58,12.66)(0.5,0){1}{\line(1,0){0.5}}
\multiput(34.08,12.66)(0.5,0.01){1}{\line(1,0){0.5}}
\multiput(34.58,12.67)(0.5,0.01){1}{\line(1,0){0.5}}
\multiput(35.07,12.68)(0.5,0.02){1}{\line(1,0){0.5}}
\multiput(35.57,12.7)(0.49,0.02){1}{\line(1,0){0.49}}
\multiput(36.06,12.72)(0.49,0.03){1}{\line(1,0){0.49}}
\multiput(36.55,12.75)(0.49,0.03){1}{\line(1,0){0.49}}
\multiput(37.05,12.79)(0.49,0.04){1}{\line(1,0){0.49}}
\multiput(37.54,12.83)(0.49,0.04){1}{\line(1,0){0.49}}
\multiput(38.02,12.87)(0.49,0.05){1}{\line(1,0){0.49}}
\multiput(38.51,12.92)(0.48,0.05){1}{\line(1,0){0.48}}
\multiput(39,12.98)(0.48,0.06){1}{\line(1,0){0.48}}
\multiput(39.48,13.04)(0.48,0.06){1}{\line(1,0){0.48}}
\multiput(39.96,13.1)(0.48,0.07){1}{\line(1,0){0.48}}
\multiput(40.44,13.17)(0.48,0.07){1}{\line(1,0){0.48}}
\multiput(40.91,13.24)(0.47,0.08){1}{\line(1,0){0.47}}
\multiput(41.39,13.32)(0.47,0.08){1}{\line(1,0){0.47}}
\multiput(41.86,13.41)(0.47,0.09){1}{\line(1,0){0.47}}
\multiput(42.32,13.5)(0.46,0.09){1}{\line(1,0){0.46}}
\multiput(42.79,13.59)(0.46,0.1){1}{\line(1,0){0.46}}
\multiput(43.25,13.69)(0.46,0.1){1}{\line(1,0){0.46}}
\multiput(43.71,13.8)(0.45,0.11){1}{\line(1,0){0.45}}
\multiput(44.16,13.9)(0.45,0.11){1}{\line(1,0){0.45}}
\multiput(44.61,14.02)(0.45,0.12){1}{\line(1,0){0.45}}
\multiput(45.06,14.14)(0.44,0.12){1}{\line(1,0){0.44}}
\multiput(45.5,14.26)(0.44,0.13){1}{\line(1,0){0.44}}
\multiput(45.94,14.39)(0.43,0.13){1}{\line(1,0){0.43}}
\multiput(46.38,14.52)(0.43,0.14){1}{\line(1,0){0.43}}
\multiput(46.81,14.66)(0.43,0.14){1}{\line(1,0){0.43}}
\multiput(47.23,14.8)(0.42,0.15){1}{\line(1,0){0.42}}
\multiput(47.65,14.94)(0.42,0.15){1}{\line(1,0){0.42}}
\multiput(48.07,15.09)(0.41,0.15){1}{\line(1,0){0.41}}
\multiput(48.48,15.25)(0.41,0.16){1}{\line(1,0){0.41}}
\multiput(48.89,15.41)(0.4,0.16){1}{\line(1,0){0.4}}
\multiput(49.29,15.57)(0.4,0.17){1}{\line(1,0){0.4}}
\multiput(49.69,15.74)(0.39,0.17){1}{\line(1,0){0.39}}
\multiput(50.08,15.91)(0.39,0.18){1}{\line(1,0){0.39}}
\multiput(50.47,16.09)(0.19,0.09){2}{\line(1,0){0.19}}
\multiput(50.85,16.27)(0.19,0.09){2}{\line(1,0){0.19}}
\multiput(51.22,16.45)(0.18,0.09){2}{\line(1,0){0.18}}
\multiput(51.59,16.64)(0.18,0.1){2}{\line(1,0){0.18}}
\multiput(51.96,16.83)(0.18,0.1){2}{\line(1,0){0.18}}
\multiput(52.32,17.03)(0.18,0.1){2}{\line(1,0){0.18}}
\multiput(52.67,17.23)(0.17,0.1){2}{\line(1,0){0.17}}
\multiput(53.01,17.43)(0.17,0.1){2}{\line(1,0){0.17}}
\multiput(53.35,17.64)(0.17,0.11){2}{\line(1,0){0.17}}
\multiput(53.69,17.85)(0.16,0.11){2}{\line(1,0){0.16}}
\multiput(54.01,18.07)(0.16,0.11){2}{\line(1,0){0.16}}
\multiput(54.33,18.28)(0.16,0.11){2}{\line(1,0){0.16}}
\multiput(54.65,18.51)(0.15,0.11){2}{\line(1,0){0.15}}
\multiput(54.95,18.73)(0.15,0.11){2}{\line(1,0){0.15}}
\multiput(55.25,18.96)(0.15,0.12){2}{\line(1,0){0.15}}
\multiput(55.55,19.19)(0.14,0.12){2}{\line(1,0){0.14}}
\multiput(55.83,19.43)(0.14,0.12){2}{\line(1,0){0.14}}
\multiput(56.11,19.66)(0.14,0.12){2}{\line(1,0){0.14}}
\multiput(56.38,19.9)(0.13,0.12){2}{\line(1,0){0.13}}
\multiput(56.65,20.15)(0.13,0.12){2}{\line(1,0){0.13}}
\multiput(56.9,20.4)(0.12,0.12){2}{\line(0,1){0.12}}
\multiput(57.15,20.65)(0.12,0.13){2}{\line(0,1){0.13}}
\multiput(57.4,20.9)(0.12,0.13){2}{\line(0,1){0.13}}
\multiput(57.63,21.15)(0.11,0.13){2}{\line(0,1){0.13}}
\multiput(57.86,21.41)(0.11,0.13){2}{\line(0,1){0.13}}
\multiput(58.08,21.67)(0.11,0.13){2}{\line(0,1){0.13}}
\multiput(58.29,21.93)(0.1,0.13){2}{\line(0,1){0.13}}
\multiput(58.49,22.2)(0.1,0.13){2}{\line(0,1){0.13}}
\multiput(58.69,22.47)(0.09,0.13){2}{\line(0,1){0.13}}
\multiput(58.88,22.74)(0.09,0.14){2}{\line(0,1){0.14}}
\multiput(59.06,23.01)(0.17,0.27){1}{\line(0,1){0.27}}
\multiput(59.23,23.28)(0.16,0.28){1}{\line(0,1){0.28}}
\multiput(59.39,23.56)(0.16,0.28){1}{\line(0,1){0.28}}
\multiput(59.55,23.84)(0.15,0.28){1}{\line(0,1){0.28}}
\multiput(59.7,24.12)(0.14,0.28){1}{\line(0,1){0.28}}
\multiput(59.84,24.4)(0.13,0.28){1}{\line(0,1){0.28}}
\multiput(59.97,24.68)(0.12,0.28){1}{\line(0,1){0.28}}
\multiput(60.09,24.96)(0.11,0.29){1}{\line(0,1){0.29}}
\multiput(60.2,25.25)(0.11,0.29){1}{\line(0,1){0.29}}
\multiput(60.31,25.54)(0.1,0.29){1}{\line(0,1){0.29}}
\multiput(60.41,25.83)(0.09,0.29){1}{\line(0,1){0.29}}
\multiput(60.5,26.12)(0.08,0.29){1}{\line(0,1){0.29}}
\multiput(60.58,26.41)(0.07,0.29){1}{\line(0,1){0.29}}
\multiput(60.65,26.7)(0.06,0.29){1}{\line(0,1){0.29}}
\multiput(60.71,26.99)(0.05,0.29){1}{\line(0,1){0.29}}
\multiput(60.77,27.29)(0.05,0.29){1}{\line(0,1){0.29}}
\multiput(60.81,27.58)(0.04,0.3){1}{\line(0,1){0.3}}
\multiput(60.85,27.88)(0.03,0.3){1}{\line(0,1){0.3}}
\multiput(60.88,28.17)(0.02,0.3){1}{\line(0,1){0.3}}
\multiput(60.9,28.47)(0.01,0.3){1}{\line(0,1){0.3}}
\multiput(60.91,28.77)(0,0.3){1}{\line(0,1){0.3}}
\multiput(60.91,29.36)(0.01,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.9,29.66)(0.01,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.88,29.96)(0.02,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.84,30.25)(0.03,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.81,30.55)(0.04,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.76,30.85)(0.05,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.7,31.14)(0.06,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.64,31.44)(0.07,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.56,31.74)(0.07,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.48,32.03)(0.08,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.39,32.33)(0.09,-0.3){1}{\line(0,-1){0.3}}
\multiput(60.29,32.62)(0.1,-0.29){1}{\line(0,-1){0.29}}
\multiput(60.18,32.92)(0.11,-0.29){1}{\line(0,-1){0.29}}
\multiput(60.07,33.21)(0.12,-0.29){1}{\line(0,-1){0.29}}
\multiput(59.94,33.5)(0.12,-0.29){1}{\line(0,-1){0.29}}
\multiput(59.81,33.79)(0.13,-0.29){1}{\line(0,-1){0.29}}
\multiput(59.67,34.08)(0.14,-0.29){1}{\line(0,-1){0.29}}
\multiput(59.52,34.37)(0.15,-0.29){1}{\line(0,-1){0.29}}

\linethickness{0.3mm}
\multiput(57.74,32.87)(0.03,0.31){1}{\line(0,1){0.31}}
\multiput(57.78,33.18)(0.01,0.31){1}{\line(0,1){0.31}}
\multiput(57.76,33.79)(0.02,-0.3){1}{\line(0,-1){0.3}}
\multiput(57.71,34.09)(0.05,-0.3){1}{\line(0,-1){0.3}}
\multiput(57.64,34.39)(0.07,-0.3){1}{\line(0,-1){0.3}}
\multiput(57.54,34.69)(0.1,-0.3){1}{\line(0,-1){0.3}}
\multiput(57.41,34.98)(0.13,-0.29){1}{\line(0,-1){0.29}}
\multiput(57.26,35.26)(0.15,-0.28){1}{\line(0,-1){0.28}}
\multiput(57.08,35.54)(0.18,-0.28){1}{\line(0,-1){0.28}}
\multiput(56.88,35.81)(0.1,-0.14){2}{\line(0,-1){0.14}}
\multiput(56.65,36.07)(0.11,-0.13){2}{\line(0,-1){0.13}}
\multiput(56.4,36.33)(0.12,-0.13){2}{\line(0,-1){0.13}}
\multiput(56.13,36.57)(0.14,-0.12){2}{\line(1,0){0.14}}
\multiput(55.84,36.8)(0.15,-0.12){2}{\line(1,0){0.15}}
\multiput(55.52,37.03)(0.16,-0.11){2}{\line(1,0){0.16}}
\multiput(55.19,37.24)(0.17,-0.11){2}{\line(1,0){0.17}}
\multiput(54.83,37.44)(0.18,-0.1){2}{\line(1,0){0.18}}
\multiput(54.46,37.62)(0.19,-0.09){2}{\line(1,0){0.19}}
\multiput(54.07,37.79)(0.39,-0.17){1}{\line(1,0){0.39}}
\multiput(53.67,37.95)(0.4,-0.16){1}{\line(1,0){0.4}}
\multiput(53.25,38.1)(0.42,-0.14){1}{\line(1,0){0.42}}
\multiput(52.82,38.22)(0.43,-0.13){1}{\line(1,0){0.43}}
\multiput(52.37,38.34)(0.44,-0.11){1}{\line(1,0){0.44}}
\multiput(51.92,38.43)(0.46,-0.1){1}{\line(1,0){0.46}}
\multiput(51.45,38.52)(0.47,-0.08){1}{\line(1,0){0.47}}
\multiput(50.98,38.58)(0.47,-0.07){1}{\line(1,0){0.47}}
\multiput(50.5,38.63)(0.48,-0.05){1}{\line(1,0){0.48}}
\multiput(50.01,38.67)(0.49,-0.03){1}{\line(1,0){0.49}}
\multiput(49.52,38.68)(0.49,-0.02){1}{\line(1,0){0.49}}
\put(49.03,38.68){\line(1,0){0.49}}
\multiput(48.54,38.67)(0.49,0.02){1}{\line(1,0){0.49}}
\multiput(48.05,38.63)(0.49,0.03){1}{\line(1,0){0.49}}
\multiput(47.55,38.58)(0.49,0.05){1}{\line(1,0){0.49}}
\multiput(47.07,38.52)(0.49,0.07){1}{\line(1,0){0.49}}
\multiput(46.59,38.43)(0.48,0.08){1}{\line(1,0){0.48}}
\multiput(46.11,38.34)(0.48,0.1){1}{\line(1,0){0.48}}
\multiput(45.64,38.22)(0.47,0.11){1}{\line(1,0){0.47}}
\multiput(45.18,38.1)(0.46,0.13){1}{\line(1,0){0.46}}
\multiput(44.73,37.95)(0.45,0.14){1}{\line(1,0){0.45}}
\multiput(44.29,37.79)(0.44,0.16){1}{\line(1,0){0.44}}
\multiput(43.87,37.62)(0.42,0.17){1}{\line(1,0){0.42}}
\multiput(43.46,37.44)(0.21,0.09){2}{\line(1,0){0.21}}
\multiput(43.06,37.24)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(42.68,37.03)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(42.32,36.8)(0.18,0.11){2}{\line(1,0){0.18}}
\multiput(41.98,36.57)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(41.66,36.33)(0.16,0.12){2}{\line(1,0){0.16}}
\multiput(41.35,36.07)(0.15,0.13){2}{\line(1,0){0.15}}
\multiput(41.07,35.81)(0.14,0.13){2}{\line(1,0){0.14}}
\multiput(40.81,35.54)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(40.58,35.26)(0.12,0.14){2}{\line(0,1){0.14}}
\multiput(40.37,34.98)(0.11,0.14){2}{\line(0,1){0.14}}
\multiput(40.18,34.69)(0.09,0.15){2}{\line(0,1){0.15}}
\multiput(40.02,34.39)(0.16,0.3){1}{\line(0,1){0.3}}
\multiput(39.88,34.09)(0.14,0.3){1}{\line(0,1){0.3}}
\multiput(39.77,33.79)(0.11,0.3){1}{\line(0,1){0.3}}
\multiput(39.68,33.49)(0.09,0.3){1}{\line(0,1){0.3}}
\multiput(39.62,33.18)(0.06,0.31){1}{\line(0,1){0.31}}
\multiput(39.59,32.87)(0.03,0.31){1}{\line(0,1){0.31}}
\multiput(39.59,32.57)(0.01,0.31){1}{\line(0,1){0.31}}
\multiput(39.59,32.57)(0.02,-0.3){1}{\line(0,-1){0.3}}
\multiput(39.61,32.26)(0.05,-0.3){1}{\line(0,-1){0.3}}
\multiput(39.66,31.96)(0.07,-0.3){1}{\line(0,-1){0.3}}
\multiput(39.73,31.66)(0.1,-0.3){1}{\line(0,-1){0.3}}
\multiput(39.83,31.37)(0.13,-0.29){1}{\line(0,-1){0.29}}
\multiput(39.96,31.08)(0.15,-0.28){1}{\line(0,-1){0.28}}
\multiput(40.11,30.79)(0.18,-0.28){1}{\line(0,-1){0.28}}
\multiput(40.29,30.51)(0.1,-0.14){2}{\line(0,-1){0.14}}
\multiput(40.49,30.24)(0.11,-0.13){2}{\line(0,-1){0.13}}
\multiput(40.72,29.98)(0.12,-0.13){2}{\line(0,-1){0.13}}
\multiput(40.96,29.73)(0.14,-0.12){2}{\line(1,0){0.14}}
\multiput(41.24,29.48)(0.15,-0.12){2}{\line(1,0){0.15}}
\multiput(41.53,29.25)(0.16,-0.11){2}{\line(1,0){0.16}}
\multiput(41.85,29.03)(0.17,-0.11){2}{\line(1,0){0.17}}
\multiput(42.18,28.81)(0.18,-0.1){2}{\line(1,0){0.18}}
\multiput(42.53,28.62)(0.19,-0.09){2}{\line(1,0){0.19}}
\multiput(42.91,28.43)(0.39,-0.17){1}{\line(1,0){0.39}}
\multiput(43.3,28.26)(0.4,-0.16){1}{\line(1,0){0.4}}
\multiput(43.7,28.1)(0.42,-0.14){1}{\line(1,0){0.42}}
\multiput(44.12,27.96)(0.43,-0.13){1}{\line(1,0){0.43}}
\multiput(44.55,27.83)(0.44,-0.11){1}{\line(1,0){0.44}}
\multiput(45,27.72)(0.46,-0.1){1}{\line(1,0){0.46}}
\multiput(45.45,27.62)(0.47,-0.08){1}{\line(1,0){0.47}}
\multiput(45.92,27.54)(0.47,-0.07){1}{\line(1,0){0.47}}
\multiput(46.39,27.47)(0.48,-0.05){1}{\line(1,0){0.48}}
\multiput(46.87,27.42)(0.49,-0.03){1}{\line(1,0){0.49}}
\multiput(47.36,27.39)(0.49,-0.02){1}{\line(1,0){0.49}}
\put(47.85,27.37){\line(1,0){0.49}}
\multiput(48.34,27.37)(0.49,0.02){1}{\line(1,0){0.49}}
\multiput(48.83,27.39)(0.49,0.03){1}{\line(1,0){0.49}}
\multiput(49.32,27.42)(0.49,0.05){1}{\line(1,0){0.49}}
\multiput(49.81,27.47)(0.49,0.07){1}{\line(1,0){0.49}}
\multiput(50.3,27.54)(0.48,0.08){1}{\line(1,0){0.48}}
\multiput(50.78,27.62)(0.48,0.1){1}{\line(1,0){0.48}}
\multiput(51.26,27.72)(0.47,0.11){1}{\line(1,0){0.47}}
\multiput(51.73,27.83)(0.46,0.13){1}{\line(1,0){0.46}}
\multiput(52.19,27.96)(0.45,0.14){1}{\line(1,0){0.45}}
\multiput(52.64,28.1)(0.44,0.16){1}{\line(1,0){0.44}}
\multiput(53.07,28.26)(0.42,0.17){1}{\line(1,0){0.42}}
\multiput(53.5,28.43)(0.21,0.09){2}{\line(1,0){0.21}}
\multiput(53.91,28.62)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(54.31,28.81)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(54.69,29.03)(0.18,0.11){2}{\line(1,0){0.18}}
\multiput(55.05,29.25)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(55.39,29.48)(0.16,0.12){2}{\line(1,0){0.16}}
\multiput(55.71,29.73)(0.15,0.13){2}{\line(1,0){0.15}}
\multiput(56.02,29.98)(0.14,0.13){2}{\line(1,0){0.14}}
\multiput(56.3,30.24)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(56.55,30.51)(0.12,0.14){2}{\line(0,1){0.14}}
\multiput(56.79,30.79)(0.11,0.14){2}{\line(0,1){0.14}}
\multiput(57,31.08)(0.09,0.15){2}{\line(0,1){0.15}}
\multiput(57.19,31.37)(0.16,0.3){1}{\line(0,1){0.3}}
\multiput(57.35,31.66)(0.14,0.3){1}{\line(0,1){0.3}}
\multiput(57.49,31.96)(0.11,0.3){1}{\line(0,1){0.3}}
\multiput(57.6,32.26)(0.09,0.3){1}{\line(0,1){0.3}}
\multiput(57.69,32.57)(0.06,0.31){1}{\line(0,1){0.31}}

\linethickness{0.3mm}
\multiput(39.21,25.93)(0.01,-0.29){1}{\line(0,-1){0.29}}
\multiput(39.19,26.22)(0.02,-0.29){1}{\line(0,-1){0.29}}
\multiput(39.15,26.51)(0.03,-0.29){1}{\line(0,-1){0.29}}
\multiput(39.11,26.81)(0.05,-0.3){1}{\line(0,-1){0.3}}
\multiput(39.05,27.11)(0.06,-0.3){1}{\line(0,-1){0.3}}
\multiput(38.98,27.41)(0.07,-0.3){1}{\line(0,-1){0.3}}
\multiput(38.89,27.72)(0.09,-0.31){1}{\line(0,-1){0.31}}
\multiput(38.79,28.03)(0.1,-0.31){1}{\line(0,-1){0.31}}
\multiput(38.68,28.34)(0.11,-0.31){1}{\line(0,-1){0.31}}
\multiput(38.55,28.65)(0.13,-0.31){1}{\line(0,-1){0.31}}
\multiput(38.41,28.96)(0.14,-0.31){1}{\line(0,-1){0.31}}
\multiput(38.26,29.28)(0.15,-0.32){1}{\line(0,-1){0.32}}
\multiput(38.1,29.59)(0.16,-0.32){1}{\line(0,-1){0.32}}
\multiput(37.92,29.91)(0.18,-0.32){1}{\line(0,-1){0.32}}
\multiput(37.73,30.23)(0.09,-0.16){2}{\line(0,-1){0.16}}
\multiput(37.53,30.55)(0.1,-0.16){2}{\line(0,-1){0.16}}
\multiput(37.32,30.87)(0.11,-0.16){2}{\line(0,-1){0.16}}
\multiput(37.1,31.18)(0.11,-0.16){2}{\line(0,-1){0.16}}
\multiput(36.86,31.5)(0.12,-0.16){2}{\line(0,-1){0.16}}
\multiput(36.61,31.82)(0.12,-0.16){2}{\line(0,-1){0.16}}
\multiput(36.35,32.13)(0.13,-0.16){2}{\line(0,-1){0.16}}
\multiput(36.08,32.45)(0.14,-0.16){2}{\line(0,-1){0.16}}
\multiput(35.8,32.76)(0.14,-0.16){2}{\line(0,-1){0.16}}
\multiput(35.51,33.07)(0.15,-0.16){2}{\line(0,-1){0.16}}
\multiput(35.21,33.38)(0.1,-0.1){3}{\line(0,-1){0.1}}
\multiput(34.89,33.69)(0.1,-0.1){3}{\line(1,0){0.1}}
\multiput(34.57,34)(0.11,-0.1){3}{\line(1,0){0.11}}
\multiput(34.24,34.3)(0.11,-0.1){3}{\line(1,0){0.11}}
\multiput(33.9,34.6)(0.17,-0.15){2}{\line(1,0){0.17}}
\multiput(33.55,34.89)(0.17,-0.15){2}{\line(1,0){0.17}}
\multiput(33.19,35.18)(0.18,-0.15){2}{\line(1,0){0.18}}
\multiput(32.83,35.47)(0.18,-0.14){2}{\line(1,0){0.18}}
\multiput(32.45,35.76)(0.19,-0.14){2}{\line(1,0){0.19}}
\multiput(32.07,36.03)(0.19,-0.14){2}{\line(1,0){0.19}}
\multiput(31.68,36.31)(0.2,-0.14){2}{\line(1,0){0.2}}
\multiput(31.28,36.58)(0.2,-0.14){2}{\line(1,0){0.2}}
\multiput(30.88,36.84)(0.2,-0.13){2}{\line(1,0){0.2}}
\multiput(30.47,37.1)(0.21,-0.13){2}{\line(1,0){0.21}}
\multiput(30.05,37.36)(0.21,-0.13){2}{\line(1,0){0.21}}
\multiput(29.63,37.61)(0.21,-0.12){2}{\line(1,0){0.21}}
\multiput(29.2,37.85)(0.21,-0.12){2}{\line(1,0){0.21}}
\multiput(28.77,38.09)(0.22,-0.12){2}{\line(1,0){0.22}}
\multiput(28.33,38.32)(0.22,-0.12){2}{\line(1,0){0.22}}
\multiput(27.89,38.54)(0.22,-0.11){2}{\line(1,0){0.22}}
\multiput(27.44,38.76)(0.22,-0.11){2}{\line(1,0){0.22}}
\multiput(26.99,38.97)(0.22,-0.11){2}{\line(1,0){0.22}}
\multiput(26.54,39.17)(0.23,-0.1){2}{\line(1,0){0.23}}
\multiput(26.09,39.37)(0.23,-0.1){2}{\line(1,0){0.23}}
\multiput(25.63,39.56)(0.23,-0.09){2}{\line(1,0){0.23}}
\multiput(25.17,39.74)(0.23,-0.09){2}{\line(1,0){0.23}}
\multiput(24.71,39.91)(0.46,-0.17){1}{\line(1,0){0.46}}
\multiput(24.25,40.08)(0.46,-0.17){1}{\line(1,0){0.46}}
\multiput(23.79,40.24)(0.46,-0.16){1}{\line(1,0){0.46}}
\multiput(23.32,40.39)(0.46,-0.15){1}{\line(1,0){0.46}}
\multiput(22.86,40.53)(0.46,-0.14){1}{\line(1,0){0.46}}
\multiput(22.4,40.66)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(21.94,40.79)(0.46,-0.12){1}{\line(1,0){0.46}}
\multiput(21.47,40.9)(0.46,-0.12){1}{\line(1,0){0.46}}
\multiput(21.02,41.01)(0.46,-0.11){1}{\line(1,0){0.46}}
\multiput(20.56,41.11)(0.46,-0.1){1}{\line(1,0){0.46}}
\multiput(20.1,41.2)(0.46,-0.09){1}{\line(1,0){0.46}}
\multiput(19.65,41.28)(0.45,-0.08){1}{\line(1,0){0.45}}
\multiput(19.2,41.35)(0.45,-0.07){1}{\line(1,0){0.45}}
\multiput(18.76,41.42)(0.45,-0.06){1}{\line(1,0){0.45}}
\multiput(18.31,41.47)(0.44,-0.05){1}{\line(1,0){0.44}}
\multiput(17.88,41.52)(0.44,-0.04){1}{\line(1,0){0.44}}
\multiput(17.44,41.55)(0.43,-0.04){1}{\line(1,0){0.43}}
\multiput(17.01,41.58)(0.43,-0.03){1}{\line(1,0){0.43}}
\multiput(16.59,41.59)(0.42,-0.02){1}{\line(1,0){0.42}}
\multiput(16.17,41.6)(0.42,-0.01){1}{\line(1,0){0.42}}
\multiput(15.76,41.6)(0.41,0){1}{\line(1,0){0.41}}
\multiput(15.36,41.59)(0.4,0.01){1}{\line(1,0){0.4}}
\multiput(14.96,41.57)(0.4,0.02){1}{\line(1,0){0.4}}
\multiput(14.57,41.54)(0.39,0.03){1}{\line(1,0){0.39}}
\multiput(14.18,41.5)(0.38,0.04){1}{\line(1,0){0.38}}
\multiput(13.81,41.46)(0.38,0.05){1}{\line(1,0){0.38}}
\multiput(13.44,41.4)(0.37,0.06){1}{\line(1,0){0.37}}
\multiput(13.08,41.33)(0.36,0.07){1}{\line(1,0){0.36}}
\multiput(12.73,41.26)(0.35,0.07){1}{\line(1,0){0.35}}
\multiput(12.39,41.17)(0.34,0.08){1}{\line(1,0){0.34}}
\multiput(12.05,41.08)(0.33,0.09){1}{\line(1,0){0.33}}
\multiput(11.73,40.98)(0.32,0.1){1}{\line(1,0){0.32}}
\multiput(11.42,40.87)(0.31,0.11){1}{\line(1,0){0.31}}
\multiput(11.11,40.75)(0.3,0.12){1}{\line(1,0){0.3}}
\multiput(10.82,40.62)(0.29,0.13){1}{\line(1,0){0.29}}
\multiput(10.54,40.49)(0.28,0.14){1}{\line(1,0){0.28}}
\multiput(10.27,40.34)(0.27,0.14){1}{\line(1,0){0.27}}
\multiput(10.01,40.19)(0.26,0.15){1}{\line(1,0){0.26}}
\multiput(9.76,40.03)(0.25,0.16){1}{\line(1,0){0.25}}
\multiput(9.52,39.86)(0.24,0.17){1}{\line(1,0){0.24}}
\multiput(9.29,39.69)(0.23,0.18){1}{\line(1,0){0.23}}
\multiput(9.08,39.5)(0.11,0.09){2}{\line(1,0){0.11}}
\multiput(8.87,39.31)(0.1,0.1){2}{\line(1,0){0.1}}
\multiput(8.68,39.11)(0.1,0.1){2}{\line(0,1){0.1}}
\multiput(8.5,38.91)(0.18,0.21){1}{\line(0,1){0.21}}
\multiput(8.34,38.69)(0.17,0.21){1}{\line(0,1){0.21}}
\multiput(8.19,38.47)(0.15,0.22){1}{\line(0,1){0.22}}
\multiput(8.05,38.25)(0.14,0.23){1}{\line(0,1){0.23}}
\multiput(7.92,38.02)(0.13,0.23){1}{\line(0,1){0.23}}
\multiput(7.8,37.78)(0.11,0.24){1}{\line(0,1){0.24}}
\multiput(7.7,37.53)(0.1,0.24){1}{\line(0,1){0.24}}
\multiput(7.62,37.28)(0.09,0.25){1}{\line(0,1){0.25}}
\multiput(7.54,37.03)(0.07,0.26){1}{\line(0,1){0.26}}
\multiput(7.48,36.76)(0.06,0.26){1}{\line(0,1){0.26}}
\multiput(7.43,36.5)(0.05,0.27){1}{\line(0,1){0.27}}
\multiput(7.4,36.23)(0.03,0.27){1}{\line(0,1){0.27}}
\multiput(7.37,35.95)(0.02,0.28){1}{\line(0,1){0.28}}
\multiput(7.37,35.67)(0.01,0.28){1}{\line(0,1){0.28}}
\multiput(7.37,35.67)(0.01,-0.29){1}{\line(0,-1){0.29}}
\multiput(7.37,35.38)(0.02,-0.29){1}{\line(0,-1){0.29}}
\multiput(7.39,35.09)(0.03,-0.29){1}{\line(0,-1){0.29}}
\multiput(7.42,34.8)(0.05,-0.3){1}{\line(0,-1){0.3}}
\multiput(7.47,34.5)(0.06,-0.3){1}{\line(0,-1){0.3}}
\multiput(7.53,34.21)(0.07,-0.3){1}{\line(0,-1){0.3}}
\multiput(7.6,33.9)(0.09,-0.31){1}{\line(0,-1){0.31}}
\multiput(7.69,33.6)(0.1,-0.31){1}{\line(0,-1){0.31}}
\multiput(7.79,33.29)(0.11,-0.31){1}{\line(0,-1){0.31}}
\multiput(7.9,32.98)(0.13,-0.31){1}{\line(0,-1){0.31}}
\multiput(8.03,32.67)(0.14,-0.31){1}{\line(0,-1){0.31}}
\multiput(8.16,32.35)(0.15,-0.32){1}{\line(0,-1){0.32}}
\multiput(8.32,32.04)(0.16,-0.32){1}{\line(0,-1){0.32}}
\multiput(8.48,31.72)(0.18,-0.32){1}{\line(0,-1){0.32}}
\multiput(8.66,31.4)(0.09,-0.16){2}{\line(0,-1){0.16}}
\multiput(8.84,31.09)(0.1,-0.16){2}{\line(0,-1){0.16}}
\multiput(9.05,30.77)(0.11,-0.16){2}{\line(0,-1){0.16}}
\multiput(9.26,30.45)(0.11,-0.16){2}{\line(0,-1){0.16}}
\multiput(9.48,30.13)(0.12,-0.16){2}{\line(0,-1){0.16}}
\multiput(9.72,29.81)(0.12,-0.16){2}{\line(0,-1){0.16}}
\multiput(9.97,29.5)(0.13,-0.16){2}{\line(0,-1){0.16}}
\multiput(10.23,29.18)(0.14,-0.16){2}{\line(0,-1){0.16}}
\multiput(10.5,28.87)(0.14,-0.16){2}{\line(0,-1){0.16}}
\multiput(10.78,28.55)(0.15,-0.16){2}{\line(0,-1){0.16}}
\multiput(11.07,28.24)(0.1,-0.1){3}{\line(0,-1){0.1}}
\multiput(11.37,27.93)(0.1,-0.1){3}{\line(1,0){0.1}}
\multiput(11.68,27.62)(0.11,-0.1){3}{\line(1,0){0.11}}
\multiput(12.01,27.32)(0.11,-0.1){3}{\line(1,0){0.11}}
\multiput(12.34,27.02)(0.17,-0.15){2}{\line(1,0){0.17}}
\multiput(12.68,26.72)(0.17,-0.15){2}{\line(1,0){0.17}}
\multiput(13.03,26.42)(0.18,-0.15){2}{\line(1,0){0.18}}
\multiput(13.39,26.13)(0.18,-0.14){2}{\line(1,0){0.18}}
\multiput(13.75,25.84)(0.19,-0.14){2}{\line(1,0){0.19}}
\multiput(14.13,25.56)(0.19,-0.14){2}{\line(1,0){0.19}}
\multiput(14.51,25.28)(0.2,-0.14){2}{\line(1,0){0.2}}
\multiput(14.9,25.01)(0.2,-0.14){2}{\line(1,0){0.2}}
\multiput(15.3,24.74)(0.2,-0.13){2}{\line(1,0){0.2}}
\multiput(15.7,24.47)(0.21,-0.13){2}{\line(1,0){0.21}}
\multiput(16.11,24.21)(0.21,-0.13){2}{\line(1,0){0.21}}
\multiput(16.53,23.96)(0.21,-0.12){2}{\line(1,0){0.21}}
\multiput(16.95,23.71)(0.21,-0.12){2}{\line(1,0){0.21}}
\multiput(17.38,23.46)(0.22,-0.12){2}{\line(1,0){0.22}}
\multiput(17.81,23.23)(0.22,-0.12){2}{\line(1,0){0.22}}
\multiput(18.25,23)(0.22,-0.11){2}{\line(1,0){0.22}}
\multiput(18.69,22.77)(0.22,-0.11){2}{\line(1,0){0.22}}
\multiput(19.14,22.56)(0.22,-0.11){2}{\line(1,0){0.22}}
\multiput(19.58,22.34)(0.23,-0.1){2}{\line(1,0){0.23}}
\multiput(20.04,22.14)(0.23,-0.1){2}{\line(1,0){0.23}}
\multiput(20.49,21.94)(0.23,-0.09){2}{\line(1,0){0.23}}
\multiput(20.95,21.76)(0.23,-0.09){2}{\line(1,0){0.23}}
\multiput(21.41,21.57)(0.46,-0.17){1}{\line(1,0){0.46}}
\multiput(21.87,21.4)(0.46,-0.17){1}{\line(1,0){0.46}}
\multiput(22.33,21.23)(0.46,-0.16){1}{\line(1,0){0.46}}
\multiput(22.79,21.08)(0.46,-0.15){1}{\line(1,0){0.46}}
\multiput(23.26,20.93)(0.46,-0.14){1}{\line(1,0){0.46}}
\multiput(23.72,20.79)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(24.18,20.65)(0.46,-0.12){1}{\line(1,0){0.46}}
\multiput(24.64,20.53)(0.46,-0.12){1}{\line(1,0){0.46}}
\multiput(25.1,20.41)(0.46,-0.11){1}{\line(1,0){0.46}}
\multiput(25.56,20.3)(0.46,-0.1){1}{\line(1,0){0.46}}
\multiput(26.02,20.2)(0.46,-0.09){1}{\line(1,0){0.46}}
\multiput(26.48,20.11)(0.45,-0.08){1}{\line(1,0){0.45}}
\multiput(26.93,20.03)(0.45,-0.07){1}{\line(1,0){0.45}}
\multiput(27.38,19.96)(0.45,-0.06){1}{\line(1,0){0.45}}
\multiput(27.82,19.9)(0.44,-0.05){1}{\line(1,0){0.44}}
\multiput(28.27,19.84)(0.44,-0.04){1}{\line(1,0){0.44}}
\multiput(28.7,19.8)(0.43,-0.04){1}{\line(1,0){0.43}}
\multiput(29.14,19.76)(0.43,-0.03){1}{\line(1,0){0.43}}
\multiput(29.56,19.74)(0.42,-0.02){1}{\line(1,0){0.42}}
\multiput(29.99,19.72)(0.42,-0.01){1}{\line(1,0){0.42}}
\multiput(30.4,19.71)(0.41,0){1}{\line(1,0){0.41}}
\multiput(30.82,19.71)(0.4,0.01){1}{\line(1,0){0.4}}
\multiput(31.22,19.73)(0.4,0.02){1}{\line(1,0){0.4}}
\multiput(31.62,19.75)(0.39,0.03){1}{\line(1,0){0.39}}
\multiput(32.01,19.77)(0.38,0.04){1}{\line(1,0){0.38}}
\multiput(32.39,19.81)(0.38,0.05){1}{\line(1,0){0.38}}
\multiput(32.77,19.86)(0.37,0.06){1}{\line(1,0){0.37}}
\multiput(33.14,19.92)(0.36,0.07){1}{\line(1,0){0.36}}
\multiput(33.5,19.98)(0.35,0.07){1}{\line(1,0){0.35}}
\multiput(33.85,20.06)(0.34,0.08){1}{\line(1,0){0.34}}
\multiput(34.19,20.14)(0.33,0.09){1}{\line(1,0){0.33}}
\multiput(34.52,20.23)(0.32,0.1){1}{\line(1,0){0.32}}
\multiput(34.85,20.34)(0.31,0.11){1}{\line(1,0){0.31}}
\multiput(35.16,20.45)(0.3,0.12){1}{\line(1,0){0.3}}
\multiput(35.46,20.56)(0.29,0.13){1}{\line(1,0){0.29}}
\multiput(35.76,20.69)(0.28,0.14){1}{\line(1,0){0.28}}
\multiput(36.04,20.83)(0.27,0.14){1}{\line(1,0){0.27}}
\multiput(36.31,20.97)(0.26,0.15){1}{\line(1,0){0.26}}
\multiput(36.57,21.12)(0.25,0.16){1}{\line(1,0){0.25}}
\multiput(36.82,21.28)(0.24,0.17){1}{\line(1,0){0.24}}
\multiput(37.06,21.45)(0.23,0.18){1}{\line(1,0){0.23}}
\multiput(37.29,21.63)(0.11,0.09){2}{\line(1,0){0.11}}
\multiput(37.5,21.81)(0.1,0.1){2}{\line(1,0){0.1}}
\multiput(37.71,22)(0.1,0.1){2}{\line(0,1){0.1}}
\multiput(37.9,22.2)(0.18,0.21){1}{\line(0,1){0.21}}
\multiput(38.07,22.41)(0.17,0.21){1}{\line(0,1){0.21}}
\multiput(38.24,22.62)(0.15,0.22){1}{\line(0,1){0.22}}
\multiput(38.39,22.84)(0.14,0.23){1}{\line(0,1){0.23}}
\multiput(38.53,23.07)(0.13,0.23){1}{\line(0,1){0.23}}
\multiput(38.66,23.3)(0.11,0.24){1}{\line(0,1){0.24}}
\multiput(38.77,23.54)(0.1,0.24){1}{\line(0,1){0.24}}
\multiput(38.88,23.78)(0.09,0.25){1}{\line(0,1){0.25}}
\multiput(38.96,24.03)(0.07,0.26){1}{\line(0,1){0.26}}
\multiput(39.04,24.29)(0.06,0.26){1}{\line(0,1){0.26}}
\multiput(39.1,24.55)(0.05,0.27){1}{\line(0,1){0.27}}
\multiput(39.15,24.82)(0.03,0.27){1}{\line(0,1){0.27}}
\multiput(39.18,25.09)(0.02,0.28){1}{\line(0,1){0.28}}
\multiput(39.2,25.37)(0.01,0.28){1}{\line(0,1){0.28}}

\linethickness{0.3mm}
\multiput(32.97,29.04)(0.1,-0.45){1}{\line(0,-1){0.45}}
\multiput(33.07,28.59)(0.04,-0.45){1}{\line(0,-1){0.45}}
\multiput(33.07,27.71)(0.03,0.43){1}{\line(0,1){0.43}}
\multiput(32.97,27.3)(0.1,0.41){1}{\line(0,1){0.41}}
\multiput(32.8,26.92)(0.17,0.38){1}{\line(0,1){0.38}}
\multiput(32.57,26.58)(0.11,0.17){2}{\line(0,1){0.17}}
\multiput(32.29,26.29)(0.14,0.15){2}{\line(0,1){0.15}}
\multiput(31.95,26.04)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(31.56,25.86)(0.19,0.09){2}{\line(1,0){0.19}}
\multiput(31.14,25.73)(0.42,0.13){1}{\line(1,0){0.42}}
\multiput(30.69,25.67)(0.45,0.06){1}{\line(1,0){0.45}}
\put(30.22,25.67){\line(1,0){0.47}}
\multiput(29.74,25.73)(0.48,-0.06){1}{\line(1,0){0.48}}
\multiput(29.27,25.86)(0.48,-0.13){1}{\line(1,0){0.48}}
\multiput(28.8,26.04)(0.23,-0.09){2}{\line(1,0){0.23}}
\multiput(28.34,26.29)(0.23,-0.12){2}{\line(1,0){0.23}}
\multiput(27.92,26.58)(0.21,-0.15){2}{\line(1,0){0.21}}
\multiput(27.54,26.92)(0.13,-0.11){3}{\line(1,0){0.13}}
\multiput(27.2,27.3)(0.11,-0.13){3}{\line(0,-1){0.13}}
\multiput(26.91,27.71)(0.14,-0.2){2}{\line(0,-1){0.2}}
\multiput(26.68,28.14)(0.12,-0.22){2}{\line(0,-1){0.22}}
\multiput(26.51,28.59)(0.17,-0.45){1}{\line(0,-1){0.45}}
\multiput(26.4,29.04)(0.1,-0.45){1}{\line(0,-1){0.45}}
\multiput(26.37,29.49)(0.04,-0.45){1}{\line(0,-1){0.45}}
\multiput(26.37,29.49)(0.03,0.43){1}{\line(0,1){0.43}}
\multiput(26.4,29.92)(0.1,0.41){1}{\line(0,1){0.41}}
\multiput(26.5,30.33)(0.17,0.38){1}{\line(0,1){0.38}}
\multiput(26.67,30.71)(0.11,0.17){2}{\line(0,1){0.17}}
\multiput(26.9,31.05)(0.14,0.15){2}{\line(0,1){0.15}}
\multiput(27.19,31.34)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(27.53,31.59)(0.19,0.09){2}{\line(1,0){0.19}}
\multiput(27.91,31.77)(0.42,0.13){1}{\line(1,0){0.42}}
\multiput(28.33,31.9)(0.45,0.06){1}{\line(1,0){0.45}}
\put(28.78,31.97){\line(1,0){0.47}}
\multiput(29.25,31.97)(0.48,-0.06){1}{\line(1,0){0.48}}
\multiput(29.73,31.9)(0.48,-0.13){1}{\line(1,0){0.48}}
\multiput(30.21,31.77)(0.23,-0.09){2}{\line(1,0){0.23}}
\multiput(30.68,31.59)(0.23,-0.12){2}{\line(1,0){0.23}}
\multiput(31.13,31.34)(0.21,-0.15){2}{\line(1,0){0.21}}
\multiput(31.55,31.05)(0.13,-0.11){3}{\line(1,0){0.13}}
\multiput(31.94,30.71)(0.11,-0.13){3}{\line(0,-1){0.13}}
\multiput(32.28,30.33)(0.14,-0.2){2}{\line(0,-1){0.2}}
\multiput(32.57,29.92)(0.12,-0.22){2}{\line(0,-1){0.22}}
\multiput(32.8,29.49)(0.17,-0.45){1}{\line(0,-1){0.45}}

\linethickness{0.3mm}
\multiput(21.68,29.03)(0.05,-0.42){1}{\line(0,-1){0.42}}
\multiput(21.71,28.2)(0.02,0.4){1}{\line(0,1){0.4}}
\multiput(21.62,27.82)(0.09,0.38){1}{\line(0,1){0.38}}
\multiput(21.47,27.48)(0.15,0.35){1}{\line(0,1){0.35}}
\multiput(21.25,27.17)(0.11,0.15){2}{\line(0,1){0.15}}
\multiput(20.98,26.92)(0.14,0.13){2}{\line(1,0){0.14}}
\multiput(20.66,26.71)(0.16,0.1){2}{\line(1,0){0.16}}
\multiput(20.29,26.56)(0.37,0.15){1}{\line(1,0){0.37}}
\multiput(19.88,26.47)(0.41,0.09){1}{\line(1,0){0.41}}
\multiput(19.44,26.44)(0.44,0.03){1}{\line(1,0){0.44}}
\multiput(18.98,26.47)(0.46,-0.03){1}{\line(1,0){0.46}}
\multiput(18.51,26.57)(0.47,-0.09){1}{\line(1,0){0.47}}
\multiput(18.04,26.72)(0.47,-0.15){1}{\line(1,0){0.47}}
\multiput(17.58,26.93)(0.23,-0.1){2}{\line(1,0){0.23}}
\multiput(17.13,27.19)(0.22,-0.13){2}{\line(1,0){0.22}}
\multiput(16.71,27.5)(0.14,-0.1){3}{\line(1,0){0.14}}
\multiput(16.33,27.85)(0.13,-0.12){3}{\line(1,0){0.13}}
\multiput(15.98,28.23)(0.11,-0.13){3}{\line(0,-1){0.13}}
\multiput(15.69,28.63)(0.15,-0.2){2}{\line(0,-1){0.2}}
\multiput(15.45,29.06)(0.12,-0.21){2}{\line(0,-1){0.21}}
\multiput(15.28,29.49)(0.18,-0.43){1}{\line(0,-1){0.43}}
\multiput(15.16,29.92)(0.11,-0.43){1}{\line(0,-1){0.43}}
\multiput(15.12,30.34)(0.05,-0.42){1}{\line(0,-1){0.42}}
\multiput(15.12,30.34)(0.02,0.4){1}{\line(0,1){0.4}}
\multiput(15.14,30.75)(0.09,0.38){1}{\line(0,1){0.38}}
\multiput(15.22,31.12)(0.15,0.35){1}{\line(0,1){0.35}}
\multiput(15.38,31.47)(0.11,0.15){2}{\line(0,1){0.15}}
\multiput(15.59,31.77)(0.14,0.13){2}{\line(1,0){0.14}}
\multiput(15.86,32.03)(0.16,0.1){2}{\line(1,0){0.16}}
\multiput(16.19,32.24)(0.37,0.15){1}{\line(1,0){0.37}}
\multiput(16.56,32.39)(0.41,0.09){1}{\line(1,0){0.41}}
\multiput(16.96,32.48)(0.44,0.03){1}{\line(1,0){0.44}}
\multiput(17.4,32.51)(0.46,-0.03){1}{\line(1,0){0.46}}
\multiput(17.86,32.47)(0.47,-0.09){1}{\line(1,0){0.47}}
\multiput(18.33,32.38)(0.47,-0.15){1}{\line(1,0){0.47}}
\multiput(18.8,32.23)(0.23,-0.1){2}{\line(1,0){0.23}}
\multiput(19.26,32.02)(0.22,-0.13){2}{\line(1,0){0.22}}
\multiput(19.71,31.76)(0.14,-0.1){3}{\line(1,0){0.14}}
\multiput(20.13,31.45)(0.13,-0.12){3}{\line(1,0){0.13}}
\multiput(20.51,31.1)(0.11,-0.13){3}{\line(0,-1){0.13}}
\multiput(20.86,30.72)(0.15,-0.2){2}{\line(0,-1){0.2}}
\multiput(21.15,30.32)(0.12,-0.21){2}{\line(0,-1){0.21}}
\multiput(21.39,29.89)(0.18,-0.43){1}{\line(0,-1){0.43}}
\multiput(21.57,29.46)(0.11,-0.43){1}{\line(0,-1){0.43}}

\put(38.55,3.42){\makebox(0,0)[cc]{Figure 2 - Subtypes as Subsets}}

\linethickness{0.3mm}
\multiput(37.91,9.07)(0.5,0.01){1}{\line(1,0){0.5}}
\multiput(38.41,9.08)(0.5,0.02){1}{\line(1,0){0.5}}
\multiput(38.91,9.1)(0.5,0.02){1}{\line(1,0){0.5}}
\multiput(39.4,9.12)(0.5,0.03){1}{\line(1,0){0.5}}
\multiput(39.9,9.15)(0.5,0.03){1}{\line(1,0){0.5}}
\multiput(40.4,9.18)(0.5,0.03){1}{\line(1,0){0.5}}
\multiput(40.89,9.21)(0.5,0.04){1}{\line(1,0){0.5}}
\multiput(41.39,9.25)(0.49,0.04){1}{\line(1,0){0.49}}
\multiput(41.88,9.29)(0.49,0.05){1}{\line(1,0){0.49}}
\multiput(42.38,9.34)(0.49,0.05){1}{\line(1,0){0.49}}
\multiput(42.87,9.4)(0.49,0.06){1}{\line(1,0){0.49}}
\multiput(43.36,9.45)(0.49,0.06){1}{\line(1,0){0.49}}
\multiput(43.85,9.52)(0.49,0.07){1}{\line(1,0){0.49}}
\multiput(44.34,9.59)(0.49,0.07){1}{\line(1,0){0.49}}
\multiput(44.82,9.66)(0.49,0.08){1}{\line(1,0){0.49}}
\multiput(45.31,9.73)(0.48,0.08){1}{\line(1,0){0.48}}
\multiput(45.79,9.82)(0.48,0.09){1}{\line(1,0){0.48}}
\multiput(46.27,9.9)(0.48,0.09){1}{\line(1,0){0.48}}
\multiput(46.75,9.99)(0.48,0.1){1}{\line(1,0){0.48}}
\multiput(47.23,10.09)(0.48,0.1){1}{\line(1,0){0.48}}
\multiput(47.71,10.19)(0.47,0.1){1}{\line(1,0){0.47}}
\multiput(48.18,10.29)(0.47,0.11){1}{\line(1,0){0.47}}
\multiput(48.65,10.4)(0.47,0.11){1}{\line(1,0){0.47}}
\multiput(49.12,10.52)(0.47,0.12){1}{\line(1,0){0.47}}
\multiput(49.59,10.63)(0.46,0.12){1}{\line(1,0){0.46}}
\multiput(50.05,10.76)(0.46,0.13){1}{\line(1,0){0.46}}
\multiput(50.52,10.88)(0.46,0.13){1}{\line(1,0){0.46}}
\multiput(50.97,11.01)(0.46,0.14){1}{\line(1,0){0.46}}
\multiput(51.43,11.15)(0.45,0.14){1}{\line(1,0){0.45}}
\multiput(51.88,11.29)(0.45,0.14){1}{\line(1,0){0.45}}
\multiput(52.33,11.43)(0.45,0.15){1}{\line(1,0){0.45}}
\multiput(52.78,11.58)(0.44,0.15){1}{\line(1,0){0.44}}
\multiput(53.22,11.74)(0.44,0.16){1}{\line(1,0){0.44}}
\multiput(53.66,11.89)(0.44,0.16){1}{\line(1,0){0.44}}
\multiput(54.1,12.05)(0.43,0.17){1}{\line(1,0){0.43}}
\multiput(54.53,12.22)(0.43,0.17){1}{\line(1,0){0.43}}
\multiput(54.96,12.39)(0.43,0.17){1}{\line(1,0){0.43}}
\multiput(55.39,12.56)(0.42,0.18){1}{\line(1,0){0.42}}
\multiput(55.81,12.74)(0.21,0.09){2}{\line(1,0){0.21}}
\multiput(56.23,12.92)(0.21,0.09){2}{\line(1,0){0.21}}
\multiput(56.65,13.11)(0.21,0.09){2}{\line(1,0){0.21}}
\multiput(57.06,13.3)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(57.46,13.49)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(57.87,13.69)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(58.26,13.89)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(58.66,14.1)(0.19,0.1){2}{\line(1,0){0.19}}
\multiput(59.05,14.31)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(59.43,14.52)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(59.81,14.73)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(60.19,14.95)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(60.56,15.18)(0.18,0.11){2}{\line(1,0){0.18}}
\multiput(60.93,15.4)(0.18,0.12){2}{\line(1,0){0.18}}
\multiput(61.29,15.64)(0.18,0.12){2}{\line(1,0){0.18}}
\multiput(61.64,15.87)(0.18,0.12){2}{\line(1,0){0.18}}
\multiput(62,16.11)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(62.34,16.35)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(62.68,16.59)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(63.02,16.84)(0.17,0.13){2}{\line(1,0){0.17}}
\multiput(63.35,17.09)(0.16,0.13){2}{\line(1,0){0.16}}
\multiput(63.68,17.34)(0.16,0.13){2}{\line(1,0){0.16}}
\multiput(64,17.6)(0.16,0.13){2}{\line(1,0){0.16}}
\multiput(64.31,17.86)(0.15,0.13){2}{\line(1,0){0.15}}
\multiput(64.62,18.12)(0.15,0.13){2}{\line(1,0){0.15}}
\multiput(64.92,18.39)(0.15,0.13){2}{\line(1,0){0.15}}
\multiput(65.22,18.66)(0.15,0.14){2}{\line(1,0){0.15}}
\multiput(65.51,18.93)(0.14,0.14){2}{\line(1,0){0.14}}
\multiput(65.8,19.2)(0.14,0.14){2}{\line(1,0){0.14}}
\multiput(66.08,19.48)(0.14,0.14){2}{\line(0,1){0.14}}
\multiput(66.35,19.76)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(66.62,20.04)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(66.88,20.32)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(67.14,20.61)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(67.39,20.9)(0.12,0.15){2}{\line(0,1){0.15}}
\multiput(67.63,21.19)(0.12,0.15){2}{\line(0,1){0.15}}
\multiput(67.87,21.49)(0.12,0.15){2}{\line(0,1){0.15}}
\multiput(68.1,21.78)(0.11,0.15){2}{\line(0,1){0.15}}
\multiput(68.33,22.08)(0.11,0.15){2}{\line(0,1){0.15}}
\multiput(68.55,22.38)(0.11,0.15){2}{\line(0,1){0.15}}
\multiput(68.76,22.68)(0.1,0.15){2}{\line(0,1){0.15}}
\multiput(68.96,22.99)(0.1,0.15){2}{\line(0,1){0.15}}
\multiput(69.16,23.3)(0.1,0.15){2}{\line(0,1){0.15}}
\multiput(69.36,23.6)(0.09,0.16){2}{\line(0,1){0.16}}
\multiput(69.54,23.91)(0.18,0.31){1}{\line(0,1){0.31}}
\multiput(69.72,24.23)(0.17,0.31){1}{\line(0,1){0.31}}
\multiput(69.9,24.54)(0.17,0.32){1}{\line(0,1){0.32}}
\multiput(70.06,24.86)(0.16,0.32){1}{\line(0,1){0.32}}
\multiput(70.22,25.17)(0.15,0.32){1}{\line(0,1){0.32}}
\multiput(70.37,25.49)(0.15,0.32){1}{\line(0,1){0.32}}
\multiput(70.52,25.81)(0.14,0.32){1}{\line(0,1){0.32}}
\multiput(70.66,26.13)(0.13,0.32){1}{\line(0,1){0.32}}
\multiput(70.79,26.45)(0.13,0.32){1}{\line(0,1){0.32}}
\multiput(70.92,26.78)(0.12,0.32){1}{\line(0,1){0.32}}
\multiput(71.03,27.1)(0.11,0.33){1}{\line(0,1){0.33}}
\multiput(71.15,27.43)(0.1,0.33){1}{\line(0,1){0.33}}
\multiput(71.25,27.76)(0.1,0.33){1}{\line(0,1){0.33}}
\multiput(71.35,28.08)(0.09,0.33){1}{\line(0,1){0.33}}
\multiput(71.44,28.41)(0.08,0.33){1}{\line(0,1){0.33}}
\multiput(71.52,28.74)(0.08,0.33){1}{\line(0,1){0.33}}
\multiput(71.6,29.07)(0.07,0.33){1}{\line(0,1){0.33}}
\multiput(71.67,29.4)(0.06,0.33){1}{\line(0,1){0.33}}
\multiput(71.73,29.74)(0.06,0.33){1}{\line(0,1){0.33}}
\multiput(71.79,30.07)(0.05,0.33){1}{\line(0,1){0.33}}
\multiput(71.83,30.4)(0.04,0.33){1}{\line(0,1){0.33}}
\multiput(71.88,30.73)(0.03,0.33){1}{\line(0,1){0.33}}
\multiput(71.91,31.07)(0.03,0.33){1}{\line(0,1){0.33}}
\multiput(71.94,31.4)(0.02,0.33){1}{\line(0,1){0.33}}
\multiput(71.96,31.74)(0.01,0.33){1}{\line(0,1){0.33}}
\multiput(71.97,32.07)(0.01,0.33){1}{\line(0,1){0.33}}
\multiput(71.97,32.74)(0,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.96,33.07)(0.01,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.95,33.41)(0.02,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.93,33.74)(0.02,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.9,34.08)(0.03,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.86,34.41)(0.04,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.81,34.74)(0.04,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.76,35.07)(0.05,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.7,35.41)(0.06,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.64,35.74)(0.07,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.57,36.07)(0.07,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.49,36.4)(0.08,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.4,36.73)(0.09,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.31,37.06)(0.09,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.21,37.38)(0.1,-0.33){1}{\line(0,-1){0.33}}
\multiput(71.1,37.71)(0.11,-0.33){1}{\line(0,-1){0.33}}
\multiput(70.99,38.04)(0.11,-0.33){1}{\line(0,-1){0.33}}
\multiput(70.86,38.36)(0.12,-0.32){1}{\line(0,-1){0.32}}
\multiput(70.74,38.68)(0.13,-0.32){1}{\line(0,-1){0.32}}
\multiput(70.6,39)(0.14,-0.32){1}{\line(0,-1){0.32}}
\multiput(70.46,39.33)(0.14,-0.32){1}{\line(0,-1){0.32}}
\multiput(70.31,39.64)(0.15,-0.32){1}{\line(0,-1){0.32}}
\multiput(70.15,39.96)(0.16,-0.32){1}{\line(0,-1){0.32}}
\multiput(69.99,40.28)(0.16,-0.32){1}{\line(0,-1){0.32}}
\multiput(69.82,40.59)(0.17,-0.31){1}{\line(0,-1){0.31}}
\multiput(69.65,40.91)(0.18,-0.31){1}{\line(0,-1){0.31}}
\multiput(69.47,41.22)(0.09,-0.16){2}{\line(0,-1){0.16}}
\multiput(69.28,41.53)(0.09,-0.15){2}{\line(0,-1){0.15}}
\multiput(69.08,41.83)(0.1,-0.15){2}{\line(0,-1){0.15}}
\multiput(68.88,42.14)(0.1,-0.15){2}{\line(0,-1){0.15}}
\multiput(68.67,42.44)(0.1,-0.15){2}{\line(0,-1){0.15}}
\multiput(68.46,42.74)(0.11,-0.15){2}{\line(0,-1){0.15}}
\multiput(68.23,43.04)(0.11,-0.15){2}{\line(0,-1){0.15}}
\multiput(68.01,43.34)(0.11,-0.15){2}{\line(0,-1){0.15}}
\multiput(67.77,43.64)(0.12,-0.15){2}{\line(0,-1){0.15}}
\multiput(67.53,43.93)(0.12,-0.15){2}{\line(0,-1){0.15}}
\multiput(67.29,44.22)(0.12,-0.15){2}{\line(0,-1){0.15}}
\multiput(67.03,44.51)(0.13,-0.14){2}{\line(0,-1){0.14}}
\multiput(66.77,44.79)(0.13,-0.14){2}{\line(0,-1){0.14}}
\multiput(66.51,45.08)(0.13,-0.14){2}{\line(0,-1){0.14}}
\multiput(66.24,45.36)(0.14,-0.14){2}{\line(0,-1){0.14}}
\multiput(65.96,45.64)(0.14,-0.14){2}{\line(0,-1){0.14}}
\multiput(65.68,45.91)(0.14,-0.14){2}{\line(1,0){0.14}}
\multiput(65.39,46.18)(0.14,-0.14){2}{\line(1,0){0.14}}
\multiput(65.1,46.45)(0.15,-0.13){2}{\line(1,0){0.15}}
\multiput(64.8,46.72)(0.15,-0.13){2}{\line(1,0){0.15}}
\multiput(64.49,46.98)(0.15,-0.13){2}{\line(1,0){0.15}}
\multiput(64.18,47.25)(0.16,-0.13){2}{\line(1,0){0.16}}
\multiput(63.86,47.5)(0.16,-0.13){2}{\line(1,0){0.16}}
\multiput(63.54,47.76)(0.16,-0.13){2}{\line(1,0){0.16}}
\multiput(63.21,48.01)(0.16,-0.13){2}{\line(1,0){0.16}}
\multiput(62.88,48.26)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(62.54,48.5)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(62.2,48.75)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(61.85,48.99)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(61.5,49.22)(0.18,-0.12){2}{\line(1,0){0.18}}
\multiput(61.14,49.45)(0.18,-0.12){2}{\line(1,0){0.18}}
\multiput(60.77,49.68)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(60.4,49.91)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(60.03,50.13)(0.19,-0.11){2}{\line(1,0){0.19}}
\multiput(59.65,50.35)(0.19,-0.11){2}{\line(1,0){0.19}}
\multiput(59.27,50.56)(0.19,-0.11){2}{\line(1,0){0.19}}
\multiput(58.88,50.77)(0.19,-0.11){2}{\line(1,0){0.19}}
\multiput(58.49,50.98)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(58.1,51.18)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(57.7,51.38)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(57.29,51.58)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(56.88,51.77)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(56.47,51.96)(0.21,-0.09){2}{\line(1,0){0.21}}
\multiput(56.06,52.14)(0.21,-0.09){2}{\line(1,0){0.21}}
\multiput(55.64,52.32)(0.42,-0.18){1}{\line(1,0){0.42}}
\multiput(55.21,52.5)(0.42,-0.18){1}{\line(1,0){0.42}}
\multiput(54.78,52.67)(0.43,-0.17){1}{\line(1,0){0.43}}
\multiput(54.35,52.83)(0.43,-0.17){1}{\line(1,0){0.43}}
\multiput(53.92,53)(0.43,-0.16){1}{\line(1,0){0.43}}
\multiput(53.48,53.16)(0.44,-0.16){1}{\line(1,0){0.44}}
\multiput(53.04,53.31)(0.44,-0.15){1}{\line(1,0){0.44}}
\multiput(52.59,53.46)(0.44,-0.15){1}{\line(1,0){0.44}}
\multiput(52.14,53.61)(0.45,-0.15){1}{\line(1,0){0.45}}
\multiput(51.69,53.75)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(51.24,53.89)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(50.78,54.02)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(50.32,54.15)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(49.86,54.28)(0.46,-0.12){1}{\line(1,0){0.46}}
\multiput(49.39,54.4)(0.47,-0.12){1}{\line(1,0){0.47}}
\multiput(48.93,54.51)(0.47,-0.12){1}{\line(1,0){0.47}}
\multiput(48.46,54.62)(0.47,-0.11){1}{\line(1,0){0.47}}
\multiput(47.98,54.73)(0.47,-0.11){1}{\line(1,0){0.47}}
\multiput(47.51,54.83)(0.47,-0.1){1}{\line(1,0){0.47}}
\multiput(47.03,54.93)(0.48,-0.1){1}{\line(1,0){0.48}}
\multiput(46.55,55.02)(0.48,-0.09){1}{\line(1,0){0.48}}
\multiput(46.07,55.11)(0.48,-0.09){1}{\line(1,0){0.48}}
\multiput(45.59,55.19)(0.48,-0.08){1}{\line(1,0){0.48}}
\multiput(45.11,55.27)(0.48,-0.08){1}{\line(1,0){0.48}}
\multiput(44.62,55.35)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(44.13,55.42)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(43.64,55.48)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(43.15,55.54)(0.49,-0.06){1}{\line(1,0){0.49}}
\multiput(42.66,55.6)(0.49,-0.06){1}{\line(1,0){0.49}}
\multiput(42.17,55.65)(0.49,-0.05){1}{\line(1,0){0.49}}
\multiput(41.67,55.7)(0.49,-0.05){1}{\line(1,0){0.49}}
\multiput(41.18,55.74)(0.49,-0.04){1}{\line(1,0){0.49}}
\multiput(40.68,55.78)(0.5,-0.04){1}{\line(1,0){0.5}}
\multiput(40.19,55.81)(0.5,-0.03){1}{\line(1,0){0.5}}
\multiput(39.69,55.83)(0.5,-0.03){1}{\line(1,0){0.5}}
\multiput(39.19,55.86)(0.5,-0.02){1}{\line(1,0){0.5}}
\multiput(38.7,55.88)(0.5,-0.02){1}{\line(1,0){0.5}}
\multiput(38.2,55.89)(0.5,-0.01){1}{\line(1,0){0.5}}
\multiput(37.7,55.9)(0.5,-0.01){1}{\line(1,0){0.5}}
\multiput(37.2,55.9)(0.5,-0){1}{\line(1,0){0.5}}
\multiput(36.7,55.9)(0.5,0){1}{\line(1,0){0.5}}
\multiput(36.2,55.89)(0.5,0.01){1}{\line(1,0){0.5}}
\multiput(35.7,55.88)(0.5,0.01){1}{\line(1,0){0.5}}
\multiput(35.21,55.87)(0.5,0.02){1}{\line(1,0){0.5}}
\multiput(34.71,55.85)(0.5,0.02){1}{\line(1,0){0.5}}
\multiput(34.21,55.82)(0.5,0.03){1}{\line(1,0){0.5}}
\multiput(33.72,55.79)(0.5,0.03){1}{\line(1,0){0.5}}
\multiput(33.22,55.76)(0.5,0.03){1}{\line(1,0){0.5}}
\multiput(32.72,55.72)(0.5,0.04){1}{\line(1,0){0.5}}
\multiput(32.23,55.67)(0.49,0.04){1}{\line(1,0){0.49}}
\multiput(31.74,55.62)(0.49,0.05){1}{\line(1,0){0.49}}
\multiput(31.24,55.57)(0.49,0.05){1}{\line(1,0){0.49}}
\multiput(30.75,55.51)(0.49,0.06){1}{\line(1,0){0.49}}
\multiput(30.26,55.45)(0.49,0.06){1}{\line(1,0){0.49}}
\multiput(29.77,55.38)(0.49,0.07){1}{\line(1,0){0.49}}
\multiput(29.29,55.31)(0.49,0.07){1}{\line(1,0){0.49}}
\multiput(28.8,55.23)(0.49,0.08){1}{\line(1,0){0.49}}
\multiput(28.32,55.15)(0.48,0.08){1}{\line(1,0){0.48}}
\multiput(27.84,55.06)(0.48,0.09){1}{\line(1,0){0.48}}
\multiput(27.36,54.97)(0.48,0.09){1}{\line(1,0){0.48}}
\multiput(26.88,54.88)(0.48,0.1){1}{\line(1,0){0.48}}
\multiput(26.4,54.78)(0.48,0.1){1}{\line(1,0){0.48}}
\multiput(25.93,54.67)(0.47,0.1){1}{\line(1,0){0.47}}
\multiput(25.46,54.57)(0.47,0.11){1}{\line(1,0){0.47}}
\multiput(24.99,54.45)(0.47,0.11){1}{\line(1,0){0.47}}
\multiput(24.52,54.33)(0.47,0.12){1}{\line(1,0){0.47}}
\multiput(24.06,54.21)(0.46,0.12){1}{\line(1,0){0.46}}
\multiput(23.6,54.08)(0.46,0.13){1}{\line(1,0){0.46}}
\multiput(23.14,53.95)(0.46,0.13){1}{\line(1,0){0.46}}
\multiput(22.68,53.82)(0.46,0.14){1}{\line(1,0){0.46}}
\multiput(22.23,53.68)(0.45,0.14){1}{\line(1,0){0.45}}
\multiput(21.78,53.53)(0.45,0.14){1}{\line(1,0){0.45}}
\multiput(21.33,53.38)(0.45,0.15){1}{\line(1,0){0.45}}
\multiput(20.89,53.23)(0.44,0.15){1}{\line(1,0){0.44}}
\multiput(20.45,53.07)(0.44,0.16){1}{\line(1,0){0.44}}
\multiput(20.01,52.91)(0.44,0.16){1}{\line(1,0){0.44}}
\multiput(19.58,52.75)(0.43,0.17){1}{\line(1,0){0.43}}
\multiput(19.15,52.58)(0.43,0.17){1}{\line(1,0){0.43}}
\multiput(18.72,52.4)(0.43,0.17){1}{\line(1,0){0.43}}
\multiput(18.3,52.23)(0.42,0.18){1}{\line(1,0){0.42}}
\multiput(17.88,52.04)(0.21,0.09){2}{\line(1,0){0.21}}
\multiput(17.47,51.86)(0.21,0.09){2}{\line(1,0){0.21}}
\multiput(17.05,51.67)(0.21,0.09){2}{\line(1,0){0.21}}
\multiput(16.65,51.47)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(16.25,51.28)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(15.85,51.08)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(15.45,50.87)(0.2,0.1){2}{\line(1,0){0.2}}
\multiput(15.06,50.66)(0.19,0.1){2}{\line(1,0){0.19}}
\multiput(14.68,50.45)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(14.3,50.23)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(13.92,50.01)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(13.55,49.79)(0.19,0.11){2}{\line(1,0){0.19}}
\multiput(13.19,49.56)(0.18,0.11){2}{\line(1,0){0.18}}
\multiput(12.82,49.33)(0.18,0.12){2}{\line(1,0){0.18}}
\multiput(12.47,49.1)(0.18,0.12){2}{\line(1,0){0.18}}
\multiput(12.12,48.86)(0.18,0.12){2}{\line(1,0){0.18}}
\multiput(11.77,48.62)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(11.43,48.38)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(11.09,48.13)(0.17,0.12){2}{\line(1,0){0.17}}
\multiput(10.76,47.88)(0.17,0.13){2}{\line(1,0){0.17}}
\multiput(10.44,47.62)(0.16,0.13){2}{\line(1,0){0.16}}
\multiput(10.12,47.37)(0.16,0.13){2}{\line(1,0){0.16}}
\multiput(9.8,47.11)(0.16,0.13){2}{\line(1,0){0.16}}
\multiput(9.49,46.85)(0.15,0.13){2}{\line(1,0){0.15}}
\multiput(9.19,46.58)(0.15,0.13){2}{\line(1,0){0.15}}
\multiput(8.89,46.31)(0.15,0.13){2}{\line(1,0){0.15}}
\multiput(8.6,46.04)(0.15,0.14){2}{\line(1,0){0.15}}
\multiput(8.31,45.77)(0.14,0.14){2}{\line(1,0){0.14}}
\multiput(8.03,45.49)(0.14,0.14){2}{\line(1,0){0.14}}
\multiput(7.76,45.21)(0.14,0.14){2}{\line(0,1){0.14}}
\multiput(7.49,44.93)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(7.23,44.64)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(6.97,44.36)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(6.72,44.07)(0.13,0.14){2}{\line(0,1){0.14}}
\multiput(6.48,43.78)(0.12,0.15){2}{\line(0,1){0.15}}
\multiput(6.24,43.48)(0.12,0.15){2}{\line(0,1){0.15}}
\multiput(6.01,43.19)(0.12,0.15){2}{\line(0,1){0.15}}
\multiput(5.78,42.89)(0.11,0.15){2}{\line(0,1){0.15}}
\multiput(5.57,42.59)(0.11,0.15){2}{\line(0,1){0.15}}
\multiput(5.35,42.28)(0.11,0.15){2}{\line(0,1){0.15}}
\multiput(5.15,41.98)(0.1,0.15){2}{\line(0,1){0.15}}
\multiput(4.95,41.67)(0.1,0.15){2}{\line(0,1){0.15}}
\multiput(4.76,41.36)(0.1,0.15){2}{\line(0,1){0.15}}
\multiput(4.57,41.05)(0.09,0.16){2}{\line(0,1){0.16}}
\multiput(4.39,40.74)(0.18,0.31){1}{\line(0,1){0.31}}
\multiput(4.22,40.43)(0.17,0.31){1}{\line(0,1){0.31}}
\multiput(4.05,40.11)(0.17,0.32){1}{\line(0,1){0.32}}
\multiput(3.89,39.8)(0.16,0.32){1}{\line(0,1){0.32}}
\multiput(3.74,39.48)(0.15,0.32){1}{\line(0,1){0.32}}
\multiput(3.59,39.16)(0.15,0.32){1}{\line(0,1){0.32}}
\multiput(3.45,38.84)(0.14,0.32){1}{\line(0,1){0.32}}
\multiput(3.32,38.51)(0.13,0.32){1}{\line(0,1){0.32}}
\multiput(3.2,38.19)(0.13,0.32){1}{\line(0,1){0.32}}
\multiput(3.08,37.86)(0.12,0.32){1}{\line(0,1){0.32}}
\multiput(2.97,37.54)(0.11,0.33){1}{\line(0,1){0.33}}
\multiput(2.86,37.21)(0.1,0.33){1}{\line(0,1){0.33}}
\multiput(2.76,36.88)(0.1,0.33){1}{\line(0,1){0.33}}
\multiput(2.67,36.55)(0.09,0.33){1}{\line(0,1){0.33}}
\multiput(2.59,36.23)(0.08,0.33){1}{\line(0,1){0.33}}
\multiput(2.51,35.89)(0.08,0.33){1}{\line(0,1){0.33}}
\multiput(2.44,35.56)(0.07,0.33){1}{\line(0,1){0.33}}
\multiput(2.38,35.23)(0.06,0.33){1}{\line(0,1){0.33}}
\multiput(2.33,34.9)(0.06,0.33){1}{\line(0,1){0.33}}
\multiput(2.28,34.57)(0.05,0.33){1}{\line(0,1){0.33}}
\multiput(2.24,34.23)(0.04,0.33){1}{\line(0,1){0.33}}
\multiput(2.2,33.9)(0.03,0.33){1}{\line(0,1){0.33}}
\multiput(2.18,33.57)(0.03,0.33){1}{\line(0,1){0.33}}
\multiput(2.16,33.23)(0.02,0.33){1}{\line(0,1){0.33}}
\multiput(2.14,32.9)(0.01,0.33){1}{\line(0,1){0.33}}
\multiput(2.14,32.56)(0.01,0.33){1}{\line(0,1){0.33}}
\multiput(2.14,32.56)(0,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.14,32.23)(0.01,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.15,31.89)(0.02,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.16,31.56)(0.02,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.19,31.23)(0.03,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.22,30.89)(0.04,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.25,30.56)(0.04,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.3,30.23)(0.05,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.35,29.89)(0.06,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.41,29.56)(0.07,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.47,29.23)(0.07,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.54,28.9)(0.08,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.62,28.57)(0.09,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.71,28.24)(0.09,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.8,27.91)(0.1,-0.33){1}{\line(0,-1){0.33}}
\multiput(2.9,27.58)(0.11,-0.33){1}{\line(0,-1){0.33}}
\multiput(3.01,27.26)(0.11,-0.33){1}{\line(0,-1){0.33}}
\multiput(3.13,26.93)(0.12,-0.32){1}{\line(0,-1){0.32}}
\multiput(3.25,26.61)(0.13,-0.32){1}{\line(0,-1){0.32}}
\multiput(3.38,26.28)(0.14,-0.32){1}{\line(0,-1){0.32}}
\multiput(3.51,25.96)(0.14,-0.32){1}{\line(0,-1){0.32}}
\multiput(3.65,25.64)(0.15,-0.32){1}{\line(0,-1){0.32}}
\multiput(3.8,25.32)(0.16,-0.32){1}{\line(0,-1){0.32}}
\multiput(3.96,25.01)(0.16,-0.32){1}{\line(0,-1){0.32}}
\multiput(4.12,24.69)(0.17,-0.31){1}{\line(0,-1){0.31}}
\multiput(4.29,24.37)(0.18,-0.31){1}{\line(0,-1){0.31}}
\multiput(4.46,24.06)(0.09,-0.16){2}{\line(0,-1){0.16}}
\multiput(4.65,23.75)(0.09,-0.15){2}{\line(0,-1){0.15}}
\multiput(4.84,23.44)(0.1,-0.15){2}{\line(0,-1){0.15}}
\multiput(5.03,23.13)(0.1,-0.15){2}{\line(0,-1){0.15}}
\multiput(5.23,22.83)(0.1,-0.15){2}{\line(0,-1){0.15}}
\multiput(5.44,22.52)(0.11,-0.15){2}{\line(0,-1){0.15}}
\multiput(5.66,22.22)(0.11,-0.15){2}{\line(0,-1){0.15}}
\multiput(5.88,21.92)(0.11,-0.15){2}{\line(0,-1){0.15}}
\multiput(6.11,21.63)(0.12,-0.15){2}{\line(0,-1){0.15}}
\multiput(6.34,21.33)(0.12,-0.15){2}{\line(0,-1){0.15}}
\multiput(6.58,21.04)(0.12,-0.15){2}{\line(0,-1){0.15}}
\multiput(6.83,20.75)(0.13,-0.14){2}{\line(0,-1){0.14}}
\multiput(7.08,20.46)(0.13,-0.14){2}{\line(0,-1){0.14}}
\multiput(7.34,20.17)(0.13,-0.14){2}{\line(0,-1){0.14}}
\multiput(7.6,19.89)(0.14,-0.14){2}{\line(0,-1){0.14}}
\multiput(7.87,19.61)(0.14,-0.14){2}{\line(0,-1){0.14}}
\multiput(8.15,19.33)(0.14,-0.14){2}{\line(1,0){0.14}}
\multiput(8.43,19.06)(0.14,-0.14){2}{\line(1,0){0.14}}
\multiput(8.72,18.78)(0.15,-0.13){2}{\line(1,0){0.15}}
\multiput(9.02,18.51)(0.15,-0.13){2}{\line(1,0){0.15}}
\multiput(9.32,18.25)(0.15,-0.13){2}{\line(1,0){0.15}}
\multiput(9.62,17.98)(0.16,-0.13){2}{\line(1,0){0.16}}
\multiput(9.93,17.72)(0.16,-0.13){2}{\line(1,0){0.16}}
\multiput(10.25,17.46)(0.16,-0.13){2}{\line(1,0){0.16}}
\multiput(10.57,17.21)(0.16,-0.13){2}{\line(1,0){0.16}}
\multiput(10.9,16.96)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(11.23,16.71)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(11.57,16.46)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(11.91,16.22)(0.17,-0.12){2}{\line(1,0){0.17}}
\multiput(12.26,15.98)(0.18,-0.12){2}{\line(1,0){0.18}}
\multiput(12.62,15.75)(0.18,-0.12){2}{\line(1,0){0.18}}
\multiput(12.98,15.51)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(13.34,15.29)(0.18,-0.11){2}{\line(1,0){0.18}}
\multiput(13.71,15.06)(0.19,-0.11){2}{\line(1,0){0.19}}
\multiput(14.08,14.84)(0.19,-0.11){2}{\line(1,0){0.19}}
\multiput(14.46,14.62)(0.19,-0.11){2}{\line(1,0){0.19}}
\multiput(14.84,14.41)(0.19,-0.11){2}{\line(1,0){0.19}}
\multiput(15.23,14.2)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(15.62,13.99)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(16.01,13.79)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(16.41,13.59)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(16.82,13.39)(0.2,-0.1){2}{\line(1,0){0.2}}
\multiput(17.23,13.2)(0.21,-0.09){2}{\line(1,0){0.21}}
\multiput(17.64,13.01)(0.21,-0.09){2}{\line(1,0){0.21}}
\multiput(18.06,12.83)(0.42,-0.18){1}{\line(1,0){0.42}}
\multiput(18.48,12.65)(0.42,-0.18){1}{\line(1,0){0.42}}
\multiput(18.9,12.47)(0.43,-0.17){1}{\line(1,0){0.43}}
\multiput(19.33,12.3)(0.43,-0.17){1}{\line(1,0){0.43}}
\multiput(19.76,12.13)(0.43,-0.16){1}{\line(1,0){0.43}}
\multiput(20.19,11.97)(0.44,-0.16){1}{\line(1,0){0.44}}
\multiput(20.63,11.81)(0.44,-0.15){1}{\line(1,0){0.44}}
\multiput(21.07,11.66)(0.44,-0.15){1}{\line(1,0){0.44}}
\multiput(21.52,11.5)(0.45,-0.15){1}{\line(1,0){0.45}}
\multiput(21.97,11.36)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(22.42,11.22)(0.45,-0.14){1}{\line(1,0){0.45}}
\multiput(22.87,11.08)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(23.33,10.94)(0.46,-0.13){1}{\line(1,0){0.46}}
\multiput(23.79,10.82)(0.46,-0.12){1}{\line(1,0){0.46}}
\multiput(24.25,10.69)(0.47,-0.12){1}{\line(1,0){0.47}}
\multiput(24.72,10.57)(0.47,-0.12){1}{\line(1,0){0.47}}
\multiput(25.19,10.46)(0.47,-0.11){1}{\line(1,0){0.47}}
\multiput(25.66,10.34)(0.47,-0.11){1}{\line(1,0){0.47}}
\multiput(26.13,10.24)(0.47,-0.1){1}{\line(1,0){0.47}}
\multiput(26.6,10.14)(0.48,-0.1){1}{\line(1,0){0.48}}
\multiput(27.08,10.04)(0.48,-0.09){1}{\line(1,0){0.48}}
\multiput(27.56,9.94)(0.48,-0.09){1}{\line(1,0){0.48}}
\multiput(28.04,9.86)(0.48,-0.08){1}{\line(1,0){0.48}}
\multiput(28.52,9.77)(0.48,-0.08){1}{\line(1,0){0.48}}
\multiput(29.01,9.69)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(29.49,9.62)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(29.98,9.55)(0.49,-0.07){1}{\line(1,0){0.49}}
\multiput(30.47,9.48)(0.49,-0.06){1}{\line(1,0){0.49}}
\multiput(30.96,9.42)(0.49,-0.06){1}{\line(1,0){0.49}}
\multiput(31.45,9.37)(0.49,-0.05){1}{\line(1,0){0.49}}
\multiput(31.94,9.32)(0.49,-0.05){1}{\line(1,0){0.49}}
\multiput(32.44,9.27)(0.49,-0.04){1}{\line(1,0){0.49}}
\multiput(32.93,9.23)(0.5,-0.04){1}{\line(1,0){0.5}}
\multiput(33.43,9.19)(0.5,-0.03){1}{\line(1,0){0.5}}
\multiput(33.92,9.16)(0.5,-0.03){1}{\line(1,0){0.5}}
\multiput(34.42,9.13)(0.5,-0.02){1}{\line(1,0){0.5}}
\multiput(34.92,9.11)(0.5,-0.02){1}{\line(1,0){0.5}}
\multiput(35.42,9.09)(0.5,-0.01){1}{\line(1,0){0.5}}
\multiput(35.91,9.08)(0.5,-0.01){1}{\line(1,0){0.5}}
\multiput(36.41,9.07)(0.5,-0){1}{\line(1,0){0.5}}
\multiput(36.91,9.07)(0.5,0){1}{\line(1,0){0.5}}
\multiput(37.41,9.07)(0.5,0.01){1}{\line(1,0){0.5}}

\end{picture}
\end{center}

The $\leq$ symbol is typically used to denote the subtype relationship. Thus, Staff $\leq$ Person, RA $\leq$ Student and so on. Sometimes, the symbol $\lt:$ is also used; in this class, we will stick to the former. We will now study some properties of the subtyping relationship and describe it more formally.

\section{Basic Subtyping Rules}

Formally we notate the subtype relationship as: $\tau_1 \leq \tau_2$. In set notation, this is equivalent to $\SB{\tau_1} \subseteq \SB{\tau_2}$. The informal interpretation of this subtype relation is that anything of type $\tau_1$ can be used in a context that expects something of type $\tau_2$. This is known as the _subsumption_ rule:

\[
\infer{\Gamma\vdash e:\tau'}{\Gamma\vdash e:\tau~~\tau \leq \tau'}
\]

\noindent There are two further general rules covering the subtyping relationship:

\medskip
\[
\infer[~~~~~\textrm{(Reflexivity)}]{\tau \leq \tau}{}
\]
\[
\infer[~~~~~\textrm{(Transitivity)}]{\tau_1 \leq \tau_3}{\tau_1 \leq \tau_2~~\tau_2 \leq \tau_3}
\]
\medskip


Since the $\leq$ relation is both reflexive and transitive, it is a pre-order. In most cases, anti-symmetry holds as well, making the subtyping relation a partial order, but this is not always true. The subtype relationships governing the 1 and 0 types are interesting:
\begin{itemize}
    \item 1 type: Being the top type, any type is a subtype of 1. If a context expects something of type 1, then it can accept any type i.e., $\forall \tau.~\tau \leq 1$. In Java, this is equivalent to the Object type.
    \item 0 type: Being the bottom type, any type is a supertype of 0. Thus, the 0 type can be accepted by any context in lieu of any other type i.e., $\forall \tau.~0 \leq \tau$. In Java, this is equivalent to the Null type.
\end{itemize}
The type hierarchy thus looks like the following:

\begin{center}
\unitlength 1mm
\begin{picture}(43.42,39.74)(0,0)
\put(20,39.74){\makebox(0,0)[cc]{1}}

\put(43.42,19.21){\makebox(0,0)[cc]{}}

\put(19.47,9.74){\makebox(0,0)[cc]{0}}

\linethickness{0.3mm}
\multiput(8.95,25.66)(0.12,0.13){93}{\line(0,1){0.13}}
\linethickness{0.3mm}
\multiput(20,25.26)(0.13,5.99){2}{\line(0,1){5.99}}
\linethickness{0.3mm}
\multiput(20,37.5)(0.12,-0.13){92}{\line(0,-1){0.13}}
\linethickness{0.3mm}
\multiput(8.82,22.24)(0.12,-0.12){88}{\line(0,-1){0.12}}
\linethickness{0.3mm}
\put(19.47,11.71){\line(0,1){10.79}}
\linethickness{0.3mm}
\multiput(19.87,11.97)(0.13,0.12){81}{\line(1,0){0.13}}
\put(19.47,24.34){\makebox(0,0)[cc]{...}}

\put(19.47,4.47){\makebox(0,0)[cc]{Figure 3 - Type Hierarchy for Typed Lambda Calculus}}

\end{picture}
\end{center}

\section{Subtyping Rules for Product and Sum Types}

The subtyping rules for product and sum types are quite intuitive:

\begin{center}
\begin{tabular}{cc}
\infer{\tau_1 * \tau_2 \leq \tau_1' * \tau_2'}{\tau_1 \leq \tau_1'~~\tau_2 \leq \tau_2'} &
\infer{\tau_1 + \tau_2 \leq \tau_1' + \tau_2'}{\tau_1 \leq \tau_1'~~\tau_2 \leq \tau_2'}
\end{tabular}
\end{center}

\section{Subtyping Rules for Records}

Recall our extensions to the grammar of $e$ and $\tau$ for adding support for records types:

\begin{eqnarray*}
e & ::= & \ldots \bnf \{x_1 = e_1, \ldots, x_n = e_n\} \bnf e.x \\
\tau & ::= & \ldots \bnf \{x_1:\tau_1, \ldots, x_n:\tau_n\}
\end{eqnarray*}

\noindent We also had the following rule added to the small-step semantics:

\[
\infer{\{x_1=v_1, \ldots, x_n=v_n\}.x_i \stepsone v_i}{}
\]

\noindent and the following typing rules:

\medskip
\[
\infer{\Gamma \vdash \{x_1=e_1, \ldots, x_n=e_n\}:\{x_1:\tau_1, \ldots, x_n:\tau_n\}}{\Gamma \vdash e_i:\tau_i~~(\forall i:1 \ldots n)}
\]
\[
\infer{\Gamma \vdash e.x_i:\tau_i}{\Gamma \vdash e:\{x_1:\tau_1, \ldots, x_i:\tau_i, \ldots, x_n:\tau_n\}} 
\]
\medskip

\noindent There are two types of subtyping rules for records:
\begin{itemize}
    \item Depth subtyping - this defines the subtyping relation between two records that have the same number of fields
    \[
    \infer {\{x_1:\tau_1, \ldots, x_n:\tau_n\} \leq \{x_1:\tau_1', \ldots, x_n:\tau_n'\}}{\tau_1 \leq \tau_1'~~\tau_2 \leq \tau_2'~~\ldots~~\tau_n \leq \tau_n'}
    \]
    \item Width subtyping - this defines the subtyping relation between two records that have different number of fields
    \[
    \infer [~~~~~\textrm{(the}\leq\textrm{in the premise is an integer comparison)}] {\{x_1:\tau_1, \ldots, x_n:\tau_n\} \leq \{x_1:\tau_1, \ldots, x_m:\tau_m\}}{m \leq n}
    \]
    Observe that in this case, the subtype has more components than the supertype - this is analogous to the relationship between a subclass and a superclass where the former has more components than the latter.
\end{itemize}

\noindent The depth and width subtyping rules for records can in fact be combined to yield a single equivalent rule:
\[
\infer {\{x_1:\tau_1, \ldots, x_n:\tau_n\} \leq \{x_1:\tau_1', \ldots, x_m:\tau_m'\}}{m \leq n~~~~\tau_i \leq \tau_i'~~(\forall i:1 \ldots n)}
\]

Records can be viewed as tagged product types of arbitrary length; the analogous extension for sum types are variants. The depth subtyping rule for variants is the same as that given above for records (replacing the records with variants). The width subtyping rule is however different and we will see why this is so. Suppose we used a width subtyping rule of the same form as given above. Recall that if $\tau_1 \leq \tau_2$, then this implies that anything of type $\tau_1$ can be used in a context expecting something of type $\tau_2$. Suppose we now had a case statement that did pattern matching on something of type $\tau_2$; our subtyping relation says that we can pass in something of type $\tau_1$ to this case statement and still have it work. However, since $\tau_2$ has fewer components than $\tau_1$ and the case statement was originally written for an object of type $\tau_2$, there will be values of $\tau_1$ for which no corresponding pattern match exists. Thus, for variants, the direction of the $\leq$ symbol in the premise of the width subtyping rule given above needs to be reversed i.e., for variants, the subtype will have fewer components than the supertype.

\section{Function Subtyping}

Based on the subtyping rules we have encountered up to this point, our first impulse would be to write down something of the following form to describe the subtyping relation for functions:

\[
\infer{\tau_1 \rightarrow \tau_2 \leq \tau_1' \rightarrow \tau_2'}{\tau_1 \leq \tau_1'~~~~\tau_2 \leq \tau_2'}
\]

\noindent However, this is incorrect. To see why, consider the following code snippet:

\medskip
\noindent
"let"$~f:\tau_1 \rightarrow \tau_2 = f_1~$"in"\\
\indent "let"$~f':\tau_1' \rightarrow \tau_2' = f_2~$"in"\\
\indent \indent "let"$~t:\tau_1' = v_1~$"in"\\
\indent \indent \indent $f'(t')$
\bigskip

Now, in the example above since since $f \leq f'$, we should be able to use $f$ where $f'$ was expected. Therefore we should be able to call $f(t')$. But $f$ expects input of type $\tau_1$ and gets instead input of type $\tau'_1$, so we should be able to use $\tau'_1$ where $\tau_1$ is expected, which in fact implies that we should have $\tau_1' \leq \tau_1$ instead of $\tau_1 \leq \tau_1'$ as given.

Actually, the incorrect typing rule given above was implemented in the language Eiffel and runtime type-checking had to be added later to make the language type safe. Thus, the correct subtyping rule for functions is:
%In order to make this rule correct, we have to change the right hand side of the premise from covariant to contravariant. That is we need to change $\tau_1 \leq \tau'_1$

\[
\infer{\tau_1 \rightarrow \tau_2 \leq \tau_1' \rightarrow \tau_2'}{\tau_1' \leq \tau_1~~~~\tau_2 \leq \tau_2'}
\]

All the subtyping rules we had seen thus far were _covariant_ i.e., the subtyping relation related subexpressions in the premise in the same direction as in the conclusion. The function subtyping rule is our first _contravariant_ rule - one where the direction of the subtyping relation is reversed in the premise.

\section{Subtyping Rules for References}

Here are the extensions to the grammar of $e$ and $\tau$ for adding support for references:

\begin{eqnarray*}
e & ::= & \ldots \bnf "ref"~e \bnf !e \bnf e_1 := e_2 \\
\tau & ::= & \ldots \bnf \tau~"ref"
\end{eqnarray*}

\noindent where we add the following typing rules:

\medskip
\begin{center}
\begin{tabular}{ccccc}
\medskip
\infer{\Gamma \vdash "ref"~e:\tau~"ref"}{\Gamma \vdash e:\tau}
& &
\infer{\Gamma \vdash~!e:\tau}{\Gamma \vdash e:\tau~"ref"}
& &
\infer{\Gamma \vdash e_1:=e_2~:~1}{\Gamma \vdash e_1:\tau~"ref"~~~~\Gamma \vdash e_2:\tau}
\end{tabular}
\end{center}
\medskip

As for the subtyping rule, once again, our first impulse would be to write down something of the following form:

\[
\infer{\tau_1~"ref" \leq \tau_2~"ref"} {\tau_1 \leq \tau_2}
\]

\noindent However, this is incorrect. To see why, consider the following example:

\medskip
\noindent
"let" $x:Square~"ref" = "ref"~square$ "in" \\
\indent "let" $y:Shape~"ref"=x$ "in" \\
\indent \indent $(y:=circle;~(!x).side)$
\bigskip

Even though this code type-checks with the given subtyping rule for reference types, it will cause a runtime error since in the last line $x$ does not refer to a square anymore. This problem actually exists in Java when using arrays as the designers incorrectly used the rule given above. In order to overcome this problem we must use the correct rule below:

\[
\infer{\tau_1~"ref" \leq \tau_2~"ref"} {\tau_1 \leq \tau_2~~\tau_2 \leq \tau_1}
\]

\noindent which equivalently can be written as:

\[
\infer{\tau~"ref" \leq \tau~"ref"} {}
\]

\noindent The subtyping rule for references is thus both covariant and contravariant.

\end{document}
