Moved LAAI3 in year1

This commit is contained in:
2024-04-15 20:02:05 +02:00
parent e66b724d8c
commit 60fdee47f4
15 changed files with 1 additions and 1 deletions

View File

@ -0,0 +1,15 @@
{
"name": "Languages and Algorithms for Artificial Intelligence",
"year": 1,
"semester": 3,
"pdfs": [
{
"name": "LAAI module 2",
"path": "module2/laai2.pdf"
},
{
"name": "LAAI module 3",
"path": "module3/laai3.pdf"
}
]
}

View File

@ -0,0 +1 @@
../../../ainotes.cls

View File

@ -0,0 +1,74 @@
<mxfile host="Electron" modified="2024-04-15T14:25:14.544Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="_xosucxMC8A2ODMuTiah" version="23.1.5" type="device">
<diagram name="Pagina-1" id="2E39NDmfMYuv_2c8OxZy">
<mxGraphModel dx="683" dy="398" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="I8w5w0JpwTpMXvzJh7J8-1" value="Training data" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontFamily=Computer modern;" parent="1" vertex="1">
<mxGeometry x="340" y="390" width="94" height="60" as="geometry" />
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-2" value="f&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;sub style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 18px;&quot; face=&quot;jsMath-cmsy10&quot;&gt;A&lt;/font&gt;&lt;/sub&gt;&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;fontSize=24;fontFamily=Computer modern;fontStyle=2" parent="1" vertex="1">
<mxGeometry x="460" y="402.5" width="80" height="35" as="geometry" />
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-3" value="h" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;fontSize=24;fontFamily=Computer modern;fontStyle=2" parent="1" vertex="1">
<mxGeometry x="570" y="402.5" width="80" height="35" as="geometry" />
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-4" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="I8w5w0JpwTpMXvzJh7J8-1" target="I8w5w0JpwTpMXvzJh7J8-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="520" y="450" as="sourcePoint" />
<mxPoint x="570" y="400" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-5" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="I8w5w0JpwTpMXvzJh7J8-2" target="I8w5w0JpwTpMXvzJh7J8-3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="424" y="430" as="sourcePoint" />
<mxPoint x="470" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-6" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="I8w5w0JpwTpMXvzJh7J8-8" target="I8w5w0JpwTpMXvzJh7J8-3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="610" y="370" as="sourcePoint" />
<mxPoint x="580" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-8" value="Data" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontFamily=Computer modern;" parent="1" vertex="1">
<mxGeometry x="560" y="340" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="I8w5w0JpwTpMXvzJh7J8-3" target="I8w5w0JpwTpMXvzJh7J8-10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="370" as="sourcePoint" />
<mxPoint x="610" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-10" value="Class" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontFamily=Computer modern;" parent="1" vertex="1">
<mxGeometry x="560" y="470" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-15" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="I8w5w0JpwTpMXvzJh7J8-16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="550" y="460" as="sourcePoint" />
<mxPoint x="550" y="420" as="targetPoint" />
<Array as="points">
<mxPoint x="550" y="355" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-16" value="Confidence" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontFamily=Computer modern;" parent="1" vertex="1">
<mxGeometry x="426" y="340" width="114" height="30" as="geometry" />
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-17" value="Accuracy" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontFamily=Computer modern;" parent="1" vertex="1">
<mxGeometry x="434" y="460" width="114" height="30" as="geometry" />
</mxCell>
<mxCell id="I8w5w0JpwTpMXvzJh7J8-18" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="I8w5w0JpwTpMXvzJh7J8-17" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="520" y="460" as="sourcePoint" />
<mxPoint x="610" y="450" as="targetPoint" />
<Array as="points">
<mxPoint x="557" y="475" />
<mxPoint x="557" y="450" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -0,0 +1,601 @@
<mxfile host="Electron" modified="2024-04-15T16:44:44.953Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="uCS3114eKACx5m1TV_Aq" version="23.1.5" type="device">
<diagram name="Pagina-1" id="2E39NDmfMYuv_2c8OxZy">
<mxGraphModel dx="276" dy="161" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="5KzQJG8aGWldB78MasGk-3" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="330" y="370" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-131" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="330" y="520" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-1" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=1;strokeColor=#969696;dashed=1;dashPattern=1 4;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="320" y="450" as="sourcePoint" />
<mxPoint x="320" y="340" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-2" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=1;strokeColor=#969696;dashed=1;dashPattern=1 4;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="310" y="440" as="sourcePoint" />
<mxPoint x="440" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-5" value="T" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;" vertex="1" parent="1">
<mxGeometry x="410" y="360" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-7" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 4;strokeWidth=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#969696;" edge="1" parent="1" source="5KzQJG8aGWldB78MasGk-3" target="5KzQJG8aGWldB78MasGk-3">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="330" y="420" as="sourcePoint" />
<mxPoint x="390" y="380" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-8" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 4;strokeWidth=1;rounded=0;exitX=1.006;exitY=0.329;exitDx=0;exitDy=0;exitPerimeter=0;strokeColor=#969696;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="407.48" y="389.74" as="sourcePoint" />
<mxPoint x="330" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-9" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 4;strokeWidth=1;rounded=0;exitX=1.006;exitY=0.329;exitDx=0;exitDy=0;exitPerimeter=0;strokeColor=#969696;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="408" y="410" as="sourcePoint" />
<mxPoint x="328" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-10" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 4;strokeWidth=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#969696;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="350" y="430" as="sourcePoint" />
<mxPoint x="350" y="370" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-22" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="339" y="390" as="sourcePoint" />
<mxPoint x="331" y="383" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-23" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="355" y="390" as="sourcePoint" />
<mxPoint x="334" y="371" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-25" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="376" y="389" as="sourcePoint" />
<mxPoint x="355" y="370" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-26" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="387" y="389" as="sourcePoint" />
<mxPoint x="366" y="370" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-27" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="406" y="389" as="sourcePoint" />
<mxPoint x="385" y="370" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-28" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="408" y="377" as="sourcePoint" />
<mxPoint x="400" y="370" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-36" value="E&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;sub&gt;4&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;fontColor=#9673A6;" vertex="1" parent="1">
<mxGeometry x="355" y="432" width="30" height="10" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-37" value="E&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;sub&gt;1&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;fontColor=#B85450;" vertex="1" parent="1">
<mxGeometry x="411" y="390" width="10" height="20" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-38" value="E&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;sub&gt;2&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;fontColor=#6C8EBF;" vertex="1" parent="1">
<mxGeometry x="355" y="359" width="30" height="10" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-39" value="E&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;sub&gt;3&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;fontColor=#82B366;" vertex="1" parent="1">
<mxGeometry x="316" y="390" width="14" height="20" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-48" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="365" y="389" as="sourcePoint" />
<mxPoint x="344" y="370" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-50" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="409" y="386" as="sourcePoint" />
<mxPoint x="394" y="371" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-51" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="347" y="389" as="sourcePoint" />
<mxPoint x="331" y="376" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-63" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="338" y="430" as="sourcePoint" />
<mxPoint x="330" y="423" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-64" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="354" y="430" as="sourcePoint" />
<mxPoint x="333" y="411" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-65" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="375" y="429" as="sourcePoint" />
<mxPoint x="354" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-66" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="386" y="429" as="sourcePoint" />
<mxPoint x="365" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-67" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="405" y="429" as="sourcePoint" />
<mxPoint x="384" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-68" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="407" y="417" as="sourcePoint" />
<mxPoint x="399" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-69" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="364" y="429" as="sourcePoint" />
<mxPoint x="343" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-70" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="397" y="429" as="sourcePoint" />
<mxPoint x="376" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-71" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="408" y="426" as="sourcePoint" />
<mxPoint x="393" y="411" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-72" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="346" y="429" as="sourcePoint" />
<mxPoint x="330" y="416" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-4" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="350" y="390" width="40" height="20" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-6" value="R" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;" vertex="1" parent="1">
<mxGeometry x="355" y="390" width="30" height="20" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-49" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="398" y="389" as="sourcePoint" />
<mxPoint x="377" y="370" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-76" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="390" y="370" width="21" height="60" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-11" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="10" as="sourcePoint" />
<mxPoint x="14" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-12" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="36.5" as="sourcePoint" />
<mxPoint x="21" y="23.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-13" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="22" as="sourcePoint" />
<mxPoint x="20" y="10" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-14" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="53" as="sourcePoint" />
<mxPoint x="20" y="40" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-15" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="11" y="60" as="sourcePoint" />
<mxPoint x="20" y="54" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-44" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="60" as="sourcePoint" />
<mxPoint x="20" y="47" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-45" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="45" as="sourcePoint" />
<mxPoint x="20" y="32" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-46" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="29" as="sourcePoint" />
<mxPoint x="21" y="16" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-47" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-76">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="15" as="sourcePoint" />
<mxPoint x="20" y="3" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-77" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="330" y="370" width="21" height="60" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-17" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=0.927;entryY=0.005;entryDx=0;entryDy=0;entryPerimeter=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="10" as="sourcePoint" />
<mxPoint x="14" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-18" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="36.5" as="sourcePoint" />
<mxPoint x="21" y="23.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-19" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="22" as="sourcePoint" />
<mxPoint x="20" y="10" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-20" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="11" y="60" as="sourcePoint" />
<mxPoint x="20" y="54" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-21" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="53" as="sourcePoint" />
<mxPoint x="20" y="40" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-40" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="16" as="sourcePoint" />
<mxPoint x="19" y="4" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-41" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="29" as="sourcePoint" />
<mxPoint x="21" y="16" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-42" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="45" as="sourcePoint" />
<mxPoint x="21" y="32" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-43" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-77">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1" y="59" as="sourcePoint" />
<mxPoint x="21" y="46" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-78" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=1;strokeColor=#969696;dashed=1;dashPattern=1 4;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="320" y="600" as="sourcePoint" />
<mxPoint x="320" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-79" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=1;strokeColor=#969696;dashed=1;dashPattern=1 4;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="310" y="590" as="sourcePoint" />
<mxPoint x="440" y="590" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-80" value="T" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;" vertex="1" parent="1">
<mxGeometry x="410" y="510" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-82" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 4;strokeWidth=1;rounded=0;exitX=1.006;exitY=0.329;exitDx=0;exitDy=0;exitPerimeter=0;strokeColor=#969696;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="407.48" y="545" as="sourcePoint" />
<mxPoint x="330" y="545.26" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-83" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 4;strokeWidth=1;rounded=0;exitX=1.006;exitY=0.329;exitDx=0;exitDy=0;exitPerimeter=0;strokeColor=#969696;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="410" y="556" as="sourcePoint" />
<mxPoint x="330" y="556" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-84" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 4;strokeWidth=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#969696;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="356" y="580" as="sourcePoint" />
<mxPoint x="356" y="520" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-91" value="F&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;sub&gt;4&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;fontColor=#9673A6;" vertex="1" parent="1">
<mxGeometry x="355" y="582" width="30" height="10" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-92" value="F&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;sub&gt;1&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;fontColor=#B85450;" vertex="1" parent="1">
<mxGeometry x="411" y="540" width="10" height="20" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-93" value="F&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;sub&gt;2&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;fontColor=#6C8EBF;" vertex="1" parent="1">
<mxGeometry x="355" y="509" width="30" height="10" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-94" value="F&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;sub&gt;3&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=2;fontFamily=Computer modern;fontColor=#82B366;" vertex="1" parent="1">
<mxGeometry x="316" y="540" width="14" height="20" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-98" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="338" y="580" as="sourcePoint" />
<mxPoint x="330" y="573" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-111" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="385" y="520" width="24" height="60" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-112" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="10" as="sourcePoint" />
<mxPoint x="16.36111111111111" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-113" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1686507936507937" y="36.5" as="sourcePoint" />
<mxPoint x="24.541666666666664" y="23.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-114" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1686507936507937" y="22" as="sourcePoint" />
<mxPoint x="23.373015873015873" y="10" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-115" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="53" as="sourcePoint" />
<mxPoint x="23.373015873015873" y="40" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-116" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="12.855158730158731" y="60" as="sourcePoint" />
<mxPoint x="23.373015873015873" y="54" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-117" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="60" as="sourcePoint" />
<mxPoint x="23.373015873015873" y="47" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-118" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="45" as="sourcePoint" />
<mxPoint x="23.373015873015873" y="32" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-119" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1686507936507937" y="29" as="sourcePoint" />
<mxPoint x="24.541666666666664" y="16" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-120" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="5KzQJG8aGWldB78MasGk-111">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1686507936507937" y="15" as="sourcePoint" />
<mxPoint x="23.373015873015873" y="3" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-121" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="330" y="520" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-122" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=0.927;entryY=0.005;entryDx=0;entryDy=0;entryPerimeter=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="10" as="sourcePoint" />
<mxPoint x="16.153846153846153" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-123" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1538461538461537" y="36.5" as="sourcePoint" />
<mxPoint x="24.23076923076923" y="23.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-124" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1538461538461537" y="22" as="sourcePoint" />
<mxPoint x="23.076923076923073" y="10" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-125" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="12.692307692307692" y="60" as="sourcePoint" />
<mxPoint x="23.076923076923073" y="54" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-126" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="53" as="sourcePoint" />
<mxPoint x="23.076923076923073" y="40" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-127" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="16" as="sourcePoint" />
<mxPoint x="21.92307692307692" y="4" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-128" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1538461538461537" y="29" as="sourcePoint" />
<mxPoint x="24.23076923076923" y="16" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-129" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1538461538461537" y="45" as="sourcePoint" />
<mxPoint x="24.23076923076923" y="32" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-130" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="5KzQJG8aGWldB78MasGk-121">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1.1538461538461537" y="59" as="sourcePoint" />
<mxPoint x="24.23076923076923" y="46" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-142" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 4;strokeWidth=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#969696;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="384.89" y="580" as="sourcePoint" />
<mxPoint x="384.89" y="520" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-144" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="330" y="556" width="78" height="24" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-99" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="24" y="20" as="sourcePoint" />
<mxPoint x="3" y="1" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-100" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="45" y="19" as="sourcePoint" />
<mxPoint x="24" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-101" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="56" y="19" as="sourcePoint" />
<mxPoint x="35" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-102" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="75" y="19" as="sourcePoint" />
<mxPoint x="54" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-103" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="77" y="7" as="sourcePoint" />
<mxPoint x="69" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-104" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="34" y="19" as="sourcePoint" />
<mxPoint x="13" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-105" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="67" y="19" as="sourcePoint" />
<mxPoint x="46" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-106" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="78" y="16" as="sourcePoint" />
<mxPoint x="63" y="1" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-107" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-144">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="16" y="19" as="sourcePoint" />
<mxPoint y="6" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-143" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="331" y="520" width="78" height="40" as="geometry" />
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-85" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="8" y="24" as="sourcePoint" />
<mxPoint y="15.6" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-86" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="24" y="24" as="sourcePoint" />
<mxPoint x="3" y="1.2" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-87" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="45" y="22.8" as="sourcePoint" />
<mxPoint x="24" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-88" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="56" y="22.8" as="sourcePoint" />
<mxPoint x="35" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-89" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="75" y="22.8" as="sourcePoint" />
<mxPoint x="54" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-90" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="77" y="8.4" as="sourcePoint" />
<mxPoint x="69" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-95" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="34" y="22.8" as="sourcePoint" />
<mxPoint x="13" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-96" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="78" y="19.2" as="sourcePoint" />
<mxPoint x="63" y="1.2" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-97" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="16" y="22.8" as="sourcePoint" />
<mxPoint y="7.199999999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-110" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;dashPattern=8 8;" edge="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="67" y="22.8" as="sourcePoint" />
<mxPoint x="46" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5KzQJG8aGWldB78MasGk-145" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;dashed=1;dashPattern=1 1;" vertex="1" parent="5KzQJG8aGWldB78MasGk-143">
<mxGeometry x="19" y="20" width="40" height="20" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -0,0 +1,27 @@
\documentclass[11pt]{ainotes}
\usepackage{xspace}
\title{Languages and Algorithms for\\Artificial Intelligence\\(Module 3)}
\date{2023 -- 2024}
\def\lastupdate{{PLACEHOLDER-LAST-UPDATE}}
\newcommand{\enc}[1]{{\llcorner{#1}\lrcorner}}
\newcommand{\tapestart}[0]{\triangleright}
\newcommand{\tapeblank}[0]{\square}
\def\P{\textbf{P}\xspace}
\def\DTIME{\textbf{DTIME}\xspace}
\def\FP{\textbf{FP}\xspace}
\def\FDTIME{\textbf{FDTIME}\xspace}
\def\EXP{\textbf{EXP}\xspace}
\def\FEXP{\textbf{FEXP}\xspace}
\def\NP{\textbf{NP}\xspace}
\def\NDTIME{\textbf{NDTIME}\xspace}
\begin{document}
\makenotesfront
\input{sections/_intro.tex}
\input{sections/_turing.tex}
\input{sections/_complexity.tex}
\input{sections/_computational_learning.tex}
\end{document}

View File

@ -0,0 +1,276 @@
\chapter{Complexity}
\begin{description}
\item[Complexity class] \marginnote{Complexity class}
Set of tasks that can be computed within some fixed resource bounds.
\end{description}
\section{Polynomial time}
\begin{description}
\item[Deterministic time (\DTIME)] \marginnote{Deterministic time (\DTIME)}
Let $T: \mathbb{N} \rightarrow \mathbb{N}$ and $\mathcal{L}$ be a language.
$\mathcal{L}$ is in $\DTIME(T(n))$ iff
there exists a TM that decides $\mathcal{L}$ in time $O(T(n))$.
\item[Polynomial time (\P)] \marginnote{Polynomial time (\P)}
The class \P contains all the tasks computable in polynomial time:
\[ \P = \bigcup_{c \geq 1} \DTIME(n^c) \]
\begin{remark}
\P is closed to various operations on programs (e.g. composition of programs)
\end{remark}
\begin{remark}
In practice, the exponent is often small.
\end{remark}
\begin{remark}
\P considers the worst case and is not always realistic.
Other alternative computational models exist.
\end{remark}
\item[Church-Turing thesis] \marginnote{Church-Turing thesis}
Any physically realizable computer can be simulated by a TM with an arbitrary time overhead.
\item[Strong Church-Turing thesis] \marginnote{Strong Church-Turing thesis}
Any physically realizable computer can be simulated by a TM with a polynomial time overhead.
\begin{remark}
If this thesis holds, the class \P is robust
(i.e. does not depend on the computational device)
and is therefore the smallest class of bounds.
\end{remark}
\item[Deterministic time for functions (\FDTIME)] \marginnote{Deterministic time for functions (\FDTIME)}
Let $T: \mathbb{N} \rightarrow \mathbb{N}$ and
$f: \{0, 1\}^* \rightarrow \{0, 1\}^*$.
$f$ is in $\FDTIME(T(n))$ iff
there exists a TM that computes it in time $O(T(n))$.
\item[Polynomial time for functions (\FP)] \marginnote{Polynomial time for functions (\FP)}
The class \FP is defined as:
\[ \FP = \bigcup_{c \geq 1} \FDTIME(n^c) \]
\begin{remark}
It holds that $\forall \mathcal{L} \in \P \Rightarrow f_\mathcal{L} \in \FP$,
where $f_\mathcal{L}$ is the characteristic function of $\mathcal{L}$.
Generally, the contrary does not hold.
\end{remark}
\end{description}
\section{Exponential time}
\begin{description}
\item[Exponential time (\EXP/\FEXP)] \marginnote{Exponential time (\EXP/\FEXP)}
The \EXP and \FEXP classes are defined as:
\[
\EXP = \bigcup_{c \geq 1} \DTIME\big( 2^{n^c} \big) \hspace{3em}
\FEXP = \bigcup_{c \geq 1} \FDTIME\big( 2^{n^c} \big)
\]
\begin{theorem}
The following hold:
\[ \P \subset \EXP \hspace{3em} \FP \subset \FEXP \]
\end{theorem}
\end{description}
\section{\NP class}
\begin{description}
\item[Certificate] \marginnote{Certificate}
Given a set of pairs $\mathcal{C}_\mathcal{L}$ and a polynomial $p: \mathbb{N} \rightarrow \mathbb{N}$,
we can define the language $\mathcal{L}$ such that:
\[ \mathcal{L} = \{ x \in \{0, 1\}^* \mid \exists y \in \{0, 1\}^{p(\vert x \vert)}: (x, y) \in \mathcal{C}_\mathcal{L} \} \]
Given a string $w$ and a certificate $y$,
we can exploit $\mathcal{C}_\mathcal{L}$ as a test to check whether $y$ is a certificate for $w$:
\[ w \in \mathcal{L} \iff (w, y) \in \mathcal{C}_\mathcal{L} \]
\item[Nondeterministic TM (NDTM)] \marginnote{Nondeterministic TM (NDTM)}
TM that has two transition functions $\delta_0$, $\delta_1$ and, at each step, non-deterministically chooses which one to follow.
A state $q_\text{accept}$ is always present:
\begin{itemize}
\item A NDTM accepts a string iff one of the possible computations reaches $q_\text{accept}$.
\item A NDTM rejects a string iff none of the possible computations reach $q_\text{accept}$.
\end{itemize}
\item[Nondeterministic time (\NDTIME)] \marginnote{Nondeterministic time (\NDTIME)}
Let $T: \mathbb{N} \rightarrow \mathbb{N}$ and $\mathcal{L}$ be a language.
$\mathcal{L}$ is in $\NDTIME(T(n))$ iff
there exists a NDTM that decides $\mathcal{L}$ in time $O(T(n))$.
\begin{remark}
A NDTM $\mathcal{M}$ runs in time $T: \mathbb{N} \rightarrow \mathbb{N}$ iff
for every input, any possible computation terminates in time $O(T(n))$.
\end{remark}
\item[Complexity class \NP] \marginnote{Complexity class \NP}
\phantom{}
\begin{description}
\item[NDTM formulation]
The class \NP contains all the tasks computable in polynomial time by a nondeterministic TM:
\[ \NP = \bigcup_{c \geq 1} \NDTIME(n^c) \]
\item[Verifier formulation]
Let $\mathcal{L} \in \{0, 1\}^*$ be a language.
$\mathcal{L}$ is in \NP iff there exists
a polynomial $p: \mathbb{N} \rightarrow \mathbb{N}$ and
a polynomial TM $\mathcal{M}$ (verifier) such that:
\[ \mathcal{L} = \{ x \in \{0, 1\}^* \mid \exists y \in \{0, 1\}^{p(\vert x \vert)}: \mathcal{M}(\enc{(x, y)}) = 1 \} \]
In other words, $\mathcal{L}$ is the language of the strings that can be verified by $\mathcal{M}$ in polynomial time
using a certificate $y$ of polynomial length.
\end{description}
\end{description}
\begin{theorem} \label{th:P_NP_EXP_relationship}
$\P \subseteq \NP \subseteq \EXP$.
\begin{proof}
We have to prove that $\P \subseteq \NP$ and $\NP \subseteq \EXP$:
\begin{description}
\item[$\P \subseteq \NP$)]
Given a language $\mathcal{L} \in \P$, we want to prove that $\mathcal{L} \in \NP$.
By hypothesis, there is a polynomial time TM $\mathcal{N}$ that decides $\mathcal{L}$.
To prove that $\mathcal{L}$ is in $\NP$,
we show that there is a polynomial verifier $\mathcal{M}$ that certifies $\mathcal{L}$ with a polynomial certificate.
We can use any constant certificate (e.g. of length 1) and
use $\mathcal{N}$ as the verifier $\mathcal{M}$:
\[
\mathcal{M}(x, y) = \begin{cases}
1 & \text{if $\mathcal{N}(x) = 1$} \\
0 & \text{otherwise}
\end{cases}
\]
$\mathcal{M}$ can ignore the polynomial certificate and it "verifies" a string in polynomial time through $\mathcal{N}$.
\item[$\NP \subseteq \EXP$)]
Given a language $\mathcal{L} \in \NP$, we want to prove that $\mathcal{L} \in \EXP$.
By hypothesis, there is a polynomial time TM $\mathcal{N}$ that is able to certify any string in $\mathcal{L}$ with a polynomial certificate.
Given a polynomial $p$, can define the following algorithm:
\begin{lstlisting}[mathescape=true]
def np_to_exp($x \in \{0, 1\}^*$):
foreach $y \in \{0, 1\}^{p(\vert x \vert)}$:
if $\mathcal{M}(x, y) == 1$:
return 1
return 0
\end{lstlisting}
The algorithm has complexity
$O(2^{p(\vert x \vert)}) \cdot O(q(\vert x \vert + \vert y \vert)) = O(2^{p(\vert x \vert) + \log(q(\vert x \vert + \vert y \vert))})$,
where $q$ is a polynomial.
Therefore, the complexity is exponential.
\end{description}
\end{proof}
\end{theorem}
\begin{description}
\item[Polynomial-time reducibility] \marginnote{Polynomial-time reducibility}
A language $\mathcal{L}$ is poly-time reducible to $\mathcal{H}$ ($\mathcal{L} \leq_p \mathcal{H}$) iff:
\[
\begin{split}
\exists f: \{0, 1\}^* \rightarrow \{0, 1\}^* \text{ such that } &(x \in \mathcal{L} \iff f(x) \in \mathcal{H}) \text{ and} \\
&\text{$f$ is computable in poly-time}
\end{split}
\]
$f$ can be seen as a mapping function.
\begin{remark}
Intuitively, when $\mathcal{L} \leq_p \mathcal{H}$, $\mathcal{H}$ is at least as difficult as $\mathcal{L}$.
\end{remark}
\begin{theorem}
The relation $\leq_p$ is a pre-order (i.e. reflexive and transitive).
\begin{proof}
We want to prove that $\leq_p$ is reflexive and transitive:
\begin{descriptionlist}
\item[Reflexive)]
Given a language $\mathcal{L}$, we want to prove that $\mathcal{L} \leq_p \mathcal{L}$.
We have to find a poly-time function $f: \{0, 1\}^* \rightarrow \{0, 1\}^*$ such that:
\[ x \in \mathcal{L} \iff f(x) \in \mathcal{L} \]
We can choose $f$ as the identity function.
\item[Transitive)]
Given the languages $\mathcal{L}, \mathcal{H}, \mathcal{J}$, we want to prove that:
\[ (\mathcal{L} \leq_p \mathcal{H}) \land (\mathcal{H} \leq_p \mathcal{J}) \Rightarrow (\mathcal{L} \leq_p \mathcal{J}) \]
By hypothesis, it holds that $\mathcal{L} \leq_p \mathcal{H}$ and $\mathcal{H} \leq_p \mathcal{J}$.
Therefore, there are two poly-time functions $f, g: \{0, 1\}^* \rightarrow \{0, 1\}^*$ such that:
\[ x \in \mathcal{L} \iff f(x) \in \mathcal{H} \text{ and } y \in \mathcal{H} \iff f(y) \in \mathcal{J} \]
We want to find a poly-time mapping from $\mathcal{L}$ to $\mathcal{J}$. This function can be the composition $(g \circ f)(z) = g(f(z))$.
$(g \circ f)$ is poly-time as $f$ and $g$ are poly-time.
\end{descriptionlist}
\end{proof}
\end{theorem}
\item[\NP-hard] \marginnote{\NP-hard}
Given a language $\mathcal{H} \in \{0, 1\}^*$, $\mathcal{H}$ is \NP-hard iff:
\[ \forall \mathcal{L} \in \NP: \mathcal{L} \leq_p \mathcal{H} \]
\item[\NP-complete] \marginnote{\NP-complete}
Given a language $\mathcal{H} \in \{0, 1\}^*$, $\mathcal{H}$ is \NP-complete iff:
\[ \mathcal{H} \in \NP \text{ and } \mathcal{H} \text{ is \NP-hard} \]
\end{description}
\begin{theorem}
\phantom{}
\begin{enumerate}
\item\label{th:np_hard_p} If $\mathcal{L}$ is \NP-hard and $\mathcal{L} \in \P$, then $\P = \NP$.
\item If $\mathcal{L}$ is \NP-complete, then $\mathcal{L} \in \P \iff \P = \NP$.
\end{enumerate}
\begin{proof}
\phantom{}
\begin{enumerate}
\item Let $\mathcal{L}$ be \NP-hard and $\mathcal{L} \in \P$.
We want to prove that $\P = \NP$:
\begin{descriptionlist}
\item[$\P \subseteq \NP$)] Proved in \Cref{th:P_NP_EXP_relationship}.
\item[$\NP \subseteq \P$)]
Let $\mathcal{H}$ be a language in $\NP$.
As $\mathcal{L}$ is \NP-hard, by definition it holds that $\mathcal{H} \leq_p \mathcal{L}$.
Moreover, by hypothesis, it holds that $\mathcal{L} \in \P$.
Therefore, we can conclude that $\mathcal{H} \in \P$ as it can be reduced to a language in $\P$.
\end{descriptionlist}
\item Let $\mathcal{L}$ be \NP-complete.
We want to prove that $\mathcal{L} \in \P \iff \P = \NP$:
\begin{descriptionlist}
\item[$(\mathcal{L} \in \P) \Rightarrow (\P = \NP)$)]
Trivial for \hyperref[th:np_hard_p]{Point 1} as $\mathcal{L}$ is also \NP-hard.
\item[$(\mathcal{L} \in \P) \Leftarrow (\P = \NP)$)]
Let $\P = \NP$.
As $\mathcal{L}$ is \NP-complete, it holds that
$\mathcal{L} \in \NP=\P$.
\end{descriptionlist}
\end{enumerate}
\end{proof}
\end{theorem}
\begin{theorem}
The problem \texttt{TMSAT} of simulating any TM is \NP-complete:
\[ \texttt{TMSAT} = \{ (\alpha, x, 1^n, 1^t) \mid \exists u \in \{0, 1\}^n: \mathcal{M}_\alpha(x, u) = 1 \text{ within $t$ steps} \} \]
\end{theorem}
\begin{theorem}[Cook-Levin] \marginnote{Cook-Levin theorem}
The following languages are \NP-complete:
\[
\begin{split}
\texttt{SAT} &= \{ \enc{F} \mid F \text{ is a satisfiable CNF} \} \\
\texttt{3SAT} &= \{ \enc{F} \mid F \text{ is a satisfiable 3CNF} \} \\
\end{split}
\]
\end{theorem}

