<?xml version="1.0" encoding="UTF-8"?>
<ZML xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://nt-appn.comp.nus.edu.sg/fm/zml/zml.xsd">
	<comment>This is a simplified version of the BirthdayBook example in Z represented in Z Markup Language.</comment>
	<basicTypeDef>
		<name>NAME</name>
		<name>DATE</name>
	</basicTypeDef>
	<schemaDef>
		<name>BirthdayBook</name>
		<declaration>
			<variable>known</variable>
			<dataType>
				<unarySym>pset</unarySym>
				<type>NAME</type>
			</dataType>
		</declaration>
		<declaration>
			<variable>birthday</variable>
			<dataType>
				<dataType>
					<type>NAME</type>
				</dataType>
				<binarySym>pfun</binarySym>
				<type>DATE</type>
			</dataType>
		</declaration>
		<predicate>
			<expression>
				<varName>known</varName>
			</expression>
			<relationSym>=</relationSym>
			<expression>
				<prefixExpr>dom</prefixExpr>
				<expression>
					<varName>birthday</varName>
				</expression>
			</expression>
		</predicate>
	</schemaDef>
	<schemaDef>
		<name>InitBirthdayBook</name>
		<incluList>BirthdayBook</incluList>
		<predicate>
			<expression>
				<varName>known</varName>
			</expression>
			<relationSym>=</relationSym>
			<expression>
				<singleton>emptyset</singleton>
			</expression>
		</predicate>
	</schemaDef>
	<schemaDef>
		<name>AddBirthday</name>
		<deltaList>BirthdayBook</deltaList>
		<declaration>
			<variable>name?</variable>
			<dataType>
				<type>NAME</type>
			</dataType>
		</declaration>
		<declaration>
			<variable>date?</variable>
			<dataType>
				<type>DATE</type>
			</dataType>
		</declaration>
		<predicate>
			<expression>
				<varName>name?</varName>
			</expression>
			<relationSym>nem</relationSym>
			<expression>
				<varName>known</varName>
			</expression>
		</predicate>
		<predicate>
			<expression>
				<expression>
					<varName>birthday</varName>
				</expression>
				<postfixExpr>'</postfixExpr>
			</expression>
			<relationSym>=</relationSym>
			<expression>
				<expression>
					<varName>birthday</varName>
				</expression>
				<exprConnSym>uni</exprConnSym>
				<expression>
					<left>{</left>
					<expression>
						<left>(</left>
						<expression>
							<expression>
								<varName>name?</varName>
							</expression>
							<exprConnSym>,</exprConnSym>
							<expression>
								<varName>date?</varName>
							</expression>
						</expression>
						<right>)</right>
					</expression>
					<right>}</right>
				</expression>
			</expression>
		</predicate>
	</schemaDef>
	<schemaDef>
		<name>RemoveBirthday</name>
		<deltaList>BirthdayBook</deltaList>
		<declaration>
			<variable>name?!</variable>
			<dataType>
				<type>NAME</type>
			</dataType>
		</declaration>
		<predicate>
			<expression>
				<varName>name?</varName>
			</expression>
			<relationSym>mem</relationSym>
			<expression>
				<varName>known</varName>
			</expression>
		</predicate>
		<predicate>
			<expression>
				<expression>
					<varName>birthday</varName>
				</expression>
				<postfixExpr>'</postfixExpr>
			</expression>
			<relationSym>=</relationSym>
			<expression>
				<expression>
					<left>{</left>
					<expression>
						<varName>name?</varName>
					</expression>
					<right>}</right>
				</expression>
				<exprConnSym>dsub</exprConnSym>
				<expression>
					<varName>birthday</varName>
				</expression>
			</expression>
		</predicate>
	</schemaDef>
	<schemaDef>
		<name>FindBirthday</name>
		<xiList>BirthdayBook</xiList>
		<declaration>
			<variable>name?</variable>
			<dataType>
				<type>NAME</type>
			</dataType>
		</declaration>
		<declaration>
			<variable>date!</variable>
			<dataType>
				<type>DATE</type>
			</dataType>
		</declaration>
		<predicate>
			<expression>
				<varName>name?</varName>
			</expression>
			<relationSym>mem</relationSym>
			<expression>
				<varName>known</varName>
			</expression>
		</predicate>
		<predicate>
			<expression>
				<left>(</left>
						<expression>
							<expression>
								<varName>name?</varName>
							</expression>
							<exprConnSym>,</exprConnSym>
							<expression>
								<varName>date!</varName>
							</expression>
						</expression>
						<right>)</right>
			</expression>
			<relationSym>mem</relationSym>
			<expression>
				<varName>birthday</varName>
			</expression>
		</predicate>
	</schemaDef>
</ZML>