View File

@ -0,0 +1,166 @@
\chapter{Computational learning theory}
\begin{description}
\item[Instance space] \marginnote{Instance space}
Set $X$ of (encoded) instances of objects that a learner wants to classify.
Data from the instance space is drawn from a distribution $\mathcal{D}$ unknown to the learner.
\item[Concept] \marginnote{Concept}
Subset $c \subseteq X$ of the instance space which can be intended as properties of objects (i.e. a way to classify the instance space).
\item[Concept class] \marginnote{Concept class}
Collection $\mathcal{C} \subseteq \mathbb{P}(X)$ of concepts.
It represents the concepts that are sufficiently simple for the algorithm to handle (i.e. the space of learnable concepts).
\begin{description}
\item[Target concept]
Concept $c \in \mathcal{C}$ that the learner wants to learn.
\end{description}
\begin{remark}
A learning algorithm is designed to learn concepts from a concept class
neither knowing the target concept nor its data distribution.
\end{remark}
\item[Learning algorithm] \marginnote{Learning algorithm}
Given a concept class $\mathcal{C}$ and a target concept $c \in \mathcal{C}$ with unknown distribution $\mathcal{D}$,
a learning algorithm $\mathcal{A}$ takes as input:
\begin{itemize}
\item $\varepsilon$, the error parameter (or accuracy if seen as $(1-\varepsilon)$),
\item $\delta$, the confidence parameter,
\item $EX(c, \mathcal{D})$, an oracle that $\mathcal{A}$ can call to retrieve a data point $x \sim \mathcal{D}$
with a label to indicate whether it is in the target concept $c$ or not (i.e. training data),
\end{itemize}
and outputs a concept $h \in \mathcal{C}$.
\begin{center}
\includegraphics[width=0.3\linewidth]{./img/_learning_algorithm.pdf}
\end{center}
\begin{description}
\item[Probability of error] \marginnote{Probability of error}
Given a concept class $\mathcal{C}$,
a target concept $c \in \mathcal{C}$ with unknown distribution $\mathcal{D}$ and
a learning algorithm $\mathcal{A}$,
the probability of error (i.e. misclassifications) for any output $h \in \mathcal{C}$ of $\mathcal{A}$ is defined as:
\[ \text{error}_{\mathcal{D}, c} = \mathcal{P}_{x \sim \mathcal{D}}[ h(x) \neq c(x) ] \]
\end{description}
\begin{figure}[H]
\centering
\includegraphics[width=0.35\linewidth]{./img/_learning_model.pdf}
\caption{General idea of a learning algorithm $\mathcal{A}$ computed as a function $f_\mathcal{A}$}
\end{figure}
\item[PAC learnability] \marginnote{PAC learnability}
A concept class $\mathcal{C}$ over the instance space $X$ is probably approximately correct (PAC) learnable iff there is an algorithm $\mathcal{A}$ such that:
\begin{itemize}
\item For each target concept $c \in \mathcal{C}$,
\item For each distribution $\mathcal{D}$,
\item For each error $0 < \varepsilon < \frac{1}{2}$,
\item For each confidence $0 < \delta < \frac{1}{2}$,
\end{itemize}
it holds that:
\[ \mathcal{P}\left[ \text{error}_{\mathcal{D}, c}\Big( \mathcal{A}\big( EX(c, \mathcal{D}), \varepsilon, \delta \big) \Big) < \varepsilon \right] > 1-\delta \]
where the probability is computed by sampling data points from $EX(c, \mathcal{D})$.
In other words, the probability that $\mathcal{A}$ has an error rate lower than $\varepsilon$ (or an accuracy higher than $(1-\varepsilon)$) is greater than $(1-\delta)$.
\begin{description}
\item[Efficient PAC learnability] \marginnote{Efficient PAC learnability}
A concept class $\mathcal{C}$ is efficiently PAC learnable iff
it is PAC learnable and the algorithm $\mathcal{A}$ that learns it has
a time complexity bound to a polynomial in $\frac{1}{\varepsilon}$ and $\frac{1}{\delta}$.
\begin{remark}
The complexity of $\mathcal{A}$ is measured taking into account the number of calls to $EX(c, \mathcal{D})$.
\end{remark}
\end{description}
\end{description}
\section{Axes-aligned rectangles over $\mathbb{R}^2_{[0, 1]}$}
Consider the instance space $X = \mathbb{R}^2_{[0, 1]}$
and the concept class $\mathcal{C}$ of concepts represented by all the points contained within a rectangle parallel to the axes of arbitrary size.
\begin{figure}[H]
\centering
\includegraphics[width=0.2\linewidth]{./img/_learning_rectangle.pdf}
\caption{Example of problem instance. The gray rectangle is the target concept, red dots are positive data points and blue dots are negative data points.}
\end{figure}
An algorithm has to guess a classifier (i.e. a rectangle) without knowing the target concept and the distribution of its training data.
Let an algorithm $\mathcal{A}_\text{BFP}$ be defined as follows:
\begin{itemize}
\item Take as input some data $\{ ((x_1, y_1), p_1), \dots, ((x_n, y_n), p_n) \}$ where
$(x_i, y_i)$ are the coordinates of the point and $p_i$ indicates if the point is within the target rectangle.
\item Return the smallest rectangle that includes all the positive instances.
\end{itemize}
Given the rectangle $R$ predicted by $\mathcal{A}_\text{BFP}$ and the target rectangle $T$,
the probability of error in using $R$ in place of $T$ is:
\[ \text{error}_{\mathcal{D}, T}(R) = \mathcal{P}_{x \sim \mathcal{D}} [ x \in (R \smallsetminus T) \cup (T \smallsetminus R) ] \]
In other words, a point is misclassified if it is in $R$ but not in $T$ or vice versa.
\begin{remark}
By definition of $\mathcal{A}_\text{BFP}$, it always holds that $R \subseteq T$.
Therefore, $(R \smallsetminus T) = \varnothing$ and the error can be rewritten as:
\[ \text{error}_{\mathcal{D}, T}(R) = \mathcal{P}_{x \sim \mathcal{D}} [ x \in (T \smallsetminus R) ] \]
\end{remark}
\begin{theorem}[Axes-aligned rectangles over $\mathbb{R}^2_{[0, 1]}$ PAC learnability]
It holds that:
\begin{itemize}
\item For every distribution $\mathcal{D}$,
\item For every error $0 < \varepsilon < \frac{1}{2}$,
\item For every confidence $0 < \delta < \frac{1}{2}$,
\end{itemize}
if $m \geq \frac{4}{\varepsilon}\ln\left( \frac{4}{\delta} \right)$, then:
\[
\mathcal{P}_{D \sim \mathcal{D}^m}
\left[ \text{error}_{\mathcal{D}, T}\Big( \mathcal{A}_\text{BFP}\big(T(D)\big) \Big) < \varepsilon \right] > 1 - \delta
\]
where $D \sim \mathcal{D}^m$ is a sample of $m$ data points (i.e. training data)
and $T(\cdot)$ labels the input data wrt to the target rectangle $T$.
\begin{proof}
By definition, the error of $\mathcal{A}_\text{BFP}$ is defined as:
\[ \text{error}_{\mathcal{D}, T}(R) = \mathcal{P}_{x \sim \mathcal{D}} [ x \in (T \smallsetminus R) ] \]
Consider the space defined by $(T \smallsetminus R)$ divided in four sections $E_1 \cup \dots \cup E_4 = (T \smallsetminus R)$:
\begin{figure}[H]
\centering
\includegraphics[width=0.4\linewidth]{./img/_rectangle_space.pdf}
\end{figure}
Consider the probabilistic event "$x \in E_i$".
For the training data $x \sim \mathcal{D}$ this holds iff none of those points
end up in $E_i$ as, if a training point is in $E_i$, $R$ would be bigger to include it and $E_i$ would be smaller.
Now consider four other regions $F_1, \dots, F_4$ of the plane related to $E_i$ but defined differently
in such a way that $\mathcal{P}_{x \sim D}[x \in F_i] = \frac{\varepsilon}{4}$.
This can be achieved by expanding the $E_i$ regions to take some area of the rectangle $R$.
\begin{figure}[H]
\centering
\includegraphics[width=0.4\linewidth]{./img/_rectangle_space2.pdf}
\end{figure}
Then, as $E_i$ are smaller than $F_i$, it holds that:
\[
\begin{split}
\mathcal{P}_{x \sim D}[x \in E_i] < \frac{\varepsilon}{4} &\Rightarrow \mathcal{P}_{x \sim D}[x \in (T \smallsetminus R)] < \varepsilon \\
& \Rightarrow \text{error}_{\mathcal{D}, T}(R) < \varepsilon
\end{split}
\]
\textit{To be continued\dots}
\end{proof}
\end{theorem}
\begin{corollary}
The concept class of axis-aligned rectangles over $\mathbb{R}^2_{[0, 1]}$ is efficiently PAC learnable.
\end{corollary}

View File

@ -0,0 +1,88 @@
\chapter{Introduction}
\begin{description}
\item[Computational task] \marginnote{Computational task}
Description of a problem.
\item[Computational process] \marginnote{Computational process}
Algorithm to solve a task.
\begin{description}
\item[Algorithm (informal)]
A finite description of
elementary and deterministic computation steps.
\end{description}
\end{description}
\section{Notations}
\begin{description}
\item[Set of the first $n$ natural numbers]
Given $n \in \mathbb{N}$, we have that $[n] = \{ 1, \dots, n \}$.
\end{description}
\subsection{Strings}
\begin{description}
\item[Alphabet] \marginnote{Alphabet}
Finite set of symbols.
\item[String] \marginnote{String}
Finite, ordered, and possibly empty tuple of elements of an alphabet.
The empty string is denoted as $\varepsilon$.
\item[Strings of given length]
Given an alphabet $S$ and $n \in \mathbb{N}$, we denote with $S^n$ the set of all the strings over $S$ of length $n$.
\item[Kleene star] \marginnote{Kleene star}
Given an alphabet $S$, we denote with $S^* = \bigcup_{n=0}^{\infty} S^n$ the set of all the strings over $S$.
\item[Language] \marginnote{Language}
Given an alphabet $S$, a language $\mathcal{L}$ is a subset of $S^*$.
\end{description}
\subsection{Tasks encoding}
\begin{description}
\item[Encoding] \marginnote{Encoding}
Given a set $A$, any element $x \in A$ can be encoded into a string of the language $\{0, 1\}^*$.
The encoding of $x$ is denoted as $\enc{x}$ or simply $x$.
\item[Task function] \marginnote{Task}
Given two countable sets $A$ and $B$ representing the domain,
a task can be represented as a function $f: A \rightarrow B$.
When not stated, $A$ and $B$ are implicitly encoded into $\{0, 1\}^*$.
\item[Characteristic function] \marginnote{Characteristic function}
Boolean function of form $f: \{0, 1\}^* \rightarrow \{0, 1\}$.
Given a characteristic function $f$, the language $\mathcal{L}_f = \{ x \in \{0, 1\}^* \mid f(x) = 1 \}$
can be defined.
\item[Decision problem] \marginnote{Decision problem}
Given a language $\mathcal{M}$, a decision problem is the task of computing a boolean function $f$
able to determine if a string belongs to $\mathcal{M}$ (i.e. $\mathcal{L}_f = \mathcal{M}$).
\end{description}
\subsection{Asymptotic notation}
\begin{description}
\item[Big O] \marginnote{Big O}
A function $f: \mathbb{N} \rightarrow \mathbb{N}$ is $O(g)$ if $g$ is an upper bound of $f$.
\[ f \in O(g) \iff \exists \bar{n} \in \mathbb{N} \text{ such that } \forall n > \bar{n}, \exists c \in \mathbb{R}^+: f(n) \leq c \cdot g(n) \]
\item[Big Omega] \marginnote{Big Omega}
A function $f: \mathbb{N} \rightarrow \mathbb{N}$ is $\Omega(g)$ if $g$ is a lower bound of $f$.
\[ f \in \Omega(g) \iff \exists \bar{n} \in \mathbb{N} \text{ such that } \forall n > \bar{n}, \exists c \in \mathbb{R}^+: f(n) \geq c \cdot g(n) \]
\item[Big Theta]\marginnote{Big Theta}
A function $f: \mathbb{N} \rightarrow \mathbb{N}$ is $\Theta(g)$ if $g$ is both an upper and lower bound of $f$.
\[ f \in \Theta(g) \iff f \in O(g) \text{ and } f \in \Omega(g) \]
\end{description}

View File

@ -0,0 +1,251 @@
\chapter{Turing Machine}
\section{$k$-tape Turing Machine}
\begin{description}
\item[Tape] \marginnote{Tape}
Infinite one-directional line of cells.
Each cell can hold a symbol from a finite alphabet $\Gamma$.
\begin{description}
\item[Tape head]
A tape head reads or writes one symbol at a time and
can move left or right on the tape.
\item[Input tape]
Read-only tape where the input will be loaded.
\item[Work tape]
Read-write auxiliary tape used during computation.
\item[Output tape]
Read-write tape that will contain the output of the computation.
\begin{remark}
Sometimes the output tape is not necessary and the final state of the computation can be used to determine a boolean outcome.
\end{remark}
\end{description}
\item[Instructions] \marginnote{Instructions}
Given a finite set of states $Q$, at each step, a machine can:
\begin{description}
\item[Read] from the $k$ tape heads.
\item[Replace] the symbols under the writable tape heads, or leave them unchanged.
\item[Change] state.
\item[Move] each of the $k$ tape heads to the left or right, or leave unchanged.
\end{description}
\item[$k$-tape Turing Machine (TM)] \marginnote{$k$-tape Turing Machine (TM)}
A Turing Machine working on $k$ tapes (one of which is the input tape) is a triple $(\Gamma, Q, \delta)$:
\begin{itemize}
\item $\Gamma$ is a finite set of tape symbols.
We assume that it contains a blank symbol ($\tapeblank$), a start symbol ($\tapestart$),
and the digits $0$, $1$.
\item $Q$ is a finite set of states.
The initial state is $q_\text{init}$ and the final state is $q_\text{halt}$.
\item $\delta$ is the transition function that describes the instructions allowed at each step.
It is defined as:
\[ \delta: Q \times \Gamma^k \rightarrow Q \times \Gamma^{k-1} \times \{ \texttt{L}, \texttt{S}, \texttt{R} \}^k \]
By convention, when the state is $q_\text{halt}$, the machine is stuck (i.e. it cannot change state or operate on the tapes):
\[ \delta(q_\text{halt}, \{ \sigma_1, \dots, \sigma_k \}) = \big( q_\text{halt}, \{ \sigma_1, \dots, \sigma_k \}, (\texttt{S}, \dots, \texttt{S}) \big) \]
\end{itemize}
\end{description}
\begin{theorem}[Turing Machine equivalence]
The following computational models have, with at most a polynomial overhead, the same expressive power:
1-tape TMs, $k$-tape TMs, non-deterministic TMs,
random access machines, $\lambda$-calculus, unlimited register machines, programming languages (Böhm-Jacopini theorem), \dots
\end{theorem}
\section{Computation}
\begin{description}
\item[Configuration] \marginnote{Configuration}
Given a TM $\mathcal{M} = (\Gamma, Q, \delta)$, a configuration $C$ is described by:
\begin{itemize}
\item The current state $q$.
\item The content of the tapes.
\item The position of the tape heads.
\end{itemize}
\begin{description}
\item[Initial configuration]
Given the input $x \in \{ 0, 1 \}^*$, the initial configuration $\mathcal{I}_x$ is described as follows:
\begin{itemize}
\item The current state is $q_\text{init}$.
\item The first (input) tape contains $\tapestart x \tapeblank \dots$.
The other tapes contain $\tapestart \tapeblank \dots$.
\item The tape heads are positioned on the first symbol of each tape.
\end{itemize}
\item[Final configuration]
Given an output $y \in \{0, 1\}^*$, the final configuration is described as follows:
\begin{itemize}
\item The current state is $q_\text{halt}$.
\item The output tape contains $\tapestart y \tapeblank \dots$.
\end{itemize}
\end{description}
\item[Computation (string)] \marginnote{Computation (string)}
Given a TM $\mathcal{M} = (\Gamma, Q, \delta)$,
$\mathcal{M}$ returns $y \in \{ 0, 1 \}^*$ on input $x \in \{ 0, 1 \}^*$ (i.e. $\mathcal{M}(x) = y$) in $t$ steps if:
\[ \mathcal{I}_x \xrightarrow{\delta} C_1 \xrightarrow{\delta} \dots \xrightarrow{\delta} C_t \]
where $C_t$ is a final configuration for $y$.
\item[Computation (function)] \marginnote{Computation (function)}
Given a TM $\mathcal{M} = (\Gamma, Q, \delta)$ and a function $f: \{0, 1\}^* \rightarrow \{0, 1\}^*$,
$\mathcal{M}$ computes $f$ iff:
\[ \forall x \in \{0, 1\}^*: \mathcal{M}(x) = f(x) \]
If this holds, $f$ is a computable function.
\item[Computation in time $\mathbf{T}$] \marginnote{Computation in time $T$}
Given a TM $\mathcal{M}$ and
the functions $f: \{0, 1\}^* \rightarrow \{0, 1\}^*$ and
$T: \mathbb{N} \rightarrow \mathbb{N}$,
$\mathcal{M}$ computes $f$ in time $T$ iff:
\[ \forall x \in \{0, 1\}^*: \text{$\mathcal{M}(x)$ returns $f(x)$ in at most $T(\vert x \vert)$ steps} \]
\item[Decidability in time $\mathbf{T}$] \marginnote{Decidability in time $T$}
Given a function $f: \{0, 1\}^* \rightarrow \{0, 1\}$,
the language $\mathcal{L}_f$ is decidable in time $T$ iff $f$ is computable in time $T$.
\end{description}
\section{Universal Turing Machine}
\begin{description}
\item[Turing Machine encoding]
Given a TM $\mathcal{M} = (\Gamma, Q, \delta)$,
the entire machine can be described by $\delta$ through tuples of form:
\[ Q \times \Gamma^k \times Q \times \Gamma^{k-1} \times \{ \texttt{L}, \texttt{S}, \texttt{R} \}^k \]
It is therefore possible to encode $\delta$ into a binary string and
consequently create an encoding $\enc{\mathcal{M}}$ of $\mathcal{M}$.
The encoding should satisfy the following conditions:
\begin{enumerate}
\item For every $x \in \{0, 1\}^*$, there exists a TM $\mathcal{M}$ such that $x = \enc{\mathcal{M}}$.
\item Every TM is represented by an infinite number of strings. One of them is the canonical representation.
\end{enumerate}
\begin{theorem}[Universal Turing Machine (UTM)] \marginnote{Universal Turing Machine (UTM)}
There exists a TM $\mathcal{U}$ such that, for every binary strings $x$ and $\alpha$,
it emulates the TM defined by $\alpha$ on input $x$:
\[ \mathcal{U}(x, \alpha) = \mathcal{M}_\alpha(x) \]
where $\mathcal{M}_\alpha$ is the TM defined by $\alpha$.
Moreover, $\mathcal{U}$ simulates $\mathcal{M}_\alpha$ with at most $CT\log(T)$ time overhead,
where $C$ only depends on $\mathcal{M}_\alpha$.
\end{theorem}
\end{description}
\section{Computability}
\subsection{Undecidable functions}
\begin{theorem}[Existance of uncomputable functions] \label{th:uncomputable_fn} \marginnote{Uncomputable functions}
There exists a function $uc: \{0, 1\}^* \rightarrow \{0, 1\}^*$ that is not computable by any TM.
\begin{proof}
Consider the following function:
\[ uc(\alpha) = \begin{cases}
0 & \text{if $\mathcal{M}_\alpha(\alpha) = 1$} \\
1 & \text{if $\mathcal{M}_\alpha(\alpha) \neq 1$}
\end{cases} \]
If $uc$ was computable, there would be a TM $\mathcal{M}$ that computes it (i.e. $\forall \alpha \in \{0, 1\}^*: \mathcal{M}(\alpha) = uc(\alpha)$).
This will result in a contradiction:
\[ uc(\enc{\mathcal{M}}) = 0 \iff \mathcal{M}(\enc{\mathcal{M}}) = 1 \iff uc(\enc{\mathcal{M}}) = 1 \]
Therefore, $uc$ cannot be computed.
\end{proof}
\end{theorem}
\begin{description}
\item[Halting problem] \marginnote{Halting problem}
Given an encoded TM $\alpha$ and a string $x$,
the halting problem aims to determine if $\mathcal{M}_\alpha$ terminates on input $x$.
In other words:
\[
\texttt{halt}(\enc{(\alpha, x)}) = \begin{cases}
1 & \text{if $\mathcal{M}_\alpha$ stops on input $x$} \\
0 & \text{otherwise}
\end{cases}
\]
\begin{theorem}
The halting problem is undecidable.
\begin{proof}
Note: this proof is slightly different from the traditional proof of the halting problem.
Assume that \texttt{halt} is decidable. Therefore, there exists a TM $\mathcal{M}_\texttt{halt}$ that decides it.
We can define a new TM $\mathcal{M}_{uc}$ that uses $\mathcal{M}_\texttt{halt}$ such that:
\[ \mathcal{M}_{uc}(\alpha) = \begin{cases}
1 & \text{if $\mathcal{M}_\texttt{halt}(\alpha, \alpha) = 0$ (i.e. $\mathcal{M}_\alpha(\alpha)$ diverges)} \\
\begin{cases}
0 & \text{if $\mathcal{M}_\alpha(\alpha) = 1$} \\
1 & \text{if $\mathcal{M}_\alpha(\alpha) \neq 1$}
\end{cases} & \text{if $\mathcal{M}_\texttt{halt}(\alpha, \alpha) = 1$ (i.e. $\mathcal{M}_\alpha(\alpha)$ converges)}
\end{cases} \]
This results in a contradiction:
\begin{itemize}
\item $\mathcal{M}_{uc}(\enc{\mathcal{M}_{uc}}) = 1 \Leftarrow
\mathcal{M}_\texttt{halt}(\enc{\mathcal{M}_{uc}}, \enc{\mathcal{M}_{uc}}) = 0 \iff
\mathcal{M}_{uc}(\enc{\mathcal{M}_{uc}}) \text{ diverges}$
\item $\mathcal{M}_\texttt{halt}(\enc{\mathcal{M}_{uc}}, \enc{\mathcal{M}_{uc}}) = 1$ $\Rightarrow$
$\mathcal{M}_{uc}$ is not computable by \Cref{th:uncomputable_fn}.
\end{itemize}
\end{proof}
\end{theorem}
\item[Diophantine equation] \marginnote{Diophantine equation}
Polynomial equality with integer coefficients and a finite number of unknowns.
\begin{theorem}[MDPR]
Determining if an arbitrary diophantine equation has a solution is undecidable.
\end{theorem}
\end{description}
\subsection{Rice's theorem}
\begin{description}
\item[Semantic language] \marginnote{Semantic language}
Given a language $\mathcal{L} \subseteq \{ 0, 1 \}^*$, $\mathcal{L}$ is semantic if:
\begin{itemize}
\item Any string in $\mathcal{L}$ is an encoding of a TM.
\item If $\enc{\mathcal{M}} \in \mathcal{L}$ and
the TM $\mathcal{N}$ computes the same function of $\mathcal{M}$,
then $\enc{\mathcal{N}} \in \mathcal{L}$.
\end{itemize}
A semantic language can be seen as a set of TMs that have the same property.
\item[Trivial language]
A language $\mathcal{L}$ is trivial iff $\mathcal{L} = \varnothing$ or $\mathcal{L} = \{0, 1\}^*$
\end{description}
\begin{theorem}[Rice's theorem] \marginnote{Rice's theorem}
If a semantic language is non-trivial, then it is undecidable
(i.e. any decidable semantic language is trivial).
\begin{proof}[Proof idea]
Assuming that there exists a non-trivial decidable semantic language $\mathcal{L}$,
it is possible to prove that the halting problem is decidable.
Therefore, $\mathcal{L}$ is undecidable.
\end{proof}
\end{theorem}