changeset 0:eff495555729

add findRBTtest
author mori
date Mon, 22 Jan 2024 10:27:20 +0900
parents
children 0fbd0ce0f5a1
files README.md Report/.DS_Store Report/final/.DS_Store Report/final/Readme.md Report/final/figs/BinarySearchTree.drawio Report/final/figs/BinarySearchTree.png Report/final/figs/RBtreeInvariant.drawio Report/final/figs/RBtreeInvariant.png Report/final/figs/RBtreeInvariantVar.drawio Report/final/figs/RBtreeInvariantVar.png Report/final/figs/RedBlackTree.drawio Report/final/figs/RedBlackTree.png Report/final/figs/sample.png Report/final/figs/t.png Report/final/figs/test1.png Report/final/ie-thesis.sty Report/final/jlisting.sty Report/final/logo_u-ryukyu.jpg Report/final/mm/GearsAgda による Red Black Tree の証明付き実装に関する研究 .mm Report/final/mm/gears_fs_db.mm Report/final/mm/rbtree-gearsagda.mm Report/final/refe/.DS_Store Report/final/refe/LeftLearning.pdf Report/final/refe/main.pdf Report/final/refe/midterm.pdf Report/final/text/Eabstract.tex Report/final/text/Jabstract.tex Report/final/text/chapter0.tex Report/final/text/chapter2.aux Report/final/text/chapter2.log Report/final/text/chapter2.tex Report/final/text/chapter3.aux Report/final/text/chapter3.log Report/final/text/chapter3.tex Report/final/text/chapter4.aux Report/final/text/chapter4.log Report/final/text/chapter4.tex Report/final/text/chapter5.aux Report/final/text/chapter5.tex Report/final/text/chapter6.aux Report/final/text/chapter6.tex Report/final/text/introduction.aux Report/final/text/introduction.tex Report/final/text/reference.aux Report/final/text/reference.tex Report/final/thesis.aux Report/final/thesis.lof Report/final/thesis.log Report/final/thesis.lol Report/final/thesis.lot Report/final/thesis.pdf Report/final/thesis.synctex.gz Report/final/thesis.tex Report/final/thesis.toc Report/first/ThesisReport.pdf Report/first/ThesisReport.tex Report/first/middle_work_plan.pdf Report/first/middle_work_plan.tex Report/midterm/jlisting.sty Report/midterm/midterm-comments.pdf Report/midterm/midterm.pdf Report/midterm/midterm.tex info.toml
diffstat 62 files changed, 5195 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,92 @@
+# e205718
+
+
+
+## Getting started
+
+To make it easy for you to get started with GitLab, here's a list of recommended next steps.
+
+Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
+
+## Add your files
+
+- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
+- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
+
+```
+cd existing_repo
+git remote add origin https://gitlab.ie.u-ryukyu.ac.jp/dissertation/2023/e205718.git
+git branch -M main
+git push -uf origin main
+```
+
+## Integrate with your tools
+
+- [ ] [Set up project integrations](https://gitlab.ie.u-ryukyu.ac.jp/dissertation/2023/e205718/-/settings/integrations)
+
+## Collaborate with your team
+
+- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
+- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
+- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
+- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
+- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
+
+## Test and Deploy
+
+Use the built-in continuous integration in GitLab.
+
+- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
+- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
+- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
+- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
+- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
+
+***
+
+# Editing this README
+
+When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
+
+## Suggestions for a good README
+Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
+
+## Name
+Choose a self-explaining name for your project.
+
+## Description
+Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
+
+## Badges
+On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
+
+## Visuals
+Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
+
+## Installation
+Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
+
+## Usage
+Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
+
+## Support
+Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
+
+## Roadmap
+If you have ideas for releases in the future, it is a good idea to list them in the README.
+
+## Contributing
+State if you are open to contributions and what your requirements are for accepting them.
+
+For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
+
+You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
+
+## Authors and acknowledgment
+Show your appreciation to those who have contributed to the project.
+
+## License
+For open source projects, say how it is licensed.
+
+## Project status
+If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
Binary file Report/.DS_Store has changed
Binary file Report/final/.DS_Store has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/Readme.md	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,6 @@
+# tex to pdf の方法
+
+```
+$ platex thesis
+$ dvipdfmx thesis
+```
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/figs/BinarySearchTree.drawio	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,67 @@
+<mxfile host="app.diagrams.net" modified="2024-01-07T14:37:27.872Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" etag="hdVeIclqG2i_UAuVQjos" version="22.1.17" type="device">
+  <diagram name="ページ1" id="rN4dKjHXG7ffeiCSSRsQ">
+    <mxGraphModel dx="1786" dy="818" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
+      <root>
+        <mxCell id="0" />
+        <mxCell id="1" parent="0" />
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-1" value="8" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;" vertex="1" parent="1">
+          <mxGeometry x="30" y="160" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-2" value="5" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+          <mxGeometry x="-110" y="285" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-3" value="10" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="180" y="285" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-4" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-1" target="2AmoWmF4z2Iwg5RR4k8V-2">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="45" y="225" as="sourcePoint" />
+            <mxPoint x="95" y="175" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-6" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-1" target="2AmoWmF4z2Iwg5RR4k8V-3">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="45" y="225" as="sourcePoint" />
+            <mxPoint x="95" y="175" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-8" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;" vertex="1" parent="1">
+          <mxGeometry x="-190" y="400" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-9" value="6" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
+          <mxGeometry x="-30" y="400" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-10" value="15" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;" vertex="1" parent="1">
+          <mxGeometry x="260" y="400" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-11" value="14" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;" vertex="1" parent="1">
+          <mxGeometry x="180" y="515" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-13" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-10" target="2AmoWmF4z2Iwg5RR4k8V-3">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="104" y="235" as="sourcePoint" />
+            <mxPoint x="154" y="185" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-15" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-11" target="2AmoWmF4z2Iwg5RR4k8V-10">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="114" y="245" as="sourcePoint" />
+            <mxPoint x="164" y="195" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-16" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-2" target="2AmoWmF4z2Iwg5RR4k8V-9">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="124" y="255" as="sourcePoint" />
+            <mxPoint x="174" y="205" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-17" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-2" target="2AmoWmF4z2Iwg5RR4k8V-8">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="134" y="265" as="sourcePoint" />
+            <mxPoint x="184" y="215" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>
Binary file Report/final/figs/BinarySearchTree.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/figs/RBtreeInvariant.drawio	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,217 @@
+<mxfile host="app.diagrams.net" modified="2024-01-12T08:58:33.725Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" etag="bq3QEfje3abNqVd1YR38" version="22.1.17" type="device">
+  <diagram name="ページ1" id="nhKd7lah58CyOhMhwOFc">
+    <mxGraphModel dx="1793" dy="960" 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="EygCwSi_lWI_55G2F0WW-1" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="452.5" y="82.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-5" value="rb-leaf" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+          <mxGeometry x="120" y="37.5" width="160" height="165" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-2" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-5">
+          <mxGeometry x="40" y="62.5" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-6" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="372.5" y="202.5" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-7" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="532.5" y="202.5" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-8" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="EygCwSi_lWI_55G2F0WW-7" target="EygCwSi_lWI_55G2F0WW-1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="442.5" y="422.5" as="sourcePoint" />
+            <mxPoint x="492.5" y="372.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-9" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="EygCwSi_lWI_55G2F0WW-6" target="EygCwSi_lWI_55G2F0WW-1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="542.5" y="202.5" as="sourcePoint" />
+            <mxPoint x="482.5" y="172.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-16" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;flipV=0;flipH=1;direction=east;" vertex="1" parent="1">
+          <mxGeometry x="800" y="97.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-17" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="1">
+          <mxGeometry x="720" y="217.5" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-19" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" target="EygCwSi_lWI_55G2F0WW-16">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="840" y="178.5" as="sourcePoint" />
+            <mxPoint x="770" y="148.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-20" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#b3b3b3;fillColor=#f5f5f5;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="1">
+          <mxGeometry x="880" y="217.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-21" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="1115" y="495" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-22" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="1195" y="615" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-23" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="EygCwSi_lWI_55G2F0WW-22" target="EygCwSi_lWI_55G2F0WW-21">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="1105" y="835" as="sourcePoint" />
+            <mxPoint x="1155" y="785" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-24" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" target="EygCwSi_lWI_55G2F0WW-21">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="1075" y="615" as="sourcePoint" />
+            <mxPoint x="1145" y="585" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-25" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="1035" y="615" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-26" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" vertex="1" parent="1">
+          <mxGeometry x="800" y="495" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-27" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="880" y="615" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-28" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="EygCwSi_lWI_55G2F0WW-27" target="EygCwSi_lWI_55G2F0WW-26">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="790" y="835" as="sourcePoint" />
+            <mxPoint x="840" y="785" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-29" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" target="EygCwSi_lWI_55G2F0WW-26">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="760" y="615" as="sourcePoint" />
+            <mxPoint x="830" y="585" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-30" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#b3b3b3;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="720" y="615" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-31" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="EygCwSi_lWI_55G2F0WW-20" target="EygCwSi_lWI_55G2F0WW-16">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="1030" y="237.5" as="sourcePoint" />
+            <mxPoint x="1080" y="187.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-32" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="EygCwSi_lWI_55G2F0WW-17">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="930" y="227.5" as="sourcePoint" />
+            <mxPoint x="840" y="177.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-33" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="1">
+          <mxGeometry x="1115" y="97.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-34" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="1">
+          <mxGeometry x="1035" y="217.5" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-35" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" target="EygCwSi_lWI_55G2F0WW-33">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="1155" y="178.5" as="sourcePoint" />
+            <mxPoint x="1085" y="148.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-36" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;flipV=0;flipH=1;direction=east;" vertex="1" parent="1">
+          <mxGeometry x="1195" y="217.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-37" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="EygCwSi_lWI_55G2F0WW-36" target="EygCwSi_lWI_55G2F0WW-33">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="1345" y="237.5" as="sourcePoint" />
+            <mxPoint x="1395" y="187.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-38" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="EygCwSi_lWI_55G2F0WW-34">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="1245" y="227.5" as="sourcePoint" />
+            <mxPoint x="1155" y="177.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-39" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="475" y="495" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-41" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" target="EygCwSi_lWI_55G2F0WW-39">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="595" y="615" as="sourcePoint" />
+            <mxPoint x="515" y="785" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-42" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" target="EygCwSi_lWI_55G2F0WW-39">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="435" y="615" as="sourcePoint" />
+            <mxPoint x="505" y="585" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-43" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="395" y="615" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-44" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="555" y="615" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-45" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" vertex="1" parent="1">
+          <mxGeometry x="140" y="495" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-46" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" target="EygCwSi_lWI_55G2F0WW-45">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="260" y="615" as="sourcePoint" />
+            <mxPoint x="180" y="785" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-47" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" target="EygCwSi_lWI_55G2F0WW-45">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="100" y="615" as="sourcePoint" />
+            <mxPoint x="170" y="585" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-48" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#b3b3b3;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="60" y="615" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-49" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#b3b3b3;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="220" y="615" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-50" value="rb-node" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+          <mxGeometry x="40" y="430" width="610" height="310" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-60" value="rb-node-red" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-50">
+          <mxGeometry x="95" y="35" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-61" value="rb-node-black" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-50">
+          <mxGeometry x="430" y="35" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-51" value="rb-left" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+          <mxGeometry x="700" y="430" width="610" height="310" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-62" value="rb-left-red" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-51">
+          <mxGeometry x="95" y="30" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-63" value="rb-left-black" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-51">
+          <mxGeometry x="410" y="30" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-52" value="rb-right" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+          <mxGeometry x="700" y="37.5" width="610" height="310" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-64" value="rb-right-red" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-52">
+          <mxGeometry x="95" y="32.5" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-65" value="rb-right-black" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-52">
+          <mxGeometry x="410" y="32.5" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-59" value="rb-single" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+          <mxGeometry x="360" y="37.5" width="265" height="255" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-66" value="Red Node" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" vertex="1" parent="1">
+          <mxGeometry x="1360" y="37.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-67" value="Black Node" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="1">
+          <mxGeometry x="1360" y="162.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-68" value="AnyColor Node" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="1360" y="280" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-69" value="" style="swimlane;startSize=0;" vertex="1" parent="1">
+          <mxGeometry width="1480" height="800" as="geometry" />
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>
Binary file Report/final/figs/RBtreeInvariant.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/figs/RBtreeInvariantVar.drawio	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,217 @@
+<mxfile host="app.diagrams.net" modified="2024-01-12T09:09:33.152Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" etag="_RNVyM6MKN6QUp1e8ND4" version="22.1.17" type="device">
+  <diagram name="ページ1" id="nhKd7lah58CyOhMhwOFc">
+    <mxGraphModel dx="1793" dy="960" 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="EygCwSi_lWI_55G2F0WW-69" value="" style="swimlane;startSize=0;" vertex="1" parent="1">
+          <mxGeometry width="700" height="1630" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-66" value="Red Node" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="50" y="37.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-67" value="Black Node" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="180" y="37.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-68" value="AnyColor Node" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="310" y="37.5" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-16" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;flipV=0;flipH=1;direction=east;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="140" y="930" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-17" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="60" y="1050" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-19" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" target="EygCwSi_lWI_55G2F0WW-16">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="180" y="1011" as="sourcePoint" />
+            <mxPoint x="110" y="981" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-20" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#b3b3b3;fillColor=#f5f5f5;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="220" y="1050" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-21" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="455" y="1304" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-22" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="535" y="1424" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-23" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" source="EygCwSi_lWI_55G2F0WW-22" target="EygCwSi_lWI_55G2F0WW-21">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="445" y="1644" as="sourcePoint" />
+            <mxPoint x="495" y="1594" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-24" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" target="EygCwSi_lWI_55G2F0WW-21">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="415" y="1424" as="sourcePoint" />
+            <mxPoint x="485" y="1394" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-25" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="375" y="1424" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-26" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="140" y="1304" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-27" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="220" y="1424" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-28" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" source="EygCwSi_lWI_55G2F0WW-27" target="EygCwSi_lWI_55G2F0WW-26">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="130" y="1644" as="sourcePoint" />
+            <mxPoint x="180" y="1594" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-29" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" target="EygCwSi_lWI_55G2F0WW-26">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="100" y="1424" as="sourcePoint" />
+            <mxPoint x="170" y="1394" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-30" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#b3b3b3;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="60" y="1424" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-31" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" source="EygCwSi_lWI_55G2F0WW-20" target="EygCwSi_lWI_55G2F0WW-16">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="370" y="1070" as="sourcePoint" />
+            <mxPoint x="420" y="1020" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-32" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" source="EygCwSi_lWI_55G2F0WW-17">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="270" y="1060" as="sourcePoint" />
+            <mxPoint x="180" y="1010" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-33" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="455" y="930" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-34" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;flipV=0;flipH=1;direction=east;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="375" y="1050" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-35" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" target="EygCwSi_lWI_55G2F0WW-33">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="495" y="1011" as="sourcePoint" />
+            <mxPoint x="425" y="981" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-36" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;flipV=0;flipH=1;direction=east;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="535" y="1050" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-37" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" source="EygCwSi_lWI_55G2F0WW-36" target="EygCwSi_lWI_55G2F0WW-33">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="685" y="1070" as="sourcePoint" />
+            <mxPoint x="735" y="1020" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-38" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" source="EygCwSi_lWI_55G2F0WW-34">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="585" y="1060" as="sourcePoint" />
+            <mxPoint x="495" y="1010" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-39" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="475" y="565" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-41" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" target="EygCwSi_lWI_55G2F0WW-39">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="595" y="685" as="sourcePoint" />
+            <mxPoint x="515" y="855" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-42" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" target="EygCwSi_lWI_55G2F0WW-39">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="435" y="685" as="sourcePoint" />
+            <mxPoint x="505" y="655" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-43" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="395" y="685" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-44" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#97d077;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="555" y="685" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-45" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="140" y="565" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-46" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" target="EygCwSi_lWI_55G2F0WW-45">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="260" y="685" as="sourcePoint" />
+            <mxPoint x="180" y="855" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-47" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" target="EygCwSi_lWI_55G2F0WW-45">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="100" y="685" as="sourcePoint" />
+            <mxPoint x="170" y="655" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-48" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#b3b3b3;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="60" y="685" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-49" value="key1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;gradientColor=#b3b3b3;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="220" y="685" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-50" value="rb-node" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="40" y="500" width="610" height="310" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-60" value="rb-node-red" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-50">
+          <mxGeometry x="95" y="35" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-61" value="rb-node-black" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-50">
+          <mxGeometry x="430" y="35" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-51" value="rb-left" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="40" y="1239" width="610" height="310" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-62" value="rb-left-red" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-51">
+          <mxGeometry x="95" y="30" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-63" value="rb-left-black" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-51">
+          <mxGeometry x="410" y="30" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-52" value="rb-right" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="40" y="870" width="610" height="310" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-64" value="rb-right-red" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-52">
+          <mxGeometry x="95" y="32.5" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-65" value="rb-right-black" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-52">
+          <mxGeometry x="410" y="32.5" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-1" value="key" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="452.5" y="245" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-5" value="rb-leaf" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="120" y="200" width="160" height="165" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-2" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-5">
+          <mxGeometry x="40" y="62.5" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-6" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="372.5" y="365" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-7" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="532.5" y="365" width="80" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-8" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" source="EygCwSi_lWI_55G2F0WW-7" target="EygCwSi_lWI_55G2F0WW-1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="442.5" y="585" as="sourcePoint" />
+            <mxPoint x="492.5" y="535" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-9" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="EygCwSi_lWI_55G2F0WW-69" source="EygCwSi_lWI_55G2F0WW-6" target="EygCwSi_lWI_55G2F0WW-1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="542.5" y="365" as="sourcePoint" />
+            <mxPoint x="482.5" y="335" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="EygCwSi_lWI_55G2F0WW-59" value="rb-single" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="EygCwSi_lWI_55G2F0WW-69">
+          <mxGeometry x="360" y="200" width="265" height="255" as="geometry" />
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>
Binary file Report/final/figs/RBtreeInvariantVar.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/figs/RedBlackTree.drawio	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,130 @@
+<mxfile host="app.diagrams.net" modified="2024-01-07T15:15:12.496Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" etag="q7SM7klLXe4OcTJim62M" version="22.1.17" type="device">
+  <diagram name="ページ1" id="rN4dKjHXG7ffeiCSSRsQ">
+    <mxGraphModel dx="1786" dy="768" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
+      <root>
+        <mxCell id="0" />
+        <mxCell id="1" parent="0" />
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-1" value="8" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="30" y="160" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-2" value="5" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;gradientColor=#ea6b66;" vertex="1" parent="1">
+          <mxGeometry x="-110" y="285" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-3" value="10" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#f8cecc;strokeColor=#b85450;gradientColor=#ea6b66;" vertex="1" parent="1">
+          <mxGeometry x="180" y="285" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-4" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-1" target="2AmoWmF4z2Iwg5RR4k8V-2">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="45" y="225" as="sourcePoint" />
+            <mxPoint x="95" y="175" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-6" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-1" target="2AmoWmF4z2Iwg5RR4k8V-3">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="45" y="225" as="sourcePoint" />
+            <mxPoint x="95" y="175" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-8" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="-190" y="400" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-9" value="6" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#f5f5f5;strokeColor=#666666;gradientColor=#b3b3b3;" vertex="1" parent="1">
+          <mxGeometry x="-30" y="400" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-10" value="15" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="260" y="400" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-11" value="14" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=16;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" vertex="1" parent="1">
+          <mxGeometry x="180" y="515" width="80" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-13" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-10" target="2AmoWmF4z2Iwg5RR4k8V-3">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="104" y="235" as="sourcePoint" />
+            <mxPoint x="154" y="185" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-15" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-11" target="2AmoWmF4z2Iwg5RR4k8V-10">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="114" y="245" as="sourcePoint" />
+            <mxPoint x="164" y="195" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-16" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-2" target="2AmoWmF4z2Iwg5RR4k8V-9">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="124" y="255" as="sourcePoint" />
+            <mxPoint x="174" y="205" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-17" value="" style="endArrow=none;html=1;rounded=0;fontSize=12;startSize=8;endSize=8;curved=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-2" target="2AmoWmF4z2Iwg5RR4k8V-8">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="134" y="265" as="sourcePoint" />
+            <mxPoint x="184" y="215" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-22" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="-221" y="515" width="51" height="33" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-25" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="-137" y="515" width="51" height="33" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-26" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="25" y="515" width="51" height="33" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-27" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="-56" y="515" width="51" height="33" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-28" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="145" y="628" width="51" height="33" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-29" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="242" y="630" width="51" height="33" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-30" value="Leaf" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;gradientColor=#b3b3b3;strokeColor=#666666;" vertex="1" parent="1">
+          <mxGeometry x="340" y="515" width="51" height="33" as="geometry" />
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-31" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-10" target="2AmoWmF4z2Iwg5RR4k8V-30">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="191" y="416" as="sourcePoint" />
+            <mxPoint x="241" y="366" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-32" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-28" target="2AmoWmF4z2Iwg5RR4k8V-11">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="191" y="416" as="sourcePoint" />
+            <mxPoint x="241" y="366" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-33" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-29" target="2AmoWmF4z2Iwg5RR4k8V-11">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="181" y="638" as="sourcePoint" />
+            <mxPoint x="230" y="605" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-35" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-26" target="2AmoWmF4z2Iwg5RR4k8V-9">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="191" y="416" as="sourcePoint" />
+            <mxPoint x="241" y="366" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-36" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-27" target="2AmoWmF4z2Iwg5RR4k8V-9">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="61" y="525" as="sourcePoint" />
+            <mxPoint x="20" y="490" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-37" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-8" target="2AmoWmF4z2Iwg5RR4k8V-25">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="71" y="535" as="sourcePoint" />
+            <mxPoint x="30" y="500" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="2AmoWmF4z2Iwg5RR4k8V-38" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="2AmoWmF4z2Iwg5RR4k8V-8" target="2AmoWmF4z2Iwg5RR4k8V-22">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="-140" y="490" as="sourcePoint" />
+            <mxPoint x="-101" y="525" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>
Binary file Report/final/figs/RedBlackTree.png has changed
Binary file Report/final/figs/sample.png has changed
Binary file Report/final/figs/t.png has changed
Binary file Report/final/figs/test1.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/ie-thesis.sty	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,103 @@
+%   ie-thesis:  Standard Thesis Style File @ ie.u-ryukyu
+%   (based on jsreport.cls)
+%   (c) Itsuki KUNITA (kunita@ie.u-ryukyu.ac.jp)
+%   2021/12/07
+%
+%
+% packages
+\usepackage[dvips]{graphicx}
+\usepackage[dvipdfmx]{color}
+\usepackage{setspace}
+\usepackage{url}
+\usepackage{amsmath}
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\chead{}
+\lhead{琉球大学学位論文(学士)}
+\rhead[\leftmark]{\leftmark}
+\cfoot[\thepage]{\thepage}
+\renewcommand{\chaptermark}[1]{\markboth{第\ \normalfont\thechapter\ 章~#1}{}}
+
+% settings
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{2}
+
+  
+%
+% title in Japanese
+\def\jtitle#1{\gdef\@jtitle{#1}}
+\def\@jtitle{}
+% affiliation
+\def\affiliation#1{\gdef\@affiliation{#1}}
+\def\@affiliation{}
+% student ID 
+\def\studentid#1{\gdef\@studentid{#1}}
+\def\@studentid{}
+% supervisor 
+\def\supervisor#1{\gdef\@supervisor{#1}}
+\def\@supervisor{}
+% abstract, Japanese
+\def\Jabstract#1{\gdef\@Jabstract{#1}}
+\def\Eabstract#1{\gdef\@Eabstract{#1}}
+%
+% maketitle
+\renewcommand{\maketitle}{%
+\newpage\null
+\thispagestyle{empty}
+%\pagenumbering{roman} %Don't remove.
+    \begin{center}%
+		\vskip -7.0em
+		%\begingroup
+		\renewcommand{\arraystretch}{1.5}
+		\begin{tabular}{c}
+			\textbf{\Large \number 2024年度 卒業論文}\\
+			\textbf{\Large Bachelor's Thesis}\\
+		\end{tabular}\\
+		\vspace{3zw}
+		\renewcommand{\arraystretch}{3.0}
+		\begin{tabular}{c}
+			\begin{minipage}[c]{36zw}	\center{\textbf{\LARGE \@jtitle}}\end{minipage}\\
+			\begin{minipage}[c]{36zw}	\center{\textbf{\LARGE \@title}}\end{minipage}\\
+		\end{tabular}\\%
+		\renewcommand{\arraystretch}{1.5}
+		\vspace{6zw}
+		\includegraphics[width=50mm]{logo_u-ryukyu.jpg}\\
+		\vspace{6zw}
+		\renewcommand{\arraystretch}{1.5}
+		\begin{tabular}{c}%
+			\textbf{\Large \@affiliation}\\
+			\textbf{\Large \@studentid \hspace{1zw} \@author}\\
+			\\
+			\textbf{\Large 指導教員 \hspace{1zw} \@supervisor}
+		\end{tabular}%
+	\end{center}%
+\newpage\null
+\thispagestyle{empty}
+	\begin{spacing}{1.5}
+		\leftline{\textbf{\Large 要旨}}
+	\end{spacing}
+	\begin{spacing}{1.2}
+		\fontsize{12pt}{0mm}\selectfont
+		\@Jabstract
+	\end{spacing}
+\newpage\null
+\thispagestyle{empty}
+	\begin{spacing}{1.5}
+		\leftline{\textbf{\Large Abstract}}
+	\end{spacing}
+	\begin{spacing}{1.2}
+		\fontsize{12pt}{4mm}\selectfont
+		\@Eabstract
+	\end{spacing}
+%\newpage\null
+}
+
+%章
+\renewcommand{\chapter}{%
+  \if@openright\cleardoublepage\else\clearpage\fi
+  %\pagenumbering{arabic} %Don't remove.
+  \thispagestyle{empty}%
+  \global\@topnum\z@
+  \@afterindentfalse
+  \secdef\@chapter\@schapter
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/jlisting.sty	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,216 @@
+\NeedsTeXFormat{LaTeX2e}
+\def\filedate{2006/02/20}
+\def\fileversion{0.2}
+\ProvidesPackage{jlisting}[\filedate\space\fileversion\space(Thor)]
+%
+\newcount\lst@nextchar
+\let\lst@@ProcessSpace\lst@ProcessSpace
+\def\lst@ProcessSpace#1{%
+   \lst@check@chartype{#1}%
+      \lst@@ProcessSpace
+      \lst@whitespacetrue}
+\let\lst@@ProcessLetter\lst@ProcessLetter
+\def\lst@ProcessLetter#1#2{%
+   \lst@check@chartype{#2}%
+      {\lst@@ProcessLetter{#1}}%
+      \relax}
+\let\lst@@ProcessDigit\lst@ProcessDigit
+\def\lst@ProcessDigit#1#2{%
+   \lst@check@chartype{#2}%
+      {\lst@@ProcessDigit{#1}}%
+      \relax}
+\let\lst@@ProcessOther\lst@ProcessOther
+\def\lst@ProcessOther#1#2{%
+   \lst@check@chartype{#2}%
+      {\lst@@ProcessOther{#1}}%
+      \relax}
+\let\lst@@ProcessTabulator\lst@ProcessTabulator
+\def\lst@ProcessTabulator#1{%
+   \lst@check@chartype{#1}%
+      \lst@@ProcessTabulator
+      \relax}
+\def\lst@check@chartype#1#2#3{%
+   \edef\@tempa{\lst@nextchar=`\string#1\relax}%
+   \afterassignment\remove@to@nnil
+   \@tempa\@nnil
+   #2%
+   \ifnum\lst@nextchar<\@cclvi
+      #3%
+   \else
+      \lst@ifletter \else \lst@OutputOther \fi
+      \lst@whitespacefalse
+      \expandafter\lst@AppendJchar
+   \fi
+   #1}
+\def\lst@AppendJchar#1#2{%
+   \lst@check@chartype{#2}%
+      {\advance\lst@length\@ne\lst@Append{#1}}%
+      \relax}
+\def\lst@check@chartype@BOL#1{%
+   \edef\@tempa{\lst@nextchar=`\string#1\relax}%
+   \afterassignment\remove@to@nnil
+   \@tempa\@nnil
+   \ifnum\lst@nextchar<\@cclvi\else
+      \lst@whitespacefalse
+      \expandafter\lst@AppendJchar
+   \fi
+   #1}
+\def\lst@InputListing#1{%
+   \begingroup
+      \lsthk@PreSet \gdef\lst@intname{#1}%
+      \expandafter\lstset\expandafter{\lst@set}%
+      \lsthk@DisplayStyle
+      \catcode\active=\active
+      \lst@Init\relax \let\lst@gobble\z@
+      \lst@SkipToFirst
+      \lst@ifprint \def\lst@next{\lst@get@filecontents{#1}}%
+      \else        \let\lst@next\@empty
+      \fi
+      \lst@next
+      \lst@DeInit
+   \endgroup}
+\newread\lst@inputfile
+\def\lst@get@filecontents#1{%
+   \let\lst@filecontents\@empty
+   \openin\lst@inputfile=#1\relax
+   \let\@lst@get@filecontents@prevline\relax
+   \lst@get@filecontents@loop
+   \closein\lst@inputfile
+   \lst@filecontents\empty}
+\def\lst@get@filecontents@loop{%
+   \read\lst@inputfile to\@lst@get@filecontents@currline
+   \ifx\@lst@get@filecontents@prevline\relax\else
+      \expandafter\expandafter\expandafter\def
+      \expandafter\expandafter\expandafter\lst@filecontents
+      \expandafter\expandafter\expandafter{%
+         \expandafter\lst@filecontents\@lst@get@filecontents@prevline}%
+   \fi
+   \let\@lst@get@filecontents@prevline\@lst@get@filecontents@currline
+   \ifeof\lst@inputfile\else
+      \expandafter\lst@get@filecontents@loop
+   \fi}
+%%% [$B$3$N=hM}$b!$AjEv6/0z$G$9!%(B]
+\def\lst@BOLGobble{%
+   \ifnum\lst@gobble>\z@
+      \@tempcnta\lst@gobble\relax
+      \expandafter\lst@BOLGobble@
+   \else
+      \expandafter\lst@check@chartype@BOL
+   \fi}
+\def\lst@BOLGobble@#1{%
+   \let\lst@next#1%
+   \ifx \lst@next\relax\else
+   \ifx \lst@next\lst@MProcessListing\else
+   \ifx \lst@next\lst@ProcessFormFeed\else
+   \ifx \lst@next\lstenv@backslash
+      \let\lst@next\lstenv@BOLGobble@@
+   \else
+      \let\lst@next\lst@BOLGobble@@
+      \ifx #1\lst@ProcessTabulator
+         \advance\@tempcnta-\lst@tabsize\relax
+         \ifnum\@tempcnta<\z@
+            \lst@length-\@tempcnta \lst@PreGotoTabStop
+         \fi
+      \else
+         \edef\@tempa{\lst@nextchar=`\string#1\relax}%
+         \@tempa
+         \ifnum\lst@nextchar<\@cclvi\else
+            \advance\@tempcnta\m@ne
+         \fi
+         \advance\@tempcnta\m@ne
+      \fi
+   \fi \fi \fi \fi
+   \lst@next}
+\def\lst@BOLGobble@@{%
+   \ifnum\@tempcnta>\z@
+      \expandafter\lst@BOLGobble@
+   \else
+      \expandafter\lst@check@chartype@BOL
+   \fi
+}
+%
+%    \begin{$B=$@5;v9`(B}{1.3}
+% $B$A$g$C$H$7$?=$@5(B
+\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1}
+% $B%=!<%9%3!<%IL\<!$K$*$1$kJ8;z$HHV9f$N6u$-(B
+\let \l@lstlisting = \l@figure
+% $B%-%c%W%7%g%s$H%=!<%9%3!<%IL\<!$KBP$9$kF|K\8lBP1~(B
+\def\lstlistingname{$B%=!<%9%3!<%I(B}
+\def\lstlistlistingname{$B%=!<%9%3!<%IL\<!(B}
+%    \end{$B=$@5;v9`(B}
+\endinput
+% 
+%#!platex
+\documentclass[papersize]{jsarticle}
+% Macros
+\IfFileExists{dvipdfmx.def}{%
+  \usepackage[dvipdfmx]{color,graphicx}%
+}{%
+  \usepackage[dvipdfm]{color,graphicx}%
+}
+\usepackage{listings}[2004/09/07]
+\usepackage{jlisting}[2006/02/20]
+\usepackage{url} 
+\usepackage{verbatim}
+
+\makeatletter
+% Original Macros
+\def\email#1{\gdef\@email{\texttt{#1}}}
+\def\homepage#1{\gdef\@homepage{\texttt{#1}}}
+\def\mac#1{\textsf{#1}}
+\def\URL#1{\texttt{#1}}
+\def\src#1{\texttt{#1}}
+
+% Dvipdfmx.def 
+\def\dvipdfmxDefi{http://tex.dante.jp/ok/dvipdfmx/}
+\def\dvipdfmxDefii{http://ftp.ktug.or.kr/KTUG/dvipdfmx/contrib/latex/}
+
+\IfFileExists{dvipdfmx.def}{%
+   \let \IfDvipdfmxDef = \empty \relax}{%
+   \typeout{^^Jget dvipdfmx.def at \dvipdfmxDefi^^J
+            or \dvipdfmxDefii^^J}%
+   \def\IfDvipdfmxDef{Get \src{dvipdfmx.def} at \URL \dvipdfmxDefii \\ 
+      or \URL \dvipdfmxDefi.}%
+}
+
+% Author Info
+\author   {Th\'or Watanabe\thanks \@email \space \thanks \@homepage}
+\title    {\mac{jlisting.sty}\\
+          ---Japanese Localized Patch File of \mac{listings}---}
+\email    {thor@tex.dante.jp}
+\homepage {http://tex.dante.jp/typo/}
+\date     {2006/02/20}
+
+\makeatother
+
+\begin{document}
+\maketitle
+%\IfDvipdfmxDef
+
+\section{$B$A$g$C$H$7$?@bL@(B}% Short Description
+ 
+$B1|B<@2I';a$N7G<(HD$N!VHFMQE*$JIbF0BN!W$H$$$&0lO"$N=q$-9~$_$+$i(B
+$BE>:\$7$^$7$?!#(B
+
+\begin{quote}
+ \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21172.html}\\
+ \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21184.html}\\
+ \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21189.html}\\
+ \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21197.html}
+\end{quote}
+
+ Copyright $B$O5H1JE/H~;a$K$"$k$N$@$H;W$$$^$9!%(B
+ 
+\section{$B99?7MzNr(B}% ChageLogs
+
+\begin{description}
+ \item[ver.~0.1 (2004/03/24)]
+   $B$H$j$"$($:8x3+!%(B
+ \item[ver.~0.2 (2006/02/20)] 
+   \verb|\lst@breakProcessOther| $BL?Na$NDj5A$NDI2C!%(B
+\end{description}
+
+\section{$B%=!<%9%3!<%I(B}
+\par\narrowbaselines
+\verbatiminput{jlisting.sty}
+\end{document}
Binary file Report/final/logo_u-ryukyu.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/mm/GearsAgda による Red Black Tree の証明付き実装に関する研究 .mm	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,358 @@
+<map version="freeplane 1.11.5">
+<!--To view this file, download free mind mapping software Freeplane from https://www.freeplane.org -->
+<node TEXT="GearsAgda による Red Black Tree の証明付き実装に関する研究 " FOLDED="false" ID="ID_696401721" CREATED="1610381621824" MODIFIED="1703311736547" STYLE="oval">
+<font SIZE="18"/>
+<hook NAME="MapStyle" zoom="0.77">
+    <properties edgeColorConfiguration="#808080ff,#ff0000ff,#0000ffff,#00ff00ff,#ff00ffff,#00ffffff,#7c0000ff,#00007cff,#007c00ff,#7c007cff,#007c7cff,#7c7c00ff" associatedTemplateLocation="template:/standard-1.6.mm" fit_to_viewport="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node" STYLE="oval" UNIFORM_SHAPE="true" VGAP_QUANTITY="24 pt">
+<font SIZE="24"/>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="bottom_or_right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="default" ID="ID_271890427" ICON_SIZE="12 pt" COLOR="#000000" STYLE="fork">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="200" DASH="" FONT_SIZE="9" FONT_FAMILY="SansSerif" DESTINATION="ID_271890427" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+<richcontent TYPE="DETAILS" CONTENT-TYPE="plain/auto"/>
+<richcontent TYPE="NOTE" CONTENT-TYPE="plain/auto"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.attributes">
+<font SIZE="9"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.note" COLOR="#000000" BACKGROUND_COLOR="#ffffff" TEXT_ALIGN="LEFT"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.selection" BACKGROUND_COLOR="#afd3f7" BORDER_COLOR_LIKE_EDGE="false" BORDER_COLOR="#afd3f7"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="bottom_or_right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" ID="ID_67550811">
+<icon BUILTIN="yes"/>
+<arrowlink COLOR="#003399" TRANSPARENCY="255" DESTINATION="ID_67550811"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.flower" COLOR="#ffffff" BACKGROUND_COLOR="#255aba" STYLE="oval" TEXT_ALIGN="CENTER" BORDER_WIDTH_LIKE_EDGE="false" BORDER_WIDTH="22 pt" BORDER_COLOR_LIKE_EDGE="false" BORDER_COLOR="#f9d71c" BORDER_DASH_LIKE_EDGE="false" BORDER_DASH="CLOSE_DOTS" MAX_WIDTH="6 cm" MIN_WIDTH="3 cm"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="bottom_or_right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000" STYLE="oval" SHAPE_HORIZONTAL_MARGIN="10 pt" SHAPE_VERTICAL_MARGIN="10 pt">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,5"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,6"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,7"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,8"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,9"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,10"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,11"/>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<hook NAME="AutomaticEdgeColor" COUNTER="15" RULE="ON_BRANCH_CREATION"/>
+<node TEXT="Agda" POSITION="bottom_or_right" ID="ID_1938302193" CREATED="1703311610221" MODIFIED="1703312900263">
+<edge COLOR="#00ffff"/>
+<node TEXT="std-lib" ID="ID_1358634657" CREATED="1703311778365" MODIFIED="1703311790842"/>
+<node TEXT="can write proof" ID="ID_162715376" CREATED="1703311808901" MODIFIED="1703311940225">
+<node TEXT="Curry-Howard" ID="ID_486927022" CREATED="1703312906331" MODIFIED="1703312971929"/>
+<node TEXT="信頼性はmodel検査より高い " ID="ID_1434467856" CREATED="1703316267335" MODIFIED="1703316293963"/>
+</node>
+<node TEXT="Pure functional" ID="ID_963551558" CREATED="1703311944539" MODIFIED="1703312993977" HGAP_QUANTITY="12.5 pt"/>
+<node TEXT="dependent type" ID="ID_1396216557" CREATED="1703313560819" MODIFIED="1703313573332">
+<node TEXT="型を変数に代入できる" ID="ID_144786507" CREATED="1703313575076" MODIFIED="1703313588407"/>
+</node>
+</node>
+<node TEXT="GearsAgda" POSITION="bottom_or_right" ID="ID_858711557" CREATED="1703310951358" MODIFIED="1703311460230">
+<edge COLOR="#00ff00"/>
+<node TEXT="Hoare Logic" ID="ID_1110257102" CREATED="1703311443182" MODIFIED="1703313102456">
+<node TEXT="command bace" ID="ID_1113392349" CREATED="1703313102999" MODIFIED="1703313111881"/>
+<node TEXT="アセンブラ的" ID="ID_1846846967" CREATED="1703313112967" MODIFIED="1703313176073"/>
+</node>
+<node TEXT="written in agda" ID="ID_834864022" CREATED="1703313262290" MODIFIED="1703313318477">
+<node TEXT="extend CbC" ID="ID_1660901417" CREATED="1703313318986" MODIFIED="1703313398968">
+<node TEXT="codeGear in agda" ID="ID_749974204" CREATED="1703313479366" MODIFIED="1703313541950"/>
+<node TEXT="dataGear in agda" ID="ID_1215306970" CREATED="1703313484337" MODIFIED="1703313546718">
+<node TEXT="record" ID="ID_129886151" CREATED="1703313665873" MODIFIED="1703313669984"/>
+</node>
+</node>
+</node>
+<node TEXT="light weight continuation" ID="ID_1032067491" CREATED="1703313414632" MODIFIED="1703313429016">
+<node TEXT="Terminating Loop" ID="ID_127858954" CREATED="1703315301380" MODIFIED="1703315305707"/>
+<node TEXT="next exit" ID="ID_692648135" CREATED="1703316527820" MODIFIED="1703316534100"/>
+</node>
+</node>
+<node TEXT="RedBlackTree" POSITION="bottom_or_right" ID="ID_482189525" CREATED="1703311386574" MODIFIED="1703319612594">
+<edge COLOR="#0000ff"/>
+<node TEXT="Red and Black" ID="ID_1421084596" CREATED="1703314001962" MODIFIED="1703314020877">
+<node TEXT="赤のノードは黒ノードを2つ子に持つ" ID="ID_991283327" CREATED="1703314257065" MODIFIED="1703314277086"/>
+<node TEXT="葉 (NIL) はすべて黒である。葉はすべて根と同じ色である" ID="ID_710907331" CREATED="1703314288237" MODIFIED="1703314297143"/>
+</node>
+<node TEXT="Invariant" ID="ID_1503136892" CREATED="1703314021275" MODIFIED="1703314093675">
+<node TEXT="RBtree Invaiant" ID="ID_556420901" CREATED="1703314318977" MODIFIED="1703314436967">
+<node TEXT="denotation semantics" ID="ID_267115045" CREATED="1703314420805" MODIFIED="1703314446309"/>
+<node TEXT="key relation" ID="ID_1635985153" CREATED="1703315051463" MODIFIED="1703315054215"/>
+<node TEXT="child black depth equal" ID="ID_1060623123" CREATED="1703315054825" MODIFIED="1703315080918"/>
+</node>
+<node TEXT="stack Invariant" ID="ID_1520764231" CREATED="1703314358462" MODIFIED="1703314414639"/>
+<node TEXT="replacedRBTree" ID="ID_1444375167" CREATED="1703314362592" MODIFIED="1703314405428"/>
+</node>
+<node TEXT="balance" ID="ID_1569004028" CREATED="1703314094006" MODIFIED="1703314097993">
+<node TEXT="need rotate" ID="ID_1789323856" CREATED="1703314512932" MODIFIED="1703314586817">
+<node TEXT="parent and grand parent" ID="ID_467621285" CREATED="1703314523519" MODIFIED="1703314567590">
+<node TEXT="in stack" ID="ID_1090762021" CREATED="1703315404037" MODIFIED="1703315409758"/>
+</node>
+</node>
+<node TEXT="black depth" ID="ID_1541876832" CREATED="1703315040574" MODIFIED="1703315046631">
+<node TEXT="根から葉までの道に含まれる黒いノードの数は同じ" ID="ID_898481104" CREATED="1703314299041" MODIFIED="1703314493815"/>
+</node>
+</node>
+<node TEXT="binary tree" ID="ID_1862448471" CREATED="1703314098393" MODIFIED="1703314740654">
+<node TEXT="like binary tree&apos;s key relation" ID="ID_1871332779" CREATED="1703314741233" MODIFIED="1703314795630"/>
+</node>
+<node TEXT="Insert" ID="ID_1954401003" CREATED="1703314326575" MODIFIED="1703314926272">
+<node TEXT="replace and rotate" ID="ID_227566284" CREATED="1703314926759" MODIFIED="1703314934705"/>
+<node TEXT="find point" ID="ID_389146302" CREATED="1703320912909" MODIFIED="1703320920384"/>
+<node TEXT="InsertCase" ID="ID_1752580042" CREATED="1703314935191" MODIFIED="1703314943390">
+<node TEXT="with parent grand parent and uncle Color" ID="ID_1209980644" CREATED="1703314943908" MODIFIED="1703314997146"/>
+</node>
+</node>
+</node>
+<node TEXT="開発環境" POSITION="top_or_left" ID="ID_767884141" CREATED="1703311472174" MODIFIED="1705311481398">
+<edge COLOR="#ff00ff"/>
+<node TEXT="emacs" ID="ID_1742884693" CREATED="1703313774253" MODIFIED="1703313775908">
+<node TEXT="singularity" ID="ID_182903529" CREATED="1703313776312" MODIFIED="1703313779593"/>
+</node>
+<node TEXT="agda 2.6.4 (2.6.3)" ID="ID_1432414475" CREATED="1703313784015" MODIFIED="1703313819752">
+<node TEXT="std-libのupdate" ID="ID_803135622" CREATED="1705311486339" MODIFIED="1705311494198"/>
+</node>
+<node TEXT="vscode" ID="ID_380030813" CREATED="1703313789829" MODIFIED="1704376649104">
+<node TEXT="学科サーバー内で動かせなかった" ID="ID_257015512" CREATED="1704376649482" MODIFIED="1704376669285"/>
+</node>
+</node>
+<node TEXT="BinaryTree" POSITION="bottom_or_right" ID="ID_1528815852" CREATED="1703313000337" MODIFIED="1703314050077">
+<edge COLOR="#00007c"/>
+<node TEXT="Invariant" ID="ID_671378709" CREATED="1703314065052" MODIFIED="1703314625238">
+<node TEXT="treeInvariant" ID="ID_1939585880" CREATED="1703314625691" MODIFIED="1703314633406"/>
+<node TEXT="stack Invariant" ID="ID_994899281" CREATED="1703314633713" MODIFIED="1703314642775"/>
+<node TEXT="replace Invariant" ID="ID_743544968" CREATED="1703314643150" MODIFIED="1703314652769"/>
+</node>
+<node TEXT="not balance" ID="ID_777342270" CREATED="1703314667100" MODIFIED="1703314670512"/>
+<node TEXT="key" ID="ID_638932914" CREATED="1703314671881" MODIFIED="1703314694953">
+<node TEXT="left-c key &lt; self key &lt; right-c key" ID="ID_1174001223" CREATED="1703314697985" MODIFIED="1703314729878"/>
+</node>
+<node TEXT="value" ID="ID_681774161" CREATED="1703314695130" MODIFIED="1703314696685"/>
+</node>
+<node TEXT="信頼性" POSITION="bottom_or_right" ID="ID_777479685" CREATED="1703316746471" MODIFIED="1703316754990">
+<edge COLOR="#ff00ff"/>
+<node TEXT="手法" ID="ID_818336654" CREATED="1703316755725" MODIFIED="1703319397008">
+<node TEXT="modelチェック" ID="ID_527217977" CREATED="1703319397538" MODIFIED="1703319402003"/>
+<node TEXT="証明" ID="ID_1805763299" CREATED="1703319402396" MODIFIED="1703319404784">
+<node TEXT="agda" ID="ID_9443047" CREATED="1703319428779" MODIFIED="1703319430792"/>
+<node TEXT="数学的な証明" ID="ID_363305579" CREATED="1703320126209" MODIFIED="1703320132070"/>
+</node>
+<node TEXT="テスト" ID="ID_981985001" CREATED="1703319405324" MODIFIED="1703319421040"/>
+</node>
+<node TEXT="OSの信頼性を高めることが重要" ID="ID_910013823" CREATED="1703319434111" MODIFIED="1703319447019">
+<node TEXT="システムの安全性" ID="ID_257450033" CREATED="1703319447203" MODIFIED="1703319469915"/>
+<node TEXT="データの安全性" ID="ID_378313638" CREATED="1703319485088" MODIFIED="1703319504537"/>
+<node TEXT="セキュリティの向上" ID="ID_1339569589" CREATED="1703319492922" MODIFIED="1703319521884"/>
+<node TEXT="全体的に高めることが必要" ID="ID_251613690" CREATED="1703319526721" MODIFIED="1703319534412"/>
+</node>
+</node>
+<node TEXT="GearsOS" POSITION="top_or_left" ID="ID_382499928" CREATED="1703311382610" MODIFIED="1703315262195">
+<edge COLOR="#7c007c"/>
+<node TEXT="CbC" ID="ID_635727735" CREATED="1703313869942" MODIFIED="1703313872526">
+<node TEXT="codeGear" ID="ID_1436242432" CREATED="1703313920111" MODIFIED="1703313922667"/>
+<node TEXT="dataGear" ID="ID_426647285" CREATED="1703313923353" MODIFIED="1703313926496"/>
+<node TEXT="metaGear" ID="ID_539597067" CREATED="1703313926935" MODIFIED="1703313929577"/>
+<node TEXT="ノーマルレベルとメタレベルの切り分けが容易" ID="ID_811985669" CREATED="1703316364945" MODIFIED="1703316400152"/>
+<node TEXT="goto" ID="ID_1302274179" CREATED="1703316565131" MODIFIED="1703316566889">
+<node TEXT="軽量継続" ID="ID_551405100" CREATED="1705311512232" MODIFIED="1705311516978"/>
+</node>
+</node>
+<node TEXT="xv6" ID="ID_1094562168" CREATED="1703313873463" MODIFIED="1703313880820"/>
+<node TEXT="GearsAgda" ID="ID_1202420026" CREATED="1703313889913" MODIFIED="1703313894314"/>
+</node>
+<node TEXT="先行研究" POSITION="bottom_or_right" ID="ID_239854241" CREATED="1703315746284" MODIFIED="1703315753118">
+<edge COLOR="#007c7c"/>
+<node TEXT="GearsAgda による Left Learning Red Black Tree の検証" ID="ID_443063168" CREATED="1703316119629" MODIFIED="1703320032364">
+<node TEXT="上地悠斗" ID="ID_1184402994" CREATED="1703316121997" MODIFIED="1703316132779"/>
+</node>
+<node ID="ID_303431488" CREATED="1703316142555" MODIFIED="1703316142555"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    Continuation based c での hoare logic を用 いた仕様記述と検証
+  </body>
+</html>
+</richcontent>
+<node TEXT="外間政尊" ID="ID_524377473" CREATED="1703316148001" MODIFIED="1703316153659"/>
+</node>
+</node>
+<node TEXT="目次" POSITION="top_or_left" ID="ID_112645393" CREATED="1703316180032" MODIFIED="1704297501753">
+<edge COLOR="#7c7c00"/>
+<node TEXT="タイトル" ID="ID_540915565" CREATED="1703316186948" MODIFIED="1703316195043">
+<node TEXT="" ID="ID_1176787383" CREATED="1703316190289" MODIFIED="1703316195043">
+<node ID="ID_629441507" CREATED="1703316207578" MODIFIED="1703316207578"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      GearsAgda による Red Black Tree の証明付き実装に関する研究
+    </p>
+  </body>
+</html>
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="背景と目的" ID="ID_1761146831" CREATED="1704375038435" MODIFIED="1704375047238">
+<node TEXT="GearsOS" ID="ID_783568924" CREATED="1704375049694" MODIFIED="1704375152070">
+<node TEXT="xv6" ID="ID_1325840873" CREATED="1704376020776" MODIFIED="1704376022809"/>
+<node TEXT="cbc" ID="ID_573871623" CREATED="1704376023352" MODIFIED="1704376024597"/>
+<node TEXT="GearsAgda" ID="ID_719683352" CREATED="1704376024802" MODIFIED="1704376027396"/>
+</node>
+<node TEXT="信頼性の向上" ID="ID_1417406673" CREATED="1704375200036" MODIFIED="1704375429366">
+<node TEXT="model-check" ID="ID_1524191443" CREATED="1704375952651" MODIFIED="1704375956822"/>
+<node TEXT="test" ID="ID_757506901" CREATED="1704375957859" MODIFIED="1704376005285"/>
+<node TEXT="定理証明" ID="ID_235992748" CREATED="1704376005660" MODIFIED="1704376009980">
+<node TEXT="agda" ID="ID_1243397225" CREATED="1704376010756" MODIFIED="1704376012503"/>
+</node>
+</node>
+<node TEXT="RedBlackTree" ID="ID_419027187" CREATED="1704375439622" MODIFIED="1704375947335">
+<node TEXT="file system" ID="ID_337391377" CREATED="1704375947853" MODIFIED="1704375950729"/>
+<node TEXT="O(log n)" ID="ID_49454422" CREATED="1704376046819" MODIFIED="1704376050981"/>
+</node>
+<node TEXT="現代社会との兼ね合いが微妙にわかってない" ID="ID_93594044" CREATED="1704551431134" MODIFIED="1704551449749"/>
+</node>
+<node TEXT="基礎概念" ID="ID_672047297" CREATED="1704554845314" MODIFIED="1704554848559">
+<node TEXT="CbC" ID="ID_451139413" CREATED="1703316218537" MODIFIED="1704374567152">
+<node TEXT="GearsOS" ID="ID_901097112" CREATED="1704300344201" MODIFIED="1704374597537"/>
+<node TEXT="Cの下位言語" ID="ID_1673503957" CREATED="1704374597913" MODIFIED="1704374605265"/>
+<node TEXT="軽量継続" ID="ID_1390487898" CREATED="1704374605802" MODIFIED="1704374648132">
+<node TEXT="terminationLoopS" ID="ID_104177921" CREATED="1704376301706" MODIFIED="1704376304623"/>
+</node>
+<node TEXT="Hoare Logic" ID="ID_404656291" CREATED="1704374514879" MODIFIED="1704374519034"/>
+</node>
+<node TEXT="GearsOS" ID="ID_1300798960" CREATED="1704375049694" MODIFIED="1704375152070">
+<node TEXT="xv6" ID="ID_1542282102" CREATED="1704376020776" MODIFIED="1704376022809"/>
+<node TEXT="cbc" ID="ID_1985668130" CREATED="1704376023352" MODIFIED="1704376024597"/>
+<node TEXT="GearsAgda" ID="ID_291434953" CREATED="1704376024802" MODIFIED="1704376027396"/>
+</node>
+<node TEXT="GearsAgda" ID="ID_1016318378" CREATED="1704374569377" MODIFIED="1704635188534">
+<node TEXT="CbCにコンパイルできる" ID="ID_1900342883" CREATED="1704374660171" MODIFIED="1704376170624"/>
+<node TEXT="next exit" ID="ID_32000344" CREATED="1704376306809" MODIFIED="1704635188534">
+<node TEXT="不定形t" ID="ID_318562570" CREATED="1704376313869" MODIFIED="1704376316520"/>
+</node>
+</node>
+<node TEXT="RedBlackTree" ID="ID_1611587583" CREATED="1703316238130" MODIFIED="1704374322889">
+<node TEXT="Invariant" ID="ID_846863218" CREATED="1704373857326" MODIFIED="1704376394404">
+<node TEXT="RBTree" ID="ID_137324757" CREATED="1704375253131" MODIFIED="1704375262108"/>
+<node TEXT="stack" ID="ID_1672661961" CREATED="1704375264317" MODIFIED="1704375266193"/>
+<node TEXT="replace" ID="ID_1639823065" CREATED="1704375266496" MODIFIED="1704375268280"/>
+</node>
+<node TEXT="Color" ID="ID_298586715" CREATED="1704373865515" MODIFIED="1704375295922">
+<node TEXT="black" ID="ID_658160232" CREATED="1704375271212" MODIFIED="1704375273425"/>
+<node TEXT="red" ID="ID_1267425431" CREATED="1704375274191" MODIFIED="1704375295922"/>
+</node>
+<node TEXT="black-depth" ID="ID_83003059" CREATED="1704375236557" MODIFIED="1704375241363"/>
+<node TEXT="binary tree" ID="ID_1511745726" CREATED="1704373871265" MODIFIED="1704374299957">
+<node TEXT="key-relation" ID="ID_595160917" CREATED="1704375284034" MODIFIED="1704375287842"/>
+</node>
+<node TEXT="Insert / delete /" ID="ID_1273400332" CREATED="1704374300142" MODIFIED="1704374323174"/>
+<node TEXT="balance / rotation" ID="ID_515385692" CREATED="1704374323686" MODIFIED="1704374332126"/>
+</node>
+<node TEXT="Agda" ID="ID_1207755389" CREATED="1703316217426" MODIFIED="1704635083579">
+<node TEXT="" ID="ID_733201320" CREATED="1704298803799" MODIFIED="1704635093102"/>
+<node TEXT="Curry-Howard" ID="ID_1442329997" CREATED="1704374997248" MODIFIED="1704375005768"/>
+<node TEXT="記述方法" ID="ID_1207929610" CREATED="1704375011029" MODIFIED="1704375014296">
+<node TEXT="data" ID="ID_1978762003" CREATED="1704635125238" MODIFIED="1704635154020"/>
+<node TEXT="record" ID="ID_224722429" CREATED="1704635154381" MODIFIED="1704635155844"/>
+<node TEXT="関数" ID="ID_484397011" CREATED="1704635156540" MODIFIED="1704871370840"/>
+<node TEXT="with cmp" ID="ID_1005928257" CREATED="1704871372233" MODIFIED="1704871377337"/>
+</node>
+<node TEXT="証明支援系言語" ID="ID_121700796" CREATED="1704555164933" MODIFIED="1704555173680">
+<node TEXT="証明" ID="ID_762002085" CREATED="1704635094687" MODIFIED="1704635097076"/>
+<node TEXT="信頼性" ID="ID_1200771428" CREATED="1704635097372" MODIFIED="1704635099427"/>
+</node>
+</node>
+<node TEXT="HoareLogic" ID="ID_1985037435" CREATED="1704636989357" MODIFIED="1704636994813">
+<node TEXT="説明しなくてもよい?" ID="ID_1026895626" CREATED="1704636994998" MODIFIED="1704637003077"/>
+</node>
+</node>
+<node TEXT="提案手法" ID="ID_456933326" CREATED="1704554849158" MODIFIED="1704554852804">
+<node TEXT="GearsAgda" ID="ID_1312317840" CREATED="1704554858912" MODIFIED="1704554886515">
+<node TEXT="next exit" POSITION="top_or_left" ID="ID_1586097940" CREATED="1704554889832" MODIFIED="1704554908461">
+<node TEXT="tを返す継続" ID="ID_1285913424" CREATED="1704554908599" MODIFIED="1704554916308"/>
+</node>
+</node>
+<node TEXT="BinarySearchTreeから" ID="ID_962612005" CREATED="1704967683236" MODIFIED="1704967699124"/>
+<node TEXT="Invariant" ID="ID_1186387495" CREATED="1704554873856" MODIFIED="1704554889316">
+<node TEXT="" ID="ID_1962915853" CREATED="1705311328800" MODIFIED="1705311328800"/>
+</node>
+</node>
+<node TEXT="実装" ID="ID_1596773825" CREATED="1704555219167" MODIFIED="1704555305827">
+<node TEXT="RedBlackTreeの基本的な実装" ID="ID_629524970" CREATED="1704968909419" MODIFIED="1704968926902">
+<node TEXT="bt" ID="ID_355768357" CREATED="1704968927278" MODIFIED="1704968929180"/>
+<node TEXT="key" ID="ID_327506458" CREATED="1704968931581" MODIFIED="1704968932440"/>
+<node TEXT="value" ID="ID_140567944" CREATED="1704968932650" MODIFIED="1704968935408"/>
+</node>
+<node TEXT="Invariant" ID="ID_1202330026" CREATED="1704373857326" MODIFIED="1704376394404">
+<node TEXT="RBTree" ID="ID_1287480503" CREATED="1704375253131" MODIFIED="1704375262108">
+<node TEXT="denotation semantics" ID="ID_309855673" CREATED="1704635276171" MODIFIED="1704635281303"/>
+</node>
+<node TEXT="stack" ID="ID_1504280689" CREATED="1704375264317" MODIFIED="1704375266193">
+<node TEXT="木をたどる" ID="ID_534305106" CREATED="1705047721425" MODIFIED="1705047728656"/>
+</node>
+<node TEXT="replace" ID="ID_1351933477" CREATED="1704375266496" MODIFIED="1704375268280"/>
+</node>
+<node TEXT="findRBT" ID="ID_1923877919" CREATED="1704555309862" MODIFIED="1704555316414">
+<node TEXT="RBtDown" ID="ID_1630381887" CREATED="1704555818488" MODIFIED="1704555837509">
+<node TEXT="left" ID="ID_1317309879" CREATED="1704555839274" MODIFIED="1704555840831"/>
+<node TEXT="right" ID="ID_1979881457" CREATED="1704555841695" MODIFIED="1704555846353"/>
+</node>
+<node TEXT="Invariant" ID="ID_1055736641" CREATED="1704555889746" MODIFIED="1704555892687">
+<node TEXT="RBtreeInvariant" ID="ID_1708937828" CREATED="1704555893110" MODIFIED="1704555898044"/>
+<node TEXT="treeInvariant" ID="ID_1772308252" CREATED="1704555899016" MODIFIED="1704555906171"/>
+</node>
+<node TEXT="Terminating Loopsとの接続はまだ" ID="ID_1063242944" CREATED="1705138940869" MODIFIED="1705312136382"/>
+</node>
+<node TEXT="insertcase ???" ID="ID_1362467714" CREATED="1704555316913" MODIFIED="1704555752465">
+<node TEXT="完成してない" ID="ID_874205117" CREATED="1704555931921" MODIFIED="1704555935323"/>
+<node TEXT="大枠はできている?" ID="ID_1505652294" CREATED="1704555937132" MODIFIED="1704555950267"/>
+</node>
+</node>
+<node TEXT="今後" ID="ID_45366987" CREATED="1703316218859" MODIFIED="1703316228477">
+<node TEXT="CbCへのコンパイル" ID="ID_978700547" CREATED="1705311266824" MODIFIED="1705311272906"/>
+<node TEXT="insert,deleteの実装" ID="ID_339952755" CREATED="1705311273798" MODIFIED="1705311286581"/>
+<node TEXT="Loopでつなげる" ID="ID_528700866" CREATED="1705311286983" MODIFIED="1705311293429"/>
+</node>
+</node>
+</node>
+</map>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/mm/gears_fs_db.mm	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,662 @@
+<map version="freeplane 1.9.8">
+<!--To view this file, download free mind mapping software Freeplane from https://www.freeplane.org -->
+<node TEXT="GearsOS上のファイルシステムとDBの信頼性(仮)" FOLDED="false" ID="ID_452131666" CREATED="1610381621610" MODIFIED="1702111913150" STYLE="oval">
+<font SIZE="18"/>
+<hook NAME="MapStyle" zoom="0.8">
+    <properties edgeColorConfiguration="#808080ff,#ff0000ff,#0000ffff,#00ff00ff,#ff00ffff,#00ffffff,#7c0000ff,#00007cff,#007c00ff,#7c007cff,#007c7cff,#7c7c00ff" associatedTemplateLocation="template:/standard-1.6-noEdgeColor.mm" fit_to_viewport="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node" STYLE="oval" UNIFORM_SHAPE="true" VGAP_QUANTITY="24 pt">
+<font SIZE="24"/>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="default" ID="ID_207122690" COLOR="#000000" STYLE="fork">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="200" DASH="" FONT_SIZE="9" FONT_FAMILY="SansSerif" DESTINATION="ID_207122690" STARTARROW="DEFAULT" ENDARROW="NONE"/>
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+<richcontent CONTENT-TYPE="plain/auto" TYPE="DETAILS"/>
+<richcontent TYPE="NOTE" CONTENT-TYPE="plain/auto"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.attributes">
+<font SIZE="9"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.note" COLOR="#000000" BACKGROUND_COLOR="#ffffff" TEXT_ALIGN="LEFT"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.selection" BACKGROUND_COLOR="#4e85f8" BORDER_COLOR_LIKE_EDGE="false" BORDER_COLOR="#4e85f8"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" ID="ID_3752836">
+<icon BUILTIN="yes"/>
+<arrowlink COLOR="#003399" TRANSPARENCY="255" DESTINATION="ID_3752836"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000" STYLE="oval" SHAPE_HORIZONTAL_MARGIN="10 pt" SHAPE_VERTICAL_MARGIN="10 pt">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,5"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,6"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,7"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,8"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,9"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,10"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,11"/>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="Gears OS" POSITION="right" ID="ID_1060626979" CREATED="1699848393025" MODIFIED="1702111913149" HGAP_QUANTITY="-5.5 pt" VSHIFT_QUANTITY="-72.75 pt">
+<node TEXT="特徴" ID="ID_943482341" CREATED="1702111230723" MODIFIED="1702111233987">
+<node TEXT="metaGear" ID="ID_160728835" CREATED="1702111234234" MODIFIED="1702111815711">
+<node TEXT="データの整合性" ID="ID_1532293232" CREATED="1702111816103" MODIFIED="1702111830986"/>
+<node TEXT="資源管理" ID="ID_820593070" CREATED="1702111831179" MODIFIED="1702111834866"/>
+</node>
+<node TEXT="Context" ID="ID_447263401" CREATED="1702111711616" MODIFIED="1702111713867">
+<node TEXT="プロセスに相当" ID="ID_119342897" CREATED="1702111732662" MODIFIED="1702111736239"/>
+<node TEXT="実行するCG, 使用するDG全てを持つ" ID="ID_1243433858" CREATED="1702111736575" MODIFIED="1702111762536"/>
+</node>
+<node TEXT="3種類のGearsOS" ID="ID_1110454361" CREATED="1702111776755" MODIFIED="1702111782168">
+<node TEXT="GearsOS" ID="ID_1417588174" CREATED="1702111873653" MODIFIED="1702111876220">
+<node TEXT="ユーザーレベルタスクマネジメントの実装を目的とする" ID="ID_916197337" CREATED="1702112069451" MODIFIED="1702112079145"/>
+<node TEXT="CbC実装" ID="ID_939823586" CREATED="1702112086168" MODIFIED="1702112090340"/>
+<node TEXT="本研究のメイン対象" ID="ID_179232110" CREATED="1702112096195" MODIFIED="1702112110097"/>
+</node>
+<node TEXT="GearsAgda" ID="ID_1260602460" CREATED="1702111876582" MODIFIED="1702111879424">
+<node TEXT="Agda実装" ID="ID_1598980937" CREATED="1702112014204" MODIFIED="1702112017570"/>
+<node TEXT="形式手法による証明を目的とする" ID="ID_1299519318" CREATED="1702112017959" MODIFIED="1702112029698"/>
+</node>
+<node TEXT="CbC_x.v6" ID="ID_473963560" CREATED="1702111879786" MODIFIED="1702112199760">
+<node TEXT="スタンドアロンOSの開発を目的とする" ID="ID_1891291526" CREATED="1702112042696" MODIFIED="1702112054326"/>
+</node>
+</node>
+<node TEXT="信頼性の保証を目的としている" ID="ID_489283513" CREATED="1702111964176" MODIFIED="1702111972169"/>
+<node TEXT="interface" ID="ID_1090553760" CREATED="1705044283721" MODIFIED="1705044286729">
+<node TEXT="モジュール化の仕組み" ID="ID_1650605077" CREATED="1705044424301" MODIFIED="1705044435039">
+<node TEXT="Javaのクラスのような仕組み" ID="ID_1592717534" CREATED="1705044987112" MODIFIED="1705045006109"/>
+<node TEXT="使用するDGとCGをまとめる" ID="ID_616289115" CREATED="1705045011571" MODIFIED="1705045022968"/>
+</node>
+<node TEXT="DGの構造とCGの型の集合を定義する" ID="ID_613772826" CREATED="1705044331294" MODIFIED="1705044457429"/>
+<node TEXT="APIがCGで表現される" ID="ID_1438000127" CREATED="1705044643957" MODIFIED="1705044655030"/>
+<node TEXT="仕様と実装を分けて記述する" ID="ID_447965145" CREATED="1705044468383" MODIFIED="1705044490619">
+<node TEXT="仕様の定義方法" ID="ID_382365488" CREATED="1705045039309" MODIFIED="1705045049695"/>
+<node TEXT="実装の定義方法" ID="ID_710439475" CREATED="1705045050343" MODIFIED="1705045054967"/>
+</node>
+<node TEXT="interface-&gt;methodで呼び出せる" ID="ID_717163611" CREATED="1705044776612" MODIFIED="1705044788098"/>
+<node TEXT="code next" ID="ID_966484010" CREATED="1705044813010" MODIFIED="1705044818116"/>
+<node TEXT="..." ID="ID_267004486" CREATED="1705044819091" MODIFIED="1705044978009"/>
+</node>
+</node>
+<node TEXT="ファイルシステムとDB" ID="ID_1884932719" CREATED="1699849849835" MODIFIED="1699849855383">
+<node TEXT="RedBlackTreeを基本構造とする" ID="ID_224748942" CREATED="1699849885632" MODIFIED="1699849902671"/>
+<node TEXT="user interface" ID="ID_1064201171" CREATED="1702117030490" MODIFIED="1702117056047">
+<node TEXT="学部の時のやつ" ID="ID_1607825727" CREATED="1702117042878" MODIFIED="1702117046968"/>
+</node>
+<node TEXT="複数のreplicationを持てていない" ID="ID_787621439" CREATED="1699849855878" MODIFIED="1699849873297"/>
+<node TEXT="GCがない" ID="ID_1300729095" CREATED="1699849873756" MODIFIED="1699849878570">
+<node TEXT="RustのようなGCを持たないシステムも存在する" ID="ID_417147063" CREATED="1701692764078" MODIFIED="1701692773562">
+<node TEXT="GCなくても良いのでは?という疑問が生まれる" ID="ID_660130313" CREATED="1701692778839" MODIFIED="1701692788086"/>
+<node TEXT="CbR?" ID="ID_1404954258" CREATED="1701692790720" MODIFIED="1701692795814"/>
+</node>
+</node>
+<node TEXT="RedBlackTreeのコピーによって" ID="ID_116893075" CREATED="1699849908039" MODIFIED="1699849924661">
+<node TEXT="replication作成" ID="ID_1170481289" CREATED="1699849924973" MODIFIED="1699849930140"/>
+<node TEXT="GC" ID="ID_1741645302" CREATED="1699849930484" MODIFIED="1699849933881">
+<node TEXT="Copying GC" ID="ID_937412490" CREATED="1699850770149" MODIFIED="1699850779042"/>
+</node>
+<node TEXT="replicationとGCを同一システムで実現する利点は?" ID="ID_184373863" CREATED="1701692556651" MODIFIED="1701692583435">
+<node TEXT="今の所GCするとそれをreplicationとしても扱えるという感じ" ID="ID_214758450" CREATED="1701692591670" MODIFIED="1701692621085"/>
+<node TEXT="逆に、分ける意味がないのか" ID="ID_587144816" CREATED="1701692621555" MODIFIED="1701692633777"/>
+<node TEXT="同時にできるのであればその方が効率良い" ID="ID_298223735" CREATED="1701692637636" MODIFIED="1701692696469"/>
+</node>
+</node>
+</node>
+<node TEXT="現状" ID="ID_932050028" CREATED="1703310897416" MODIFIED="1703310899956">
+<node TEXT="" ID="ID_166710427" CREATED="1703310900268" MODIFIED="1703310900268"/>
+</node>
+<node TEXT="CbC" ID="ID_740206957" CREATED="1701695838712" MODIFIED="1701695841654">
+<node TEXT="Cの下位言語" ID="ID_1949462311" CREATED="1702109769687" MODIFIED="1702109804650">
+<node TEXT="CのLLVMに変更を加えている" ID="ID_591487528" CREATED="1702110861488" MODIFIED="1702110890767"/>
+</node>
+<node TEXT="処理の単位 CodeGear" ID="ID_1551166772" CREATED="1702109805037" MODIFIED="1702109818187">
+<node TEXT="DataGearが入力される" ID="ID_1020316470" CREATED="1702110084628" MODIFIED="1702110125371">
+<node TEXT="inputDataGear" ID="ID_1437736688" CREATED="1702110190302" MODIFIED="1702110196899"/>
+</node>
+<node TEXT="DataGearを出力する" ID="ID_1796772165" CREATED="1702110099792" MODIFIED="1702110112391">
+<node TEXT="outputDataGear" ID="ID_1734410453" CREATED="1702110197415" MODIFIED="1702110202862"/>
+</node>
+<node TEXT="CodeGearをDataGearの一種と捉えることも可能" ID="ID_1871025096" CREATED="1702110136840" MODIFIED="1702110151771"/>
+</node>
+<node TEXT="データの単位 DataGear" ID="ID_771276269" CREATED="1702109818490" MODIFIED="1702109832058">
+<node TEXT="構造体で表現される" ID="ID_870047835" CREATED="1702110827132" MODIFIED="1702110833094"/>
+<node TEXT="" ID="ID_1157018642" CREATED="1702110833322" MODIFIED="1702110833322"/>
+</node>
+<node TEXT="ノーマルレベルとメタレベルの切り分け" ID="ID_1583866878" CREATED="1702109839193" MODIFIED="1702109847067"/>
+<node TEXT="__code" ID="ID_1535719892" CREATED="1702109980407" MODIFIED="1702109984940"/>
+<node TEXT="gotoによる軽量継続" ID="ID_1041460941" CREATED="1702109847380" MODIFIED="1702109854199">
+<node TEXT="call stackを持たない" ID="ID_1868821185" CREATED="1702109894715" MODIFIED="1702109901816"/>
+<node TEXT="LLVMのsetjmpとlongjmp" ID="ID_1689168618" CREATED="1702109904182" MODIFIED="1702110048454"/>
+<node TEXT="tail callっぽい" ID="ID_1025227356" CREATED="1702110686327" MODIFIED="1702110691940">
+<node TEXT="tailcall忘れた時はここをみる" ID="ID_1334629625" CREATED="1702110692360" MODIFIED="1702110703733">
+<node TEXT="http://www.nct9.ne.jp/m_hiroi/func/abcerl02.html" ID="ID_1874667604" CREATED="1702110709856" MODIFIED="1702110709856" LINK="http://www.nct9.ne.jp/m_hiroi/func/abcerl02.html"/>
+</node>
+<node TEXT="再帰呼び出しして、返り値をそのまま返す" ID="ID_801162080" CREATED="1702110795575" MODIFIED="1702110816945"/>
+</node>
+</node>
+<node TEXT="現状" ID="ID_1373082100" CREATED="1702110955427" MODIFIED="1702110958434">
+<node TEXT="http://www.cr.ie.u-ryukyu.ac.jp/hg/CbC/CbC_llvm/" ID="ID_797243399" CREATED="1702111010437" MODIFIED="1702111010437" LINK="http://www.cr.ie.u-ryukyu.ac.jp/hg/CbC/CbC_llvm/"/>
+<node TEXT="clang llvm 18.0.0" ID="ID_762978767" CREATED="1702111146287" MODIFIED="1702111160675"/>
+</node>
+<node TEXT="関連" ID="ID_416590732" CREATED="1703308253194" MODIFIED="1703308255811">
+<node TEXT="AspectJ" ID="ID_1370782910" CREATED="1703308256121" MODIFIED="1703308259210">
+<node TEXT="リフレクション" ID="ID_96315745" CREATED="1703308259675" MODIFIED="1703308340272"/>
+<node TEXT="CbCはリフレクションしやすい" ID="ID_1614355873" CREATED="1703308341219" MODIFIED="1703308355429"/>
+<node TEXT="metaを書ける部分がリフレクション" ID="ID_195416108" CREATED="1703308357434" MODIFIED="1703308372053"/>
+<node TEXT="AOP" ID="ID_770917898" CREATED="1703308974828" MODIFIED="1703308978370">
+<node TEXT="アスペクト志向プログラミング" ID="ID_1702082447" CREATED="1703308978573" MODIFIED="1703308988562"/>
+</node>
+<node TEXT="記法" ID="ID_582319031" CREATED="1703308588273" MODIFIED="1703308590240">
+<node TEXT="@Aspect" ID="ID_201521343" CREATED="1703308932008" MODIFIED="1703308939119"/>
+<node TEXT="Advice" ID="ID_1105819991" CREATED="1703308939534" MODIFIED="1703308947617"/>
+<node TEXT="PointCut" ID="ID_1656105549" CREATED="1703308947870" MODIFIED="1703308951334"/>
+<node TEXT="JoinPoint" ID="ID_1355814265" CREATED="1703308951712" MODIFIED="1703308972859"/>
+</node>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="ファイルシステム" POSITION="right" ID="ID_1877138212" CREATED="1699848400796" MODIFIED="1699848405514">
+<node TEXT="可変長文字列を格納するファイル" ID="ID_1080516331" CREATED="1699849063058" MODIFIED="1699849081419">
+<node TEXT="構造化されていないデータ" ID="ID_989502084" CREATED="1699854164275" MODIFIED="1699854171408"/>
+</node>
+<node TEXT="ファイルにアクセスするための名前管理" ID="ID_1768633329" CREATED="1699849081914" MODIFIED="1699849094907">
+<node TEXT="linux" ID="ID_1049908119" CREATED="1699857284972" MODIFIED="1699857288270">
+<node ID="ID_1495135529" CREATED="1699857288486" MODIFIED="1699857326105"><richcontent TYPE="NODE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>
+    <p>
+      /<font color="#000000">home/matac/ws/</font>
+    </p>
+  </body>
+</html>
+</richcontent>
+</node>
+</node>
+</node>
+<node TEXT="同時アクセス時の名前管理の一貫性保証" ID="ID_1592817213" CREATED="1699849095540" MODIFIED="1699849111381"/>
+<node TEXT="ファイルに同時に書き込まれた時の一貫性の保証は無い" ID="ID_760250864" CREATED="1699849111930" MODIFIED="1699849133659">
+<node TEXT="書き込み制御のロック機構がある" ID="ID_1546654520" CREATED="1699849148263" MODIFIED="1699849162973"/>
+</node>
+</node>
+<node TEXT="DB" POSITION="right" ID="ID_149657016" CREATED="1699848406699" MODIFIED="1699848407993">
+<node TEXT="レコード" ID="ID_1205240345" CREATED="1699849182564" MODIFIED="1699849185575">
+<node TEXT="入力の属性名と型の組" ID="ID_249604408" CREATED="1699849185821" MODIFIED="1699849209586"/>
+</node>
+<node TEXT="テーブル" ID="ID_156913568" CREATED="1699849219044" MODIFIED="1699849228825">
+<node TEXT="特定の属性をキーとする" ID="ID_415589337" CREATED="1699849229049" MODIFIED="1699849235367"/>
+</node>
+<node TEXT="直列化可能性" ID="ID_1355828962" CREATED="1699849247355" MODIFIED="1699849253883">
+<node TEXT="Serializability" ID="ID_429588711" CREATED="1699849254710" MODIFIED="1699849318311"/>
+<node TEXT="複数のトランザクションが並行実行される際の処理結果の正しさを保証する基準" ID="ID_749156965" CREATED="1699849319073" MODIFIED="1699849354090"/>
+</node>
+<node TEXT="正規形" ID="ID_1482959686" CREATED="1699854183342" MODIFIED="1699854192704"/>
+</node>
+<node TEXT="ファイルシステムとDBの違い" POSITION="right" ID="ID_1607395441" CREATED="1699851419940" MODIFIED="1699851427585">
+<node TEXT="データの格納形式" ID="ID_2838179" CREATED="1699851427818" MODIFIED="1699851444191">
+<node TEXT="文字列かレコードか" ID="ID_6405282" CREATED="1699851446861" MODIFIED="1699851462681"/>
+</node>
+<node TEXT="データアクセス方法" ID="ID_1258040613" CREATED="1699851466951" MODIFIED="1699851472419">
+<node TEXT="read, write" ID="ID_823556495" CREATED="1699851468816" MODIFIED="1699851490085"/>
+<node TEXT="SQL" ID="ID_1745553035" CREATED="1699851490559" MODIFIED="1699851500567"/>
+</node>
+<node TEXT="直列化可能性保証方法" ID="ID_1245227752" CREATED="1699851504126" MODIFIED="1699851516763">
+<node TEXT="record, table lock" ID="ID_1269582911" CREATED="1699852009313" MODIFIED="1699852028994"/>
+<node TEXT="ファイルロック" ID="ID_765600991" CREATED="1699852050399" MODIFIED="1699852055041"/>
+</node>
+</node>
+<node TEXT="ファイルシステムとDBの追加機能" POSITION="right" ID="ID_1823247462" CREATED="1699851812550" MODIFIED="1699851823299">
+<node TEXT="電源を切った時にデータが残る" ID="ID_1444181613" CREATED="1699851823510" MODIFIED="1699851836412">
+<node TEXT="persistency" ID="ID_603526007" CREATED="1699851837510" MODIFIED="1699851840636"/>
+</node>
+<node TEXT="書き込めたかどうかを判定する" ID="ID_1468638907" CREATED="1699851851054" MODIFIED="1699851859966">
+<node TEXT="atomic write" ID="ID_514160473" CREATED="1699851860291" MODIFIED="1699851864956"/>
+</node>
+<node TEXT="一つのノードが失われた時にデータを保護する" ID="ID_369826358" CREATED="1699851869445" MODIFIED="1699851882668">
+<node TEXT="多重性" ID="ID_1986614934" CREATED="1699851883681" MODIFIED="1699851887639"/>
+</node>
+<node TEXT="複数のコピーを調停するコミット機構" ID="ID_422231006" CREATED="1699851890504" MODIFIED="1699851906965"/>
+</node>
+<node TEXT="信頼性" POSITION="right" ID="ID_696728353" CREATED="1699848408447" MODIFIED="1699848413804">
+<node TEXT="向上手法" ID="ID_1020078491" CREATED="1699848491366" MODIFIED="1699848496923">
+<node TEXT="証明" ID="ID_1018661667" CREATED="1699848497270" MODIFIED="1699848503341">
+<node TEXT="Gears Agda" ID="ID_1165126463" CREATED="1699848504251" MODIFIED="1699848509993"/>
+<node TEXT="invariantを使う" ID="ID_92873298" CREATED="1699848511299" MODIFIED="1699848516818"/>
+</node>
+<node TEXT="テスト" ID="ID_853686057" CREATED="1699848525221" MODIFIED="1699848530154"/>
+<node TEXT="モデル検査" ID="ID_465552896" CREATED="1699848530425" MODIFIED="1699848536874"/>
+</node>
+<node TEXT="システム全体で向上させる必要がある" ID="ID_1629969942" CREATED="1699848909002" MODIFIED="1699848931988">
+<node TEXT="システムの構成要素" ID="ID_677210990" CREATED="1699848935984" MODIFIED="1699848942782">
+<node TEXT="アプリケーション" ID="ID_1491167091" CREATED="1699848943269" MODIFIED="1699848949144"/>
+<node TEXT="OS" ID="ID_419231398" CREATED="1699848949689" MODIFIED="1699848952218"/>
+<node TEXT="ファイルシステム" ID="ID_1950317269" CREATED="1699848952489" MODIFIED="1699849002048"/>
+<node TEXT="DB" ID="ID_92392900" CREATED="1699849003252" MODIFIED="1699849004419"/>
+<node TEXT="メモリ" ID="ID_1964952999" CREATED="1699849004786" MODIFIED="1699849010256"/>
+<node TEXT="SSD" ID="ID_1413092539" CREATED="1699849010790" MODIFIED="1699849015545"/>
+<node TEXT="分散ノード" ID="ID_1536068993" CREATED="1699849016080" MODIFIED="1699849022165"/>
+<node TEXT="ネットワーク" ID="ID_1088702523" CREATED="1699849022619" MODIFIED="1699849027379"/>
+</node>
+</node>
+<node TEXT="向上手法をシステム全体に適用したい" ID="ID_829551002" CREATED="1699850006058" MODIFIED="1699850017727"/>
+</node>
+<node TEXT="RedBlackTree" POSITION="right" ID="ID_858040690" CREATED="1699848437129" MODIFIED="1699848446060">
+<node TEXT="Copy" ID="ID_76598812" CREATED="1699848476363" MODIFIED="1699848479936">
+<node TEXT="単なる2分木のコピー" ID="ID_1535596989" CREATED="1699849455588" MODIFIED="1699849469353"/>
+<node TEXT="Stack無しで書くとおそらく結構複雑" ID="ID_527329681" CREATED="1699849470075" MODIFIED="1699857892247"/>
+<node TEXT="木を辿るためにStackを使う" ID="ID_788381426" CREATED="1699849561986" MODIFIED="1699849582652">
+<node TEXT="コピー後に消されるので使って良い" ID="ID_1063130872" CREATED="1701690823328" MODIFIED="1701690834394"/>
+</node>
+<node TEXT="アルゴリズム" ID="ID_529312839" CREATED="1699849518269" MODIFIED="1699849522647">
+<node TEXT="左側を深さ優先で辿る" ID="ID_468694757" CREATED="1699849525266" MODIFIED="1699849604742">
+<node TEXT="Stack push" ID="ID_1123969398" CREATED="1699849778090" MODIFIED="1699849781012"/>
+</node>
+<node TEXT="アロケートしたノードは別のContext上に作る" ID="ID_320048499" CREATED="1699849620905" MODIFIED="1699849638042">
+<node TEXT="GCのため" ID="ID_1239006804" CREATED="1699849638520" MODIFIED="1699849668501"/>
+<node TEXT="Copy後古いContextを消す" ID="ID_1485480555" CREATED="1699849646521" MODIFIED="1699849693755"/>
+<node TEXT="メモリ管理をモナドで表していることになる" ID="ID_1271994335" CREATED="1699849705089" MODIFIED="1699849715878"/>
+</node>
+<node TEXT="リーフまで降りたらroot方向に木を戻る" ID="ID_976293319" CREATED="1699849731393" MODIFIED="1699849765553">
+<node TEXT="Stack pop" ID="ID_1123748609" CREATED="1699849765982" MODIFIED="1699849773214"/>
+<node TEXT="右側を呼び出す" ID="ID_831164108" CREATED="1699849789218" MODIFIED="1699849803550"/>
+</node>
+<node TEXT="Stackを2つ使うならば" ID="ID_472848117" CREATED="1699849785880" MODIFIED="1699850937824">
+<node TEXT="全体のStack" ID="ID_315508287" CREATED="1699850965212" MODIFIED="1699858010811">
+<node TEXT="originの木を辿るために使う" ID="ID_824722897" CREATED="1699858046929" MODIFIED="1699858071837"/>
+</node>
+<node TEXT="途中のStack" ID="ID_1421142933" CREATED="1699850966215" MODIFIED="1699858024318">
+<node TEXT="右側を呼び出す際にそれまでの左側部分木を保持" ID="ID_929949795" CREATED="1699851138198" MODIFIED="1699858042178"/>
+</node>
+</node>
+</node>
+<node TEXT="Copy前後の同一性確認が必要" ID="ID_1150089347" CREATED="1699849956727" MODIFIED="1699849974942"/>
+<node TEXT="Copy中の変更" ID="ID_492731672" CREATED="1699849982760" MODIFIED="1699849992692"/>
+<node TEXT="毎回全てをGCするか" ID="ID_1696799143" CREATED="1699858222922" MODIFIED="1699858309153">
+<node TEXT="アクセス頻度によって世代分けする" ID="ID_158787872" CREATED="1699858236610" MODIFIED="1699858248665"/>
+<node TEXT="ほとんどアクセスされないデータはGC対象から除く" ID="ID_285170374" CREATED="1699858262921" MODIFIED="1699858318515"/>
+</node>
+<node TEXT="Copyによってreplicationの作成が可能になる" ID="ID_572465203" CREATED="1701690510698" MODIFIED="1701690536500"/>
+</node>
+<node TEXT="incrementalなTreeのcopy" ID="ID_1492567121" CREATED="1699869669939" MODIFIED="1699869692257">
+<node TEXT="後からcommitできるかも" ID="ID_1849438115" CREATED="1699869742980" MODIFIED="1699869754391"/>
+<node TEXT="commitのシーケンスをとっておく" ID="ID_921049246" CREATED="1699869765723" MODIFIED="1699869778036">
+<node TEXT="Treeとは別にオペレーションのリストがある" ID="ID_1770284118" CREATED="1699869879779" MODIFIED="1699869889686">
+<node TEXT="これもcopyが必要" ID="ID_230010982" CREATED="1699869957930" MODIFIED="1699869963814"/>
+</node>
+<node TEXT="RedBlackTree with commtted operation" ID="ID_888988533" CREATED="1699869899048" MODIFIED="1699869915123">
+<node TEXT="番号" ID="ID_1935233472" CREATED="1699869923512" MODIFIED="1699869928338"/>
+<node TEXT="insert, delete" ID="ID_1668599725" CREATED="1699869929471" MODIFIED="1699869933942"/>
+</node>
+</node>
+</node>
+<node TEXT="証明しやすい" ID="ID_1313077784" CREATED="1699849438956" MODIFIED="1699849443715"/>
+<node TEXT="全ての操作が最悪でもO(log n)" ID="ID_1382477887" CREATED="1699855369743" MODIFIED="1699855390827"/>
+</node>
+<node TEXT="Rustの所有権" POSITION="right" ID="ID_612327915" CREATED="1704949737149" MODIFIED="1704949745661">
+<node TEXT="メモリを所有する変数のスコープを抜けるとメモリも解放される" ID="ID_972875880" CREATED="1704949746103" MODIFIED="1704949765401"/>
+<node TEXT="スマートポインタ" ID="ID_403762806" CREATED="1704949766082" MODIFIED="1704949771866"/>
+</node>
+<node TEXT="RBTreeを用いたCopying GC" POSITION="right" ID="ID_704559305" CREATED="1699854075442" MODIFIED="1699857013558">
+<node TEXT="RBTreeのコピーをする" ID="ID_541742554" CREATED="1699857015273" MODIFIED="1699857026447"/>
+<node TEXT="データは全てRedBlackTreeで表現される" ID="ID_1145318684" CREATED="1699857027634" MODIFIED="1699857056196">
+<node TEXT="ただし、木の操作にStackを用いる" ID="ID_1170936451" CREATED="1699857056714" MODIFIED="1699857067513"/>
+</node>
+<node TEXT="木自体がオブジェクトルートになる" ID="ID_1404066066" CREATED="1699857074069" MODIFIED="1699857087072">
+<node TEXT="正確なGC" ID="ID_462996564" CREATED="1699857087449" MODIFIED="1699857104930"/>
+</node>
+</node>
+<node TEXT="コピーのベンチマーカー" POSITION="right" ID="ID_1415317998" CREATED="1699856883382" MODIFIED="1699856891252">
+<node TEXT="ある程度大きな木を用意" ID="ID_1884791368" CREATED="1699857682191" MODIFIED="1699857700584">
+<node TEXT="ある程度とは" ID="ID_1182141688" CREATED="1699857704166" MODIFIED="1699857711215"/>
+</node>
+<node TEXT="単純にコピーにかかる時間を測定" ID="ID_846596778" CREATED="1699857700957" MODIFIED="1699857730588"/>
+<node TEXT="比較対象は?" ID="ID_963832906" CREATED="1699857731316" MODIFIED="1699857739036"/>
+</node>
+<node TEXT="ディスク上とメモリ上のデータ構造" POSITION="right" ID="ID_1874111745" CREATED="1699850217484" MODIFIED="1699850230859">
+<node TEXT="同一のRedBlackTree" ID="ID_1633724271" CREATED="1699850231118" MODIFIED="1699850243142"/>
+<node TEXT="persistent memoryを想定" ID="ID_719479083" CREATED="1699850243592" MODIFIED="1699850261924"/>
+</node>
+<node TEXT="先行研究" POSITION="right" ID="ID_1807805275" CREATED="1699850150666" MODIFIED="1699850155227">
+<node TEXT="GearsOS の分散ファイルシステム設計" ID="ID_1737093216" CREATED="1701692836825" MODIFIED="1701692838439">
+<node TEXT="一木 貴裕" ID="ID_976656831" CREATED="1701692838974" MODIFIED="1701692861473"/>
+<node TEXT="修論" ID="ID_1407964942" CREATED="1701692861994" MODIFIED="1701692868384"/>
+</node>
+<node TEXT="Gearsos における i-node を用いた file system の設計" ID="ID_152975250" CREATED="1701692905310" MODIFIED="1701692912376">
+<node TEXT="又吉 雄斗" ID="ID_537151466" CREATED="1701692914641" MODIFIED="1701692923391"/>
+<node TEXT="卒論" ID="ID_1486800431" CREATED="1701692926762" MODIFIED="1701692930073"/>
+</node>
+<node TEXT="参考文献" ID="ID_1704420848" CREATED="1702289534980" MODIFIED="1702289539226">
+<node TEXT="AspectJ" ID="ID_682948653" CREATED="1702289539526" MODIFIED="1702289543447"/>
+</node>
+</node>
+<node TEXT="評価方法" POSITION="right" ID="ID_1979397312" CREATED="1699850131177" MODIFIED="1699850137060"/>
+<node TEXT="章立て" POSITION="left" ID="ID_378600647" CREATED="1699848424709" MODIFIED="1702112473403">
+<node TEXT="Gears OSのファイルシステムとDB" FOLDED="true" ID="ID_446325287" CREATED="1701690660393" MODIFIED="1701690902283">
+<node TEXT="重要なシステムの障害" ID="ID_780032066" CREATED="1704365424619" MODIFIED="1704365554685">
+<node TEXT="例" ID="ID_561763413" CREATED="1704365743851" MODIFIED="1704365747240">
+<node TEXT="全銀システム" ID="ID_380458549" CREATED="1704365488518" MODIFIED="1704365500548">
+<node TEXT="https://www.zengin-net.jp/announcement/pdf/announcement_20231201.pdf" ID="ID_622498163" CREATED="1704365947486" MODIFIED="1704365947486" LINK="https://www.zengin-net.jp/announcement/pdf/announcement_20231201.pdf"/>
+</node>
+<node TEXT="ANAの国内線システム" ID="ID_227546985" CREATED="1704365556083" MODIFIED="1704366884696">
+<node TEXT="https://www.anahd.co.jp/group/pr/202304/notification-2.html?_gl=1*1h2jfg0*_ga*MTkwMjE0OTIwNC4xNjgwOTIwMTUx*_ga_32F297W9WL*MTY4MDkyMDI2My4xLjEuMTY4MDkyMDMwNy4wLjAuMA.." ID="ID_918028332" CREATED="1704366735088" MODIFIED="1704366735088" LINK="https://www.anahd.co.jp/group/pr/202304/notification-2.html?_gl=1*1h2jfg0*_ga*MTkwMjE0OTIwNC4xNjgwOTIwMTUx*_ga_32F297W9WL*MTY4MDkyMDI2My4xLjEuMTY4MDkyMDMwNy4wLjAuMA.."/>
+</node>
+<node TEXT="電子決済システム" ID="ID_271892958" CREATED="1704365579825" MODIFIED="1704366979311">
+<node TEXT="https://www.glory.co.jp/news/detail/id=2017" ID="ID_650733639" CREATED="1704367245326" MODIFIED="1704367245326" LINK="https://www.glory.co.jp/news/detail/id=2017"/>
+</node>
+</node>
+<node TEXT="これらは社会に多大な影響を与える" ID="ID_1496226551" CREATED="1704365759256" MODIFIED="1704365779957"/>
+<node TEXT="よってシステムの高い信頼性が求められる" ID="ID_1365357344" CREATED="1704365780499" MODIFIED="1704365831219"/>
+</node>
+<node TEXT="システム全体の信頼性を上げたい" ID="ID_1572843196" CREATED="1703313460915" MODIFIED="1703313713692">
+<node TEXT="システムにあるさまざまな要素" ID="ID_1198542652" CREATED="1704365155193" MODIFIED="1704365166358">
+<node TEXT="アプリケーション" ID="ID_727581223" CREATED="1704365166793" MODIFIED="1704365223650"/>
+<node TEXT="OS" ID="ID_1417760159" CREATED="1704365224002" MODIFIED="1704365225602"/>
+<node TEXT="ファイルシステム" ID="ID_153728143" CREATED="1704365226160" MODIFIED="1704365231311"/>
+<node TEXT="DB" ID="ID_323366858" CREATED="1704365231782" MODIFIED="1704365232994"/>
+<node TEXT="メモリ" ID="ID_402756754" CREATED="1704365233331" MODIFIED="1704365236964"/>
+<node TEXT="SSD" ID="ID_404429414" CREATED="1704365237202" MODIFIED="1704365243718"/>
+<node TEXT="分散ノード" ID="ID_1628174426" CREATED="1704365244457" MODIFIED="1704365249457"/>
+<node TEXT="ネットワーク" ID="ID_1337491308" CREATED="1704365250196" MODIFIED="1704365253472"/>
+</node>
+<node TEXT="全体の信頼性を上げる必要がある" ID="ID_355799274" CREATED="1704365894036" MODIFIED="1704365915131"/>
+</node>
+<node TEXT="ファイルシステムとDBの信頼性を考える" ID="ID_1355454563" CREATED="1703313715002" MODIFIED="1703313723643">
+<node TEXT="システムにおいて重要なFSとDBの信頼性を保証したい" ID="ID_1811829647" CREATED="1704365294814" MODIFIED="1704365332688"/>
+</node>
+<node TEXT="ファイルシステムとは" ID="ID_1898416034" CREATED="1703313727821" MODIFIED="1703313734372"/>
+<node TEXT="DBとは" ID="ID_101598045" CREATED="1703313734729" MODIFIED="1703313737449"/>
+<node TEXT="ファイルシステムとDBの違い" ID="ID_1786247161" CREATED="1703313740484" MODIFIED="1703313748867"/>
+<node TEXT="ファイルシステムとDBが持つ追加機能" ID="ID_1094923931" CREATED="1703313749849" MODIFIED="1703313784209"/>
+<node TEXT="GearsOSを使って実現する" ID="ID_646654551" CREATED="1703313787540" MODIFIED="1703313833292"/>
+<node TEXT="信頼性を向上する手法" ID="ID_578834327" CREATED="1703313866689" MODIFIED="1703313878304"/>
+<node TEXT="GearsOSのファイルシステムとDBの現状" ID="ID_90571671" CREATED="1703313901390" MODIFIED="1703313918619"/>
+<node TEXT="RedBlackTreeのコピーの実装" ID="ID_227598094" CREATED="1703313929273" MODIFIED="1703313941132"/>
+</node>
+<node TEXT="軽量継続を基本とする言語CbC" FOLDED="true" ID="ID_1037072660" CREATED="1701690246173" MODIFIED="1703311032386">
+<node TEXT="軽量継続を基本とする言語CbC" ID="ID_1137662194" CREATED="1704620254613" MODIFIED="1704620265899">
+<node TEXT="Cの下位言語" ID="ID_367988382" CREATED="1704620272383" MODIFIED="1704620280501"/>
+<node TEXT="軽量継続を基本とする" ID="ID_772545453" CREATED="1704620285878" MODIFIED="1704620291664"/>
+</node>
+<node TEXT="Gearの概念" ID="ID_1818389006" CREATED="1703307708710" MODIFIED="1704622216143"/>
+<node TEXT="gotoによる軽量継続" ID="ID_726882949" CREATED="1703307895880" MODIFIED="1703307911540"/>
+<node TEXT="CodeGearの記述例" ID="ID_1731637915" CREATED="1703307784821" MODIFIED="1703307887307"/>
+</node>
+<node TEXT="信頼性の保証を目的としたGearsOS" ID="ID_1315567458" CREATED="1701692210913" MODIFIED="1703311040671">
+<node TEXT="3種類のGearsOS" ID="ID_1326415213" CREATED="1703309744902" MODIFIED="1703309750565">
+<node TEXT="Gears Agda" ID="ID_1385168402" CREATED="1705044105795" MODIFIED="1705044111649"/>
+<node TEXT="Gears OS" ID="ID_1367848198" CREATED="1705044112079" MODIFIED="1705044114581"/>
+<node TEXT="CbC_x.v6" ID="ID_323899306" CREATED="1705044116042" MODIFIED="1705044124351"/>
+</node>
+<node TEXT="メタ処理を記述するmetaGear" FOLDED="true" ID="ID_1666892566" CREATED="1703309692742" MODIFIED="1703309713823">
+<node TEXT="ノーマルレベルとメタレベルの切り分け" ID="ID_719507396" CREATED="1703308470210" MODIFIED="1703308478844"/>
+<node TEXT="CbCによって容易に切り分け可能" ID="ID_1803106515" CREATED="1704785297162" MODIFIED="1704785306308"/>
+</node>
+<node TEXT="全てのGearを参照するContext" FOLDED="true" ID="ID_91888278" CREATED="1703309731224" MODIFIED="1705052148391">
+<node TEXT="全てのCodeGear, DataGearの参照を持つ" ID="ID_816175749" CREATED="1704777710835" MODIFIED="1704777722631"/>
+<node TEXT="従来OSのプロセスに相当する概念" ID="ID_485427631" CREATED="1704777731086" MODIFIED="1704777739954"/>
+<node TEXT="Contextにも種類がある" ID="ID_309360319" CREATED="1704787077056" MODIFIED="1704787082791"/>
+<node TEXT="Gearの概念ではmetaDataGearにあたる" ID="ID_1983036538" CREATED="1704777794150" MODIFIED="1704777819739"/>
+<node TEXT="ノーマルレベルから直接参照されない" ID="ID_280262393" CREATED="1704777824342" MODIFIED="1705052148391"/>
+<node TEXT="metaCodeGearから参照される" ID="ID_526551168" CREATED="1704777838132" MODIFIED="1704778973371"/>
+<node TEXT="ノーマルレベルから直接参照されるとどうなるか" ID="ID_1998855779" CREATED="1704778991437" MODIFIED="1704779001760">
+<node TEXT="ノーマルレベルでメタレベルを書き換えることが可能になる" ID="ID_517717354" CREATED="1704779027195" MODIFIED="1704779037558"/>
+<node TEXT="メタレベルを分けた意味がなくなる" ID="ID_1293544989" CREATED="1704779038072" MODIFIED="1704779046632"/>
+</node>
+<node TEXT="Contextを含めたGear遷移" ID="ID_1897519980" CREATED="1704779305504" MODIFIED="1704779324312"/>
+</node>
+<node TEXT="モジュール化の仕組みinterface" ID="ID_979914453" CREATED="1705044283721" MODIFIED="1705045105599">
+<node TEXT="モジュール化の仕組み" ID="ID_1323690074" CREATED="1705044424301" MODIFIED="1705044435039">
+<node TEXT="Javaのクラスのような仕組み" ID="ID_515246380" CREATED="1705044987112" MODIFIED="1705045006109"/>
+<node TEXT="使用するDGとCGをまとめる" ID="ID_1867289776" CREATED="1705045011571" MODIFIED="1705045022968"/>
+</node>
+<node TEXT="DGの構造とCGの型の集合を定義する" ID="ID_1609812236" CREATED="1705044331294" MODIFIED="1705044457429"/>
+<node TEXT="APIがCGで表現される" ID="ID_1744335025" CREATED="1705044643957" MODIFIED="1705044655030"/>
+<node TEXT="仕様と実装を分けて記述する" ID="ID_1841677639" CREATED="1705044468383" MODIFIED="1705044490619">
+<node TEXT="仕様の定義方法" ID="ID_554139727" CREATED="1705045039309" MODIFIED="1705045049695"/>
+<node TEXT="実装の定義方法" ID="ID_1845996229" CREATED="1705045050343" MODIFIED="1705045054967"/>
+</node>
+<node TEXT="interface-&gt;methodで呼び出せる" ID="ID_1716944029" CREATED="1705044776612" MODIFIED="1705044788098"/>
+<node TEXT="code next" ID="ID_493231617" CREATED="1705044813010" MODIFIED="1705044818116"/>
+<node TEXT="..." ID="ID_1146219373" CREATED="1705044819091" MODIFIED="1705044978009">
+<node TEXT="Contextから値を取り出す" ID="ID_1241470700" CREATED="1705049804204" MODIFIED="1705049810183"/>
+<node TEXT="次のCodeGearのinputDataGearは不定である" ID="ID_574655805" CREATED="1705049810780" MODIFIED="1705049835325"/>
+</node>
+<node TEXT="実装" ID="ID_1727927338" CREATED="1705050293688" MODIFIED="1705050297703">
+<node TEXT="#impl as" ID="ID_1508543884" CREATED="1705052044177" MODIFIED="1705052048026">
+<node TEXT="interfaceの実装を書く場合に記述する" ID="ID_1568057342" CREATED="1705055994617" MODIFIED="1705056004662"/>
+<node TEXT="implの後ろに実装したいinterface名する" ID="ID_138244749" CREATED="1705056004945" MODIFIED="1705056045083"/>
+<node TEXT="asの後ろに実装の型名を記述する" ID="ID_238410525" CREATED="1705056022794" MODIFIED="1705056041152"/>
+</node>
+<node TEXT="create" ID="ID_115012523" CREATED="1705052063509" MODIFIED="1705052066013">
+<node TEXT="コンストラクタである" ID="ID_690330298" CREATED="1705056555895" MODIFIED="1705056577812"/>
+<node TEXT="newでアロケートする" ID="ID_663793410" CREATED="1705056567012" MODIFIED="1705056582003">
+<node TEXT="実際にはメタレベルで処理される" ID="ID_521085278" CREATED="1705056608304" MODIFIED="1705056635911"/>
+</node>
+</node>
+<node TEXT="queue-&gt;" ID="ID_1223273790" CREATED="1705052048517" MODIFIED="1705052055499">
+<node TEXT="C_" ID="ID_1002337273" CREATED="1705052125563" MODIFIED="1705052140851"/>
+<node TEXT="enumでCodeGearを指す" ID="ID_722629480" CREATED="1705057162117" MODIFIED="1705057195759"/>
+</node>
+<node TEXT="CodeGearの実装を以下に記述する" ID="ID_766959044" CREATED="1705057211644" MODIFIED="1705057226837"/>
+<node TEXT="SingleLinkedQueue.h" ID="ID_626185032" CREATED="1705052116061" MODIFIED="1705052122797">
+<node TEXT="implementの型定義ファイル" ID="ID_1696501093" CREATED="1705057355651" MODIFIED="1705057369742"/>
+</node>
+</node>
+</node>
+<node TEXT="GearsOSのRedBlackTree" ID="ID_894257471" CREATED="1704625749056" MODIFIED="1704625759342">
+<node TEXT="Treeの実装である" ID="ID_830044324" CREATED="1704625938387" MODIFIED="1705057404508"/>
+<node TEXT="Tree interface" ID="ID_137044314" CREATED="1705050144077" MODIFIED="1705050161749">
+<node TEXT="DG" ID="ID_1897529344" CREATED="1705050163353" MODIFIED="1705050166212"/>
+<node TEXT="CG" ID="ID_710468405" CREATED="1705050166599" MODIFIED="1705050168009"/>
+</node>
+<node TEXT="RedBlackTree.h" ID="ID_1180765067" CREATED="1705057440091" MODIFIED="1705057447006"/>
+</node>
+</node>
+<node TEXT="GearsOSのファイルシステム(現状の話" FOLDED="true" ID="ID_667012992" CREATED="1701694178540" MODIFIED="1704630791818">
+<node TEXT="GearsOSのファイルシステム" ID="ID_188577314" CREATED="1704630094596" MODIFIED="1704630099465">
+<node TEXT="ファイルシステムはOSの重要な機能である" ID="ID_46805604" CREATED="1704630103040" MODIFIED="1704630119191"/>
+<node TEXT="分散ファイルシステムとi-nodeを用いたファイルシステムが存在する" ID="ID_1509553363" CREATED="1704630119858" MODIFIED="1704630152926"/>
+</node>
+<node TEXT="DataGearManagerによる分散ファイルシステム" ID="ID_540180010" CREATED="1703315001066" MODIFIED="1703315085575">
+<node TEXT="ikkiさんの研究" ID="ID_404932730" CREATED="1704630869165" MODIFIED="1704630876474"/>
+<node TEXT="分散ファイルシステムのトポロジー形成" ID="ID_807263501" CREATED="1704631962837" MODIFIED="1704631974676"/>
+<node TEXT="Christieを用いている" ID="ID_1388003233" CREATED="1704631982827" MODIFIED="1704631995001"/>
+</node>
+<node TEXT="i-nodeを用いたファイルシステム" ID="ID_1851664363" CREATED="1703314946289" MODIFIED="1703492949059">
+<node TEXT="matacの研究" ID="ID_179513787" CREATED="1704631158641" MODIFIED="1704631166543"/>
+<node TEXT="mkdir, ls, cd" ID="ID_1106903899" CREATED="1704631167036" MODIFIED="1704632106399"/>
+<node TEXT="非破壊RedBlackTree" ID="ID_262332331" CREATED="1701696133124" MODIFIED="1704630442271"/>
+<node TEXT="非破壊RedBlackTreeで構成される" ID="ID_113040530" CREATED="1704632128347" MODIFIED="1704632244845"/>
+<node TEXT="ディスク上とメモリ上のデータ構造" ID="ID_683338430" CREATED="1701696165502" MODIFIED="1701696179372"/>
+<node TEXT="RedBlackTreeのトランザクション" ID="ID_1088328123" CREATED="1701696247760" MODIFIED="1702112463420" HGAP_QUANTITY="14.75 pt" VSHIFT_QUANTITY="3.75 pt"/>
+</node>
+</node>
+<node TEXT="GearsFileSystemにおけるGCとレプリケーション" FOLDED="true" ID="ID_1092227909" CREATED="1701690558237" MODIFIED="1704632532265" HGAP_QUANTITY="16.25 pt" VSHIFT_QUANTITY="-1.5 pt">
+<node TEXT="ファイルシステムの信頼性" FOLDED="true" ID="ID_200982245" CREATED="1704630258973" MODIFIED="1704630267498">
+<node TEXT="信頼性に関する追加機能" ID="ID_1574949535" CREATED="1704630312069" MODIFIED="1704630320377"/>
+<node TEXT="GCやレプリケーションの機能がない" ID="ID_878946385" CREATED="1704630323433" MODIFIED="1704632961588"/>
+<node TEXT="実装するためにはデータのCopyが必要" ID="ID_822351907" CREATED="1704630337081" MODIFIED="1704630382753"/>
+<node TEXT="現状はTreeにCopyがない" ID="ID_65833123" CREATED="1704630383271" MODIFIED="1704630397371"/>
+<node TEXT="Copyを実装したい" ID="ID_1314300132" CREATED="1704632535428" MODIFIED="1704632976417"/>
+</node>
+<node TEXT="GCの種類" FOLDED="true" ID="ID_1746770811" CREATED="1704695739812" MODIFIED="1704696582051">
+<node TEXT="CopyingGCとは" ID="ID_344664264" CREATED="1704692777863" MODIFIED="1704692782352">
+<node TEXT="正確なGC" ID="ID_267216671" CREATED="1704696904268" MODIFIED="1704696908732"/>
+<node TEXT="ヒープ領域をFrom領域とTo領域に分割" ID="ID_1262852949" CREATED="1704711856815" MODIFIED="1704711932146"/>
+<node TEXT="ルートから参照できるオブジェクトをFrom領域からTo領域にコピーする" ID="ID_1311182649" CREATED="1704711932613" MODIFIED="1704711957213"/>
+</node>
+<node TEXT="Reference counting GC" ID="ID_776539806" CREATED="1704696590166" MODIFIED="1704696594363">
+<node TEXT="オブジェクトの被参照数を表すカウンタを用いる" ID="ID_166536665" CREATED="1704710714477" MODIFIED="1704710852447"/>
+<node TEXT="被参照数が0になった時オブジェクトが解放される" ID="ID_1678718232" CREATED="1704711836498" MODIFIED="1704711854290"/>
+</node>
+<node TEXT="Mark \&amp; Sweep GC" ID="ID_715438606" CREATED="1704696594768" MODIFIED="1704696598757">
+<node TEXT="マークフェーズとスイープフェーズからなる" ID="ID_1584128194" CREATED="1704710119330" MODIFIED="1704710167419"/>
+<node TEXT="マークフェーズ" ID="ID_393316688" CREATED="1704710141321" MODIFIED="1704710158148">
+<node TEXT="生きているオブジェクト全てにマークをつける" ID="ID_684669159" CREATED="1704710178984" MODIFIED="1704710191749"/>
+</node>
+<node TEXT="スイープフェーズ" ID="ID_1823266942" CREATED="1704710168764" MODIFIED="1704710173540">
+<node TEXT="マークがつけられなかったオブジェクトを回収する" ID="ID_1569463715" CREATED="1704710220250" MODIFIED="1704710369400"/>
+</node>
+</node>
+</node>
+<node TEXT="GCは併用される" FOLDED="true" ID="ID_1496671439" CREATED="1704696631667" MODIFIED="1704696640285">
+<node TEXT="一般的にGCは組み合わせで使われる" ID="ID_1275851809" CREATED="1704776562321" MODIFIED="1704776594813"/>
+<node TEXT="例えば世代別GC" ID="ID_1572156993" CREATED="1704776595339" MODIFIED="1704776711350"/>
+<node TEXT="メジャーGCでMark &amp; Sweep GC" ID="ID_118548516" CREATED="1704776713708" MODIFIED="1704776746730"/>
+<node TEXT="マイナーでCopying GC" ID="ID_332663516" CREATED="1704776747163" MODIFIED="1704776761598"/>
+<node TEXT="それぞれのGCの利点を享受できる" ID="ID_704438541" CREATED="1704776762298" MODIFIED="1704776776709"/>
+</node>
+<node TEXT="Rustのスマートポインタ" ID="ID_881149259" CREATED="1704696608959" MODIFIED="1704696615328"/>
+<node TEXT="CopyingGCを用いる" FOLDED="true" ID="ID_1639428535" CREATED="1704692768575" MODIFIED="1704692777490">
+<node TEXT="どのように利用するか" ID="ID_549509034" CREATED="1704696775586" MODIFIED="1704696779463">
+<node TEXT="通常のCopyingGCではヒープ領がコピーされる" ID="ID_830576894" CREATED="1704692782815" MODIFIED="1704692814222"/>
+<node TEXT="GearsFileSystemの場合は木をコピーする" ID="ID_1003156855" CREATED="1704692814851" MODIFIED="1704692831840"/>
+<node TEXT="参照しているオブジェクトは木のルートから辿れる" ID="ID_1653048898" CREATED="1704696789481" MODIFIED="1704696806177"/>
+<node TEXT="辿れるノードのみコピーするだけでGCになる" ID="ID_355389629" CREATED="1704696807343" MODIFIED="1704696829530"/>
+<node TEXT="RedBlackTreeのコピーを用いる" ID="ID_1495626047" CREATED="1704630409263" MODIFIED="1704632465291">
+<node TEXT="Copy" ID="ID_1713857745" CREATED="1699848476363" MODIFIED="1699848479936">
+<node TEXT="単なる2分木のコピー" ID="ID_1165724596" CREATED="1699849455588" MODIFIED="1699849469353"/>
+<node TEXT="Stack無しで書くとおそらく結構複雑" ID="ID_1214201745" CREATED="1699849470075" MODIFIED="1699857892247"/>
+<node TEXT="木を辿るためにStackを使う" ID="ID_278711519" CREATED="1699849561986" MODIFIED="1699849582652">
+<node TEXT="コピー後に消されるので使って良い" ID="ID_841332618" CREATED="1701690823328" MODIFIED="1701690834394"/>
+</node>
+<node TEXT="Copy前後の同一性確認が必要" ID="ID_659073251" CREATED="1699849956727" MODIFIED="1699849974942"/>
+<node TEXT="Copy中の変更" ID="ID_58260128" CREATED="1699849982760" MODIFIED="1699849992692"/>
+<node TEXT="毎回全てをGCするか" ID="ID_1441955822" CREATED="1699858222922" MODIFIED="1699858309153">
+<node TEXT="アクセス頻度によって世代分けする" ID="ID_1844124057" CREATED="1699858236610" MODIFIED="1699858248665"/>
+<node TEXT="ほとんどアクセスされないデータはGC対象から除く" ID="ID_279065121" CREATED="1699858262921" MODIFIED="1699858318515"/>
+</node>
+<node TEXT="Copyによってreplicationの作成が可能になる" ID="ID_1531756423" CREATED="1701690510698" MODIFIED="1701690536500"/>
+<node TEXT="incrementalなTreeのcopy" ID="ID_1594894473" CREATED="1699869669939" MODIFIED="1699869692257">
+<node TEXT="後からcommitできるかも" ID="ID_1694113573" CREATED="1699869742980" MODIFIED="1699869754391"/>
+<node TEXT="commitのシーケンスをとっておく" ID="ID_251890400" CREATED="1699869765723" MODIFIED="1699869778036">
+<node TEXT="Treeとは別にオペレーションのリストがある" ID="ID_1030866225" CREATED="1699869879779" MODIFIED="1699869889686">
+<node TEXT="これもcopyが必要" ID="ID_247714394" CREATED="1699869957930" MODIFIED="1699869963814"/>
+</node>
+<node TEXT="RedBlackTree with commtted operation" ID="ID_118589427" CREATED="1699869899048" MODIFIED="1699869915123">
+<node TEXT="番号" ID="ID_1574803424" CREATED="1699869923512" MODIFIED="1699869928338"/>
+<node TEXT="insert, delete" ID="ID_252146025" CREATED="1699869929471" MODIFIED="1699869933942"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="RedBlackTreeは単なる2分木" ID="ID_1037813952" CREATED="1704632767323" MODIFIED="1704632780206"/>
+</node>
+</node>
+<node TEXT="なぜCopyingGCなのか" ID="ID_1226680678" CREATED="1704696722580" MODIFIED="1704696736347">
+<node TEXT="全てのデータはRedBlackTreeに格納される" ID="ID_1096077315" CREATED="1704710451766" MODIFIED="1704710463902">
+<node TEXT="(使用中のデータ)" ID="ID_55750630" CREATED="1704710470136" MODIFIED="1704710480143"/>
+</node>
+<node TEXT="木を辿れば全ての生きているオブジェクトを参照することが可能" ID="ID_1690086792" CREATED="1704710464413" MODIFIED="1704710513053">
+<node TEXT="正確なGC" ID="ID_1987344082" CREATED="1704710533695" MODIFIED="1704710540754"/>
+<node TEXT="なのでCopyingGCを簡単に適用できる" ID="ID_1935146464" CREATED="1704710513688" MODIFIED="1704710568354"/>
+</node>
+<node TEXT="Mark &amp; Sweep GCよりもスループットが出ると考える" ID="ID_613272796" CREATED="1704956892675" MODIFIED="1704956939092">
+<node TEXT="RedBlackTreeは全てのファイルを持つため大きい" ID="ID_908438870" CREATED="1704956939482" MODIFIED="1704956974993"/>
+<node TEXT="参照されているノードのみをコピーするだけのCopying GCの方が相性が良い" ID="ID_502796047" CREATED="1704956975764" MODIFIED="1704957000536"/>
+</node>
+</node>
+<node TEXT="GC併用はしないのか" ID="ID_939269191" CREATED="1704696736711" MODIFIED="1704776977043">
+<node TEXT="今回は単純な実装をしたい" ID="ID_91131104" CREATED="1704776780918" MODIFIED="1704776789505">
+<node TEXT="単なる木のコピー" ID="ID_532595291" CREATED="1704776790471" MODIFIED="1704776797065"/>
+<node TEXT="証明のしやすさにつながる" ID="ID_297159546" CREATED="1704776798186" MODIFIED="1704776845819"/>
+</node>
+<node TEXT="併用するとバックアップやレプリケーションは別の仕組みにする必要がある" ID="ID_896411663" CREATED="1704957031261" MODIFIED="1704957059039"/>
+</node>
+<node TEXT="Rustの所有権のような仕組みにしないのか" ID="ID_110730790" CREATED="1704696742911" MODIFIED="1704954332719">
+<node TEXT="単純な実装にしたい" ID="ID_1639528076" CREATED="1704955568322" MODIFIED="1704955577331"/>
+<node TEXT="コピーでやる方がデータの透過性を維持しやすい" ID="ID_104562515" CREATED="1704955577814" MODIFIED="1704955770934"/>
+<node TEXT="コピーの方がバックアップやレプリケーションも同様の仕組みで実装できる" ID="ID_1846713241" CREATED="1704955771362" MODIFIED="1704955798240"/>
+</node>
+<node TEXT="バックアップとして扱うことも可能" ID="ID_1170979330" CREATED="1704954394351" MODIFIED="1704954402539">
+<node TEXT="メモリ上とディスク上のデータ構造が同一" ID="ID_1687864170" CREATED="1704955435232" MODIFIED="1704955460360"/>
+<node TEXT="GCで木をコピーするようにバックアップ用のコピーを作成可能" ID="ID_1027992110" CREATED="1704955460903" MODIFIED="1704955483078"/>
+<node TEXT="From領域をバックアップとして扱うことも考えられる" ID="ID_834146670" CREATED="1704955483744" MODIFIED="1704955507082"/>
+<node TEXT="RedBlackTree自体が非破壊" ID="ID_1343358619" CREATED="1704955507787" MODIFIED="1704955517941">
+<node TEXT="データの履歴を持っている" ID="ID_996919473" CREATED="1704955518379" MODIFIED="1704955535054"/>
+<node TEXT="バージョンを持ったバックアップになる" ID="ID_813768933" CREATED="1704955535459" MODIFIED="1704955560610"/>
+</node>
+</node>
+</node>
+<node TEXT="CopyRedBlackTreeによるレプリケーション" ID="ID_1106336919" CREATED="1703490971550" MODIFIED="1704973002324">
+<node TEXT="GCとほとんど同じ仕組みで実装する" ID="ID_1738615864" CREATED="1704973003111" MODIFIED="1704973021762"/>
+<node TEXT="実際にはCopy時に送信を同時に行う" ID="ID_1536582463" CREATED="1704973022427" MODIFIED="1704974557823"/>
+</node>
+</node>
+<node TEXT="CopyRedBlackTreeの実装" FOLDED="true" ID="ID_1619882257" CREATED="1701697553803" MODIFIED="1703491075408" VSHIFT_QUANTITY="-4.5 pt">
+<node TEXT="コピーのアルゴリズム" ID="ID_64994373" CREATED="1703491215841" MODIFIED="1703491223454">
+<node TEXT="アルゴリズム" ID="ID_972208221" CREATED="1699849518269" MODIFIED="1699849522647">
+<node TEXT="左側を深さ優先で辿る" ID="ID_239741561" CREATED="1699849525266" MODIFIED="1699849604742">
+<node TEXT="Stack push" ID="ID_1718409210" CREATED="1699849778090" MODIFIED="1699849781012"/>
+</node>
+<node TEXT="アロケートしたノードは別のContext上に作る" ID="ID_573859973" CREATED="1699849620905" MODIFIED="1699849638042">
+<node TEXT="GCのため" ID="ID_259949416" CREATED="1699849638520" MODIFIED="1699849668501"/>
+<node TEXT="Copy後古いContextを消す" ID="ID_1297792398" CREATED="1699849646521" MODIFIED="1699849693755"/>
+<node TEXT="メモリ管理をモナドで表していることになる" ID="ID_152951728" CREATED="1699849705089" MODIFIED="1699849715878"/>
+</node>
+<node TEXT="リーフまで降りたらroot方向に木を戻る" ID="ID_1233772087" CREATED="1699849731393" MODIFIED="1699849765553">
+<node TEXT="Stack pop" ID="ID_1907664340" CREATED="1699849765982" MODIFIED="1699849773214"/>
+<node TEXT="右側を呼び出す" ID="ID_1658933965" CREATED="1699849789218" MODIFIED="1699849803550"/>
+</node>
+<node TEXT="Stackを2つ使うならば" ID="ID_804128791" CREATED="1699849785880" MODIFIED="1699850937824">
+<node TEXT="全体のStack" ID="ID_1465604948" CREATED="1699850965212" MODIFIED="1699858010811">
+<node TEXT="originの木を辿るために使う" ID="ID_1918769190" CREATED="1699858046929" MODIFIED="1699858071837"/>
+</node>
+<node TEXT="途中のStack" ID="ID_1149999446" CREATED="1699850966215" MODIFIED="1699858024318">
+<node TEXT="右側を呼び出す際にそれまでの左側部分木を保持" ID="ID_225633027" CREATED="1699851138198" MODIFIED="1699858042178"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="コード説明" ID="ID_1352482727" CREATED="1704630501155" MODIFIED="1704630507416"/>
+<node TEXT="証明のしやすさについて" ID="ID_2776247" CREATED="1703492904417" MODIFIED="1703492910899">
+<node TEXT="Stackの使用に関して" ID="ID_432827984" CREATED="1703492856041" MODIFIED="1703492863503"/>
+</node>
+</node>
+<node TEXT="信頼性" ID="ID_1221084016" CREATED="1702289777950" MODIFIED="1702289781581">
+<node TEXT="モデル検査とAgdaによる実装" ID="ID_1438858883" CREATED="1702289781790" MODIFIED="1702289794818"/>
+</node>
+<node TEXT="評価" ID="ID_1053436711" CREATED="1702112499515" MODIFIED="1702112509004"/>
+<node TEXT="今後" ID="ID_87524419" CREATED="1702112509364" MODIFIED="1702112512270"/>
+</node>
+<node TEXT="修論で言いたいこと" POSITION="left" ID="ID_1194781583" CREATED="1701690732709" MODIFIED="1701696321975" HGAP_QUANTITY="29 pt" VSHIFT_QUANTITY="134.25 pt">
+<node TEXT="RedBlackTreeのCopyでreplicationによる信頼性の向上とGCの仕組みを実装した" ID="ID_729318951" CREATED="1701690742376" MODIFIED="1701691473760"/>
+<node TEXT="ファイルシステムとDBを同一システムとして実装してしまおうという試みの一部" ID="ID_803529790" CREATED="1701693180112" MODIFIED="1701696299725"/>
+</node>
+</node>
+</map>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/mm/rbtree-gearsagda.mm	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,276 @@
+<map version="freeplane 1.11.1">
+<!--To view this file, download free mind mapping software Freeplane from https://www.freeplane.org -->
+<node TEXT="rbtree-gearsagda" FOLDED="false" ID="ID_452131666" CREATED="1610381621610" MODIFIED="1681354145545" STYLE="oval">
+<font SIZE="18"/>
+<hook NAME="MapStyle" zoom="0.75">
+    <properties edgeColorConfiguration="#808080ff,#ff0000ff,#0000ffff,#00ff00ff,#ff00ffff,#00ffffff,#7c0000ff,#00007cff,#007c00ff,#7c007cff,#007c7cff,#7c7c00ff" show_icon_for_attributes="true" associatedTemplateLocation="template:/standard-1.6-noEdgeColor.mm" show_note_icons="true" fit_to_viewport="false"/>
+
+<map_styles>
+<stylenode LOCALIZED_TEXT="styles.root_node" STYLE="oval" UNIFORM_SHAPE="true" VGAP_QUANTITY="24 pt">
+<font SIZE="24"/>
+<stylenode LOCALIZED_TEXT="styles.predefined" POSITION="bottom_or_right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="default" ID="ID_207122690" COLOR="#000000" STYLE="fork">
+<arrowlink SHAPE="CUBIC_CURVE" COLOR="#000000" WIDTH="2" TRANSPARENCY="200" DASH="" FONT_SIZE="9" FONT_FAMILY="SansSerif" DESTINATION="ID_207122690" STARTARROW="NONE" ENDARROW="DEFAULT"/>
+<font NAME="SansSerif" SIZE="10" BOLD="false" ITALIC="false"/>
+<richcontent CONTENT-TYPE="plain/auto" TYPE="DETAILS"/>
+<richcontent TYPE="NOTE" CONTENT-TYPE="plain/auto"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.details"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.attributes">
+<font SIZE="9"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.note" COLOR="#000000" BACKGROUND_COLOR="#ffffff" TEXT_ALIGN="LEFT"/>
+<stylenode LOCALIZED_TEXT="defaultstyle.floating">
+<edge STYLE="hide_edge"/>
+<cloud COLOR="#f0f0f0" SHAPE="ROUND_RECT"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="defaultstyle.selection" BACKGROUND_COLOR="#afd3f7" BORDER_COLOR_LIKE_EDGE="false" BORDER_COLOR="#afd3f7"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.user-defined" POSITION="bottom_or_right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="styles.topic" COLOR="#18898b" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subtopic" COLOR="#cc3300" STYLE="fork">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.subsubtopic" COLOR="#669900">
+<font NAME="Liberation Sans" SIZE="10" BOLD="true"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.important" ID="ID_3752836">
+<icon BUILTIN="yes"/>
+<arrowlink COLOR="#003399" TRANSPARENCY="255" DESTINATION="ID_3752836"/>
+</stylenode>
+</stylenode>
+<stylenode LOCALIZED_TEXT="styles.AutomaticLayout" POSITION="bottom_or_right" STYLE="bubble">
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level.root" COLOR="#000000" STYLE="oval" SHAPE_HORIZONTAL_MARGIN="10 pt" SHAPE_VERTICAL_MARGIN="10 pt">
+<font SIZE="18"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,1" COLOR="#0033ff">
+<font SIZE="16"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,2" COLOR="#00b439">
+<font SIZE="14"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,3" COLOR="#990000">
+<font SIZE="12"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,4" COLOR="#111111">
+<font SIZE="10"/>
+</stylenode>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,5"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,6"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,7"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,8"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,9"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,10"/>
+<stylenode LOCALIZED_TEXT="AutomaticLayout.level,11"/>
+</stylenode>
+</stylenode>
+</map_styles>
+</hook>
+<node TEXT="GearAgdanによるRed Black Tree の検証" POSITION="bottom_or_right" ID="ID_1707429913" CREATED="1681354146375" MODIFIED="1681354149504"/>
+<node TEXT="Gears OS" POSITION="top_or_left" ID="ID_1627768067" CREATED="1681370097231" MODIFIED="1681370135147">
+<node TEXT="Continuation based C" ID="ID_886365419" CREATED="1681370135452" MODIFIED="1681370144727"/>
+<node TEXT="CodeGear and DataGear" ID="ID_1505619678" CREATED="1681370145576" MODIFIED="1681370169360"/>
+<node TEXT="GearsAgda" ID="ID_1483093782" CREATED="1681370170247" MODIFIED="1681370174624"/>
+<node TEXT="lightweigt continuation" ID="ID_709373441" CREATED="1681370232271" MODIFIED="1681370241482"/>
+</node>
+<node TEXT="meta computation" POSITION="top_or_left" ID="ID_587222105" CREATED="1681370246638" MODIFIED="1681370255183">
+<node TEXT="IO" ID="ID_939386664" CREATED="1681370255664" MODIFIED="1681370261532"/>
+<node TEXT="Hoare Logic" ID="ID_468705414" CREATED="1681370262977" MODIFIED="1681370270967"/>
+</node>
+<node TEXT="meata computation in GearsAgda" POSITION="top_or_left" ID="ID_1679966111" CREATED="1681370285647" MODIFIED="1681370300383">
+<node TEXT="Gears Form" ID="ID_562028595" CREATED="1681370303175" MODIFIED="1681370328863"/>
+<node TEXT="Meta computation" ID="ID_532649685" CREATED="1681370334319" MODIFIED="1681370340118"/>
+<node TEXT="Segment" ID="ID_1391622726" CREATED="1681370342818" MODIFIED="1681370346242"/>
+<node TEXT="stub" ID="ID_1481524131" CREATED="1681370347413" MODIFIED="1681370350369"/>
+<node TEXT="CodeGear table" ID="ID_528079968" CREATED="1681370352629" MODIFIED="1681370366378"/>
+</node>
+<node TEXT="Hoare Logic" POSITION="top_or_left" ID="ID_590542814" CREATED="1681370375413" MODIFIED="1681370379970">
+<node TEXT="command base" ID="ID_1041738747" CREATED="1681370380249" MODIFIED="1681370383059"/>
+<node TEXT="first order" ID="ID_1511997811" CREATED="1681370399684" MODIFIED="1681370403829"/>
+<node TEXT="soundness" ID="ID_783227970" CREATED="1681370407410" MODIFIED="1681370413286">
+<node TEXT="separated from program" ID="ID_549960702" CREATED="1681370413548" MODIFIED="1681370423487"/>
+</node>
+<node TEXT="no proof support" ID="ID_94897053" CREATED="1681370433921" MODIFIED="1681370438778"/>
+</node>
+<node TEXT="GearsAgda" POSITION="top_or_left" ID="ID_613685836" CREATED="1681370441463" MODIFIED="1681370446502">
+<node TEXT="written in Agda" ID="ID_883451142" CREATED="1681370450642" MODIFIED="1681370456415">
+<node TEXT="proof assistance" ID="ID_567095247" CREATED="1681370456760" MODIFIED="1681370462431"/>
+</node>
+<node TEXT="any lightweight continuation form" ID="ID_512231980" CREATED="1681370472049" MODIFIED="1681370490394"/>
+<node TEXT="close to basic unit in a compiler" ID="ID_1639405885" CREATED="1681370493600" MODIFIED="1681370507300"/>
+<node TEXT="concurrency" ID="ID_1969768669" CREATED="1681370510538" MODIFIED="1681370522360"/>
+<node TEXT="meta computation" ID="ID_1341787488" CREATED="1681370523208" MODIFIED="1681370528202">
+<node TEXT="Hoare Logic style" ID="ID_1596917933" CREATED="1681370535368" MODIFIED="1681370546348"/>
+<node TEXT="with invariant" ID="ID_1946393368" CREATED="1681370547204" MODIFIED="1681370553272"/>
+</node>
+<node TEXT="data with proofs" ID="ID_1144050858" CREATED="1681370596859" MODIFIED="1681370601940">
+<node TEXT="invariant" ID="ID_375933480" CREATED="1681370605320" MODIFIED="1681370610877"/>
+<node TEXT="much simpler" ID="ID_245103686" CREATED="1681370613781" MODIFIED="1681370622639"/>
+</node>
+</node>
+<node TEXT="Presentation" POSITION="top_or_left" ID="ID_353783059" CREATED="1683887345844" MODIFIED="1683887354414">
+<node TEXT="Gears OS 上のRedBlack treeの検証" ID="ID_1491219391" CREATED="1683887359703" MODIFIED="1683887388887"/>
+<node TEXT="Gears OS" ID="ID_1283437220" CREATED="1683887392034" MODIFIED="1683887398709">
+<node TEXT="codeGear" ID="ID_852344528" CREATED="1683887400011" MODIFIED="1683887407526"/>
+<node TEXT="dataGear" ID="ID_902863002" CREATED="1683887408406" MODIFIED="1683887411233"/>
+<node TEXT="metaGear" ID="ID_1291359998" CREATED="1683887412417" MODIFIED="1683887416612"/>
+<node TEXT="context" ID="ID_1278338900" CREATED="1683887417374" MODIFIED="1683887420098"/>
+</node>
+<node TEXT="証明支援系" ID="ID_1151818435" CREATED="1683887427527" MODIFIED="1683887447307">
+<node TEXT="Agda" ID="ID_1588116344" CREATED="1683887449127" MODIFIED="1683887485328">
+<node TEXT="Pure Functional Language" ID="ID_380370390" CREATED="1683887485905" MODIFIED="1683887494711"/>
+<node TEXT="Curry Howard Isomorphism" ID="ID_1101016180" CREATED="1683887495105" MODIFIED="1683887509331"/>
+<node TEXT="dependent types" ID="ID_1254854471" CREATED="1683887511992" MODIFIED="1683887517351"/>
+<node TEXT="ZF Set theory" ID="ID_1470282970" CREATED="1683887520133" MODIFIED="1683887530950"/>
+</node>
+</node>
+<node TEXT="GearsAgda" ID="ID_561488040" CREATED="1683887538980" MODIFIED="1683887549597">
+<node TEXT="codeGear description in Agda" ID="ID_221445719" CREATED="1683887550068" MODIFIED="1683887560243"/>
+<node TEXT="dataGear = record in Agda" ID="ID_1464798893" CREATED="1683887562362" MODIFIED="1683887572050"/>
+</node>
+<node TEXT="" ID="ID_300192434" CREATED="1683887585196" MODIFIED="1683887675626">
+<node TEXT="story" ID="ID_971285216" CREATED="1683887585747" MODIFIED="1683887675625">
+<node TEXT="simple while program" ID="ID_1466788813" CREATED="1683887591179" MODIFIED="1683887597947">
+<node TEXT="Hoare Logic" ID="ID_1790836041" CREATED="1683887625141" MODIFIED="1683887631021"/>
+</node>
+<node TEXT="binary tree" ID="ID_1289118233" CREATED="1683887600009" MODIFIED="1683887605568">
+<node TEXT="invariant" ID="ID_1391465057" CREATED="1683887632823" MODIFIED="1683887637443">
+<node TEXT="tree" ID="ID_563398809" CREATED="1683887637744" MODIFIED="1683887640242"/>
+<node TEXT="stack" ID="ID_113711870" CREATED="1683887641100" MODIFIED="1683887644268"/>
+<node TEXT="replace" ID="ID_1902027956" CREATED="1683887644699" MODIFIED="1683887646930"/>
+</node>
+</node>
+<node TEXT="concurrency" ID="ID_711927376" CREATED="1683887606003" MODIFIED="1683887611028">
+<node TEXT="meta gear" ID="ID_1861251046" CREATED="1683887658899" MODIFIED="1683887670736"/>
+<node TEXT="context" ID="ID_1053098679" CREATED="1683887671464" MODIFIED="1683887674103"/>
+</node>
+<node TEXT="red black tree" ID="ID_980116618" CREATED="1683887611641" MODIFIED="1683887617305">
+<node TEXT="red black tree invariant" ID="ID_437599501" CREATED="1683887648752" MODIFIED="1683887656910"/>
+</node>
+</node>
+<node TEXT="simple while program" ID="ID_1206362061" CREATED="1683887677689" MODIFIED="1683887683318"/>
+<node TEXT="binary tree" ID="ID_559363966" CREATED="1683887684951" MODIFIED="1683887691598"/>
+<node TEXT="concurrenct" ID="ID_205306235" CREATED="1683887692777" MODIFIED="1683887696069"/>
+<node TEXT="red black tree" ID="ID_798727234" CREATED="1683887696492" MODIFIED="1683887702100"/>
+</node>
+</node>
+<node TEXT="concurrency" POSITION="bottom_or_right" ID="ID_1659998734" CREATED="1681370628915" MODIFIED="1681370636745">
+<node TEXT="codeGear-wise concurency" ID="ID_1216124303" CREATED="1681370637291" MODIFIED="1681370656059"/>
+<node TEXT="assuming  finite computation in a codeGear" ID="ID_573537896" CREATED="1681370657029" MODIFIED="1681370677168"/>
+<node TEXT="scheduler" ID="ID_327350914" CREATED="1681370679365" MODIFIED="1681370685685">
+<node TEXT="in meta computation" ID="ID_1272612921" CREATED="1681370686271" MODIFIED="1681370693104"/>
+<node TEXT="code table" ID="ID_1779321838" CREATED="1681370741527" MODIFIED="1681370746964">
+<node TEXT="all codeGear" ID="ID_1073597539" CREATED="1681370747218" MODIFIED="1681370752548"/>
+<node TEXT="numbered" ID="ID_1618653220" CREATED="1681370753308" MODIFIED="1681370756196"/>
+<node TEXT="stub" ID="ID_573578192" CREATED="1681370756935" MODIFIED="1681370759362"/>
+</node>
+<node TEXT="Context" ID="ID_1995851564" CREATED="1681370693516" MODIFIED="1681370697602">
+<node TEXT="current code" ID="ID_1885258842" CREATED="1681370728219" MODIFIED="1681370732220"/>
+<node TEXT="all dataGear" ID="ID_1859577487" CREATED="1681370733587" MODIFIED="1681370739913"/>
+</node>
+<node TEXT="communication" ID="ID_387799092" CREATED="1681370705533" MODIFIED="1681370712647"/>
+</node>
+<node TEXT="model checking" ID="ID_1191776209" CREATED="1681370766180" MODIFIED="1681370771240"/>
+<node TEXT="proofs on concurrenct" ID="ID_1117350246" CREATED="1681370771658" MODIFIED="1681370781273"/>
+</node>
+<node TEXT="while program" POSITION="bottom_or_right" ID="ID_710382637" CREATED="1681370805471" MODIFIED="1681370811890"/>
+<node TEXT="binary tree" POSITION="bottom_or_right" ID="ID_1922786513" CREATED="1681370796432" MODIFIED="1681370804204">
+<node TEXT="stack invariant" ID="ID_1448419661" CREATED="1681370821482" MODIFIED="1681370830261"/>
+<node TEXT="tree invariant" ID="ID_243832132" CREATED="1681370830768" MODIFIED="1681370835246"/>
+<node TEXT="replace invariant" ID="ID_1303870466" CREATED="1681370835840" MODIFIED="1681370840736"/>
+</node>
+<node TEXT="red black tree" POSITION="bottom_or_right" ID="ID_263237724" CREATED="1681370787198" MODIFIED="1681370792658">
+<node TEXT="red and black" ID="ID_385223552" CREATED="1681370848145" MODIFIED="1681370856270"/>
+<node TEXT="parent and grand parent" ID="ID_517970079" CREATED="1681370857076" MODIFIED="1681370866920">
+<node TEXT="in stack" ID="ID_901165358" CREATED="1681370867215" MODIFIED="1681370872234"/>
+</node>
+<node TEXT="concurrency" ID="ID_23246060" CREATED="1681370878663" MODIFIED="1681370883733">
+<node TEXT="root replacement" ID="ID_184711355" CREATED="1681370884231" MODIFIED="1681370892725">
+<node TEXT="transaction" ID="ID_1256246418" CREATED="1681370893169" MODIFIED="1681370898372"/>
+</node>
+<node TEXT="non destructive" ID="ID_1377710910" CREATED="1681370903423" MODIFIED="1681370909214">
+<node TEXT="read sharing" ID="ID_1853077777" CREATED="1681370910265" MODIFIED="1681370917627"/>
+</node>
+</node>
+</node>
+<node TEXT="complied code" POSITION="bottom_or_right" ID="ID_1551916219" CREATED="1681370926034" MODIFIED="1681370931197">
+<node TEXT="gearsAgda  → CbC conversion" ID="ID_159756131" CREATED="1681370931496" MODIFIED="1681370953438"/>
+<node TEXT="combine multiple codeGear" ID="ID_1952851358" CREATED="1681371036240" MODIFIED="1681371047551">
+<node TEXT="optimization" ID="ID_256515995" CREATED="1681371048689" MODIFIED="1681371053081"/>
+</node>
+</node>
+<node TEXT="is this reliable?" POSITION="bottom_or_right" ID="ID_189224322" CREATED="1681370969828" MODIFIED="1681370979059">
+<node TEXT="with proofs" ID="ID_114174861" CREATED="1681370979357" MODIFIED="1681370985340">
+<node TEXT="relative to the theory" ID="ID_194349290" CREATED="1681370985587" MODIFIED="1681371003316"/>
+</node>
+<node TEXT="invariant gives all property" ID="ID_955091732" CREATED="1681371007176" MODIFIED="1681371020551"/>
+</node>
+<node TEXT="is this scale?" POSITION="bottom_or_right" ID="ID_1442547192" CREATED="1681371022394" MODIFIED="1681371028550">
+<node TEXT="size of invariant" ID="ID_66636375" CREATED="1681470579922" MODIFIED="1681470584136"/>
+<node TEXT="polynominal of cases of invariant" ID="ID_1431513531" CREATED="1681470584691" MODIFIED="1681470597800"/>
+<node TEXT="not all combination is possible" ID="ID_1626555105" CREATED="1681470604805" MODIFIED="1681470612527"/>
+<node TEXT="we don&apos;t need to fill all the proof" ID="ID_1601614737" CREATED="1681470615256" MODIFIED="1681470627377">
+<node TEXT="incremental" ID="ID_1230800920" CREATED="1681470627899" MODIFIED="1681470630690"/>
+<node TEXT="partial" ID="ID_649982266" CREATED="1681470631099" MODIFIED="1681470634557"/>
+</node>
+</node>
+<node TEXT="contents" POSITION="bottom_or_right" ID="ID_1884614552" CREATED="1681470012072" MODIFIED="1681470018912">
+<node TEXT="verified red black tree" ID="ID_72137676" CREATED="1681470019151" MODIFIED="1681470047634"/>
+<node TEXT="importance" ID="ID_510340227" CREATED="1681470049510" MODIFIED="1681470056562">
+<node TEXT="conversion to classical form" ID="ID_312471113" CREATED="1681470523375" MODIFIED="1681470532568">
+<node TEXT="destructive" ID="ID_1083852390" CREATED="1681470532868" MODIFIED="1681470536236"/>
+<node TEXT="B-tree" ID="ID_1942790971" CREATED="1681470545925" MODIFIED="1681470551384"/>
+</node>
+<node TEXT="sequencial" ID="ID_783108258" CREATED="1681470056922" MODIFIED="1681470064048"/>
+<node TEXT="concurrent" ID="ID_924506929" CREATED="1681470065130" MODIFIED="1681470068278"/>
+</node>
+<node TEXT="GearsAgda" ID="ID_1614171466" CREATED="1681470071381" MODIFIED="1681470074368">
+<node TEXT="lightweight contination" ID="ID_351064745" CREATED="1681470074675" MODIFIED="1681470097157"/>
+<node TEXT="CbC" ID="ID_280197854" CREATED="1681470108615" MODIFIED="1681470110151"/>
+</node>
+<node TEXT="classical approach" ID="ID_439782904" CREATED="1681470111745" MODIFIED="1681470120213">
+<node TEXT="Hoare Logic" ID="ID_182843234" CREATED="1681470120549" MODIFIED="1681470123261"/>
+<node TEXT="conversion to Haskell" ID="ID_18215857" CREATED="1681470123809" MODIFIED="1681470131336"/>
+<node TEXT="verified but ..." ID="ID_86587986" CREATED="1681470188224" MODIFIED="1681470199159"/>
+</node>
+<node TEXT="GearsAgda" ID="ID_1624783880" CREATED="1681470180677" MODIFIED="1681470219506">
+<node TEXT="invariant" ID="ID_1822140966" CREATED="1681470228788" MODIFIED="1681470232318">
+<node TEXT="denotational semantics" ID="ID_1070066378" CREATED="1681470408330" MODIFIED="1681470415583"/>
+</node>
+<node TEXT="agda introduction" ID="ID_1367482138" CREATED="1681470219860" MODIFIED="1681470227830"/>
+<node TEXT="simple while loop" ID="ID_594789165" CREATED="1681470293741" MODIFIED="1681470299458"/>
+<node TEXT="loop connector" ID="ID_351381557" CREATED="1681470305517" MODIFIED="1681470311087">
+<node TEXT="reduction parameter" ID="ID_1854148894" CREATED="1681470317762" MODIFIED="1681470324065"/>
+</node>
+</node>
+<node TEXT="binary tree" ID="ID_1045767712" CREATED="1681470238269" MODIFIED="1681470245777">
+<node TEXT="invariant" ID="ID_753395200" CREATED="1681470246095" MODIFIED="1681470248201">
+<node TEXT="tree" ID="ID_1179203442" CREATED="1681470248688" MODIFIED="1681470254441"/>
+<node TEXT="stack" ID="ID_743804922" CREATED="1681470255070" MODIFIED="1681470256626"/>
+<node TEXT="replace" ID="ID_1919439558" CREATED="1681470257216" MODIFIED="1681470260232"/>
+</node>
+<node TEXT="program guidance" ID="ID_1331715304" CREATED="1681470429863" MODIFIED="1681470434889">
+<node TEXT="differential of invariant" ID="ID_1547779379" CREATED="1681470435636" MODIFIED="1681470444235"/>
+</node>
+</node>
+<node TEXT="red black tree" ID="ID_233668516" CREATED="1681470263078" MODIFIED="1681470266745"/>
+<node TEXT="concurrency" ID="ID_1836297821" CREATED="1681470271427" MODIFIED="1681470275872">
+<node TEXT="segmented" ID="ID_290000164" CREATED="1681470276209" MODIFIED="1681470282080"/>
+<node TEXT="code table" ID="ID_278977606" CREATED="1681470350363" MODIFIED="1681470354017"/>
+<node TEXT="scheduler" ID="ID_111624804" CREATED="1681470354785" MODIFIED="1681470364123">
+<node TEXT="fairness" ID="ID_1334406786" CREATED="1681470365738" MODIFIED="1681470368781"/>
+</node>
+<node TEXT="temporal logic" ID="ID_1823540844" CREATED="1681470371933" MODIFIED="1681470376053"/>
+</node>
+<node TEXT="execution" ID="ID_95297285" CREATED="1681470455878" MODIFIED="1681470458355">
+<node TEXT="data gear with proof is executable" ID="ID_1369250602" CREATED="1681470459700" MODIFIED="1681470472621"/>
+<node TEXT="need not to fill the proof" ID="ID_1356375326" CREATED="1681470474612" MODIFIED="1681470483972"/>
+</node>
+<node TEXT="scalability" ID="ID_1468980711" CREATED="1681470382482" MODIFIED="1681470389280">
+<node TEXT="invariant library" ID="ID_1421089406" CREATED="1681470391295" MODIFIED="1681470395791"/>
+</node>
+</node>
+</node>
+</map>
Binary file Report/final/refe/.DS_Store has changed
Binary file Report/final/refe/LeftLearning.pdf has changed
Binary file Report/final/refe/main.pdf has changed
Binary file Report/final/refe/midterm.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/Eabstract.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,5 @@
+Our laboratory has developed GearsOS, and our current task is to improve the reliability of GearsOS. GearsOS will adopt RedBlackTree, and we will verify this by using mathematical proofs.
+
+GearsAgda enables verification of BinarySearchTree by implementing HoareLogic on Agda. We would like to extend this to RedBlackTree. To extend it, we need to write an implementation that finds Invariants (conditions that are invariant in loops and recursion) and processes them while preserving them. In addition, since GearsOS is written in the CbC language and has features such as not being able to perform recursive calls, it is necessary to perform verification using GearsAgda, which is directly compatible with it.
+
+In this paper, we aim to provide a proven implementation of RedBlackTree using Invariant in GearsAgda, including how to describe it in Agda.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/Jabstract.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,5 @@
+当研究室では,GearsOSを開発しており,信頼性を向上させることが現在の課題である.GearsOSでは,RedBlackTreeの採用が予定されており,これを数学的な証明を用いて検証することで,GearsOSの信頼性向上を図る.
+
+GearsAgdaでは,HoareLogicをAgda上に実装することで,BinarySearchTreeの検証を可能にした.これを,RedBlackTreeに拡張していきたい.拡張するためには,Invariant(ループや再帰で不変の条件)を見つけ出し,それを保持したまま処理を行う実装を記述する必要がある.また,GearsOSはCbC言語で記述されており,再帰呼び出しができないなどの特徴があるため,それに直接対応したGearsAgdaを用いて検証を行う必要がある.
+
+本論文では,Agdaでの記述方法をはじめ,GearsAgdaにおいてInvariantを用いたRedBlackTreeの証明付き実装を目指す.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter0.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,96 @@
+\chapter{関連研究および基礎概念}
+
+本章には,基礎概念や関連研究を記述する.各自の研究内容に合わせて章タイトルを「基礎概念」や「関連研究」などに変更しても構わない.一般的に基礎概念や関連研究の章では,文書を読み進めるにあたって必要となる知識や関連する研究成果等の情報を提供することを目的としている\cite{ref-related-work}.
+
+\section{記述内容の詳細について}
+\subsection{基礎概念について}
+基礎概念では,読者が文書を読み進めるにあたって必要となる知識を記述する.例えば,読者としては学部3年次程度の学生を想定し,それら学生が有していない知識を対象として説明すると良い.ただし,学部3年次相当の読者が既に有している知識であっても,読者が文書を読み進めるにあたって特別に必要と考えられる場合はこの限りではない.
+
+基礎概念の記述に当たっては,本報告書や卒業論文における位置づけを明確にする必要がある.また記述内容は教科書等の文献を写すのではなく,自身の研究に関連する事項を抽出整理し,自分の言葉で記述する.
+
+\subsection{関連研究について}
+関連研究は,自分の研究テーマの社会的もしくは学術的な意義付けを明確にし,研究テーマの主題すなわち「問い」や「アイディア」を具体化・明確化するために記述する.
+
+社会的もしくは学術的な意義付けでは,「知能情報工学」の視点を持って,歴史的な経緯を時系列的に説明したり社会課題を述べたりすると良い.
+
+研究テーマの主題を明らかにするために,単に類似の研究や過去の研究を説明するのではなく,それら研究が自分の主題とどのように関連しているかを具体的に述べる.自身の研究が既存の研究をより発展させたものであるならば,既存の研究では何のために何がどこまで提案・実装されているかを明確に述べ,さらにそれを発展させる必要性などを述べる.自分の研究が既存の研究を改良するものであるならば,既存の研究が何のために何をどこまで提案・実装しているかを明確に述べ,どこに問題があって,どのような解決が望まれているかなどを述べる.
+
+これら記述によって,次節の提案手法や考察での既存研究と自身の研究成果との比較検討の土台を作ることを目指す.
+
+\subsection{参考文献について}
+参考文献を記載する目的は,他者の著作権たる知的財産権を保護するとともに,自己の主張すなわち執筆論文の責任範囲を明確にすることである.倫理講習で学んでいるように,参考文献を適切に記載しないことは論文における不正行為となる\cite{ref-jsps}.
+
+参考文献とは引用した文献の総称をいう.引用には間接引用と直接引用がある.間接引用した文献を参考文献といい,参考とは他者の執筆した文章や作成した資料を自分の主張の材料とすることをいう.他方,直接引用した文献を引用文献といい,引用とは他者の文章や作成資料の一部を自分の文書の一部として含めることをいう.
+
+参考にした資料,引用した資料を特定できる情報を「出典」といい,論文,書籍,新聞,Webサイトの情報などが出典にあたる.出典は,本文書の末尾にthebibliography環境を使用してリストし,cite命令を使用して本文中で引用する.なお,出典の表示項目と表示例については,各自の研究分野の慣例に従うか,電子情報通信学会や情報処理学会の文献記載例に従うものとする\cite{ref-ieice,ref-ipsj}.例えば,電子情報通信学会の文献記載例では,学術論文(article, journal)の場合\cite{ref-journal,ref-journal-ex},著作の場合\cite{ref-book,ref-book-ex},学会論文(proceedings)の場合\cite{ref-proceedings,ref-proceedings-ex},Webページの場合\cite{ref-web, ref-ieice}のようになる.
+
+\section{各種記述について}
+\subsection{図表の挿入}
+本報告書では必要に応じて図表を使用する.論文における図は,写真やグラフなどの画像情報と図キャプションから構成される.図挿入にはfigure環境を使用し,figure環境内でincludegraphics命令を用いて画像情報を挿入し,caption命令を使用して図キャプションを挿入する.その他に,label命令を用いて図に固有のラベルを付し,本文中でref命令を使用することで図番号を表示する.例えば,「fig:name」というラベルの図の図番号表示は図\ref{fig:name}のように記述する.図キャプションは図の下部に配置し,本文を読まなくとも何の図であるかわかる説明を記述する.図中の文字および線の色や太さなどは,A4用紙に印刷したときに読める程度のサイズや色とする.
+
+\begin{figure}[htbp]
+  \begin{center}
+   \includegraphics[width=120mm]{./figs/sample.png}
+   \caption[図目次用の短いキャプション]{図の下に記載されるキャプション.本文を読まなくても何の図かわかる説明を記述する.}
+   \label{fig:name}
+   \end{center}
+\end{figure}
+
+論文における表は,表組と表キャプションから構成される.表挿入にはtable環境を使用し,表組はtable環境内でtabular環境を使用して行う.ラベルや参照方法などは図と同様であるが,表キャプションは表の上部に配置する.
+
+\begin{table}[htbp]
+\caption{実験のフローチャート図}
+\label{table:sample}
+	\centering
+	\begin{tabular}{|c||l|}
+		\hline
+		種類		& 実行例\\
+		\hline
+		\hline
+		太字		& \textbf{琉球大学}\\
+		\hline
+		下線		& \underline{琉球大学}\\
+		\hline
+		イタリック	& \textit{University of the Ryukyus}\\
+		\hline
+	\end{tabular}
+\end{table}
+
+\subsection{数式の挿入}
+本文中での数式表現は,数式の前後に\$ を付けて「\$数式 \$」のように記述する.例えば,y=ax+bを数式表現すると$y=ax+b$のようになる.
+
+独立した行(別行)に数式を表現する場合,数式番号の有無で使用する環境や命令が異なる.数式番号が不要の場合には以下のようにブラケット記法を使う.
+\[
+\sum _{i=0}^{2} x_i^2 = x_0^2+x_1^2+x_2^2.
+\]
+
+以下の式(\ref{eq0})$\sim $(\ref{eq2})のように,数式番号が必要な場合や別行仕立てで複数行の数式を表現するときにはalign環境を使う.複数行表記の場合,最後の数式を除く各行の数式の最後には改行コードを記述する.また,複数行に渡る数式の=を揃えたいときには,=の前に\& を付ける.
+\begin{align}
+y &= ax+b, \label{eq0}\\
+\frac{dx}{dt} &= a_{11}x+a_{12}y, \label{eq1}\\
+\frac{dy}{dt} &= a_{21}x+a_{22}y. \label{eq2}
+\end{align}
+
+以下の式(\ref{eq3})のように,行列表現にはarray環境を使う.array環境の基本的な記述方法はtabular環境と同様である.
+\begin{align}
+	\left( 	\begin{array}{c}
+				\dot{x} \\
+				\dot{y}
+		 	\end{array} \right)
+	=
+	\left( 	\begin{array}{cc}
+				a_{11} & a_{12} \\
+				a_{21} & a_{22}
+		 	\end{array} \right)
+	\left( 	\begin{array}{c}
+				x \\
+				y
+		 	\end{array} \right)	. \label{eq3}
+\end{align}
+
+\subsection{ギリシャ文字の表記}
+ギリシャ文字を本文中で表示する場合には表記命令の前後を\$で囲む.別行の数式で表示する場合には\$を使用せずに記述する.例えば,$\alpha , \beta , \gamma , \delta , \epsilon , \eta , \theta , \lambda , \mu , \pi , \sigma , \tau , \phi , \psi , \omega $のように記述する.大文字のギリシャ文字を表示したいときには命令の一文字目を大文字にし,$\Sigma $のように記述する.
+
+\subsection{その他の特殊文字等の表記}
+\TeX には演算記号や比較演算子など様々な文字表記命令が用意されている.各自の必要性に応じて適切な表記命令を用いることとする.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter2.aux	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,50 @@
+\relax 
+\@writefile{toc}{\contentsline {chapter}{\numberline {第2章}基礎概念}{3}\protected@file@percent }
+\@writefile{lof}{\addvspace {10\jsc@mpt }}
+\@writefile{lot}{\addvspace {10\jsc@mpt }}
+\@writefile{toc}{\contentsline {section}{\numberline {2.1}CbC}{3}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {2.2}GearsOS}{3}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {2.3}BinarySearchTree}{4}\protected@file@percent }
+\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces BinarySearchTreeにおけるノード関係}}{4}\protected@file@percent }
+\newlabel{BinarySearchTree.png}{{2.1}{4}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.4}RedBlackTree}{4}\protected@file@percent }
+\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces RedBlackTreeにおけるノードの制約}}{5}\protected@file@percent }
+\newlabel{RedBlackTree.png}{{2.2}{5}}
+\@writefile{toc}{\contentsline {section}{\numberline {2.5}Agda}{5}\protected@file@percent }
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.1}Data型の実装}{6}\protected@file@percent }
+\newlabel{Data.agda}{{2.1}{6}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.1}AgdaにおけるData型の実装}{6}\protected@file@percent }
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.2}関数の実装}{6}\protected@file@percent }
+\newlabel{plus.agda}{{2.2}{6}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.2}Agdaにおける足し算の実装}{6}\protected@file@percent }
+\newlabel{+.agda}{{2.3}{7}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.3}Agdにおける二項演算子の実装}{7}\protected@file@percent }
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.3}場合分けの書き方}{7}\protected@file@percent }
+\newlabel{compare.agda}{{2.4}{7}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.4}Agdaにおける場合分けの書き方}{7}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {2.6}GearsAgda}{8}\protected@file@percent }
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.6.1}GearsAgdaの記述方法}{9}\protected@file@percent }
+\newlabel{gears.agda}{{2.5}{9}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.5}GearsAgdaにおける足し算の実装}{9}\protected@file@percent }
+\@setckpt{./text/chapter2}{
+\setcounter{page}{11}
+\setcounter{equation}{0}
+\setcounter{enumi}{4}
+\setcounter{enumii}{0}
+\setcounter{enumiii}{0}
+\setcounter{enumiv}{0}
+\setcounter{footnote}{0}
+\setcounter{mpfootnote}{0}
+\setcounter{part}{0}
+\setcounter{chapter}{2}
+\setcounter{section}{6}
+\setcounter{subsection}{1}
+\setcounter{subsubsection}{0}
+\setcounter{paragraph}{0}
+\setcounter{subparagraph}{0}
+\setcounter{figure}{2}
+\setcounter{table}{0}
+\setcounter{parentequation}{0}
+\setcounter{lstnumber}{14}
+\setcounter{lstlisting}{5}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter2.log	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,28 @@
+This is e-upTeX, Version 3.141592653-p4.1.0-u1.29-230214-2.6 (utf8.sjis) (TeX Live 2023) (preloaded format=platex 2023.7.24)  10 JAN 2024 00:28
+entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+**chapter2.tex
+(./chapter2.tex
+pLaTeX2e <2023-02-14>+1, based on
+LaTeX2e <2023-06-01> patch level 1
+L3 programming layer <2023-06-30>
+! Undefined control sequence.
+l.2 \chapter
+            {基礎概念}
+? 
+! Emergency stop.
+l.2 
+    
+End of file on the terminal!
+
+ 
+Here is how much of TeX's memory you used:
+ 17 strings out of 475891
+ 333 string characters out of 5782800
+ 1909074 words of memory out of 5000000
+ 21367 multiletter control sequences out of 15000+600000
+ 561940 words of font info for 53 fonts, out of 8000000 for 9000
+ 929 hyphenation exceptions out of 8191
+ 15i,0n,23p,47b,18s stack positions out of 10000i,1000n,20000p,200000b,200000s
+No pages of output.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter2.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,173 @@
+
+\chapter{基礎概念}
+
+本章では,本論文を読み進めるにあたって必要となる知識,基礎概念を解説していく.
+
+\section{CbC}
+CbC とは,Continuation based C を略称したものであり,本研究室で開発している GearsOS を構成する言語である.
+CbC は C 言語から,ループ制御構造とサブルーチンコールを取り除き,継続を導入した C 言語の下位言語である.
+また,dataGear をデータの単位,code Gear を処理の単位として記述する.
+ノーマルレベルとメタレベルの切り分けが容易などの利点がある.
+
+\section{GearsOS}
+GearsOS とは,本研究室で開発している信頼性の保障を目的としたOS である.CbCで記述された軽量継続を基本とする構成になっている.
+現在は,形式手法による証明を目的とする「GearsAgda」 , ユーザーレベルタスクマネジメントの実装を目的とする「GearsOS」 , スタンドアロンOSの開発を目的とする「x.v6」 の3つ GearsOS の開発が進んでいる.
+ファイルシステムとデータベースではRedBlackTreeの採用が予定されており,本研究における信頼性向上の対象になっている.
+CbC で記述されているため,ノーマルレベルとメタレベルの切り分けが容易に行えるなどの利点がある.
+
+\section{BinarySearchTree}
+BinarySearchTree とは,ファイルシステムなどで使われる木構造の一種である.ノード,リーフ,ルートの 3 つの要素で成り立っている.
+ノード間の関係は家系図に見立てた用語で表現される.例えば,あるノードから見た上のノードは親ノードであり,下につながるノードは子ノードと呼ぶ.
+また,key と value を持ち,key の大小関係が $左の子のkey < 親 key  右の子のkey $であるという制約がある.
+
+\begin{figure}[htbp]
+  \begin{center}
+   \includegraphics[width=60mm]{./figs/BinarySearchTree.png}
+   \caption[BinarySearchTreeにおけるノード関係]{BinarySearchTreeにおけるノード関係}
+   \label{BinarySearchTree.png}
+   \end{center}
+\end{figure}
+図\ref{BinarySearchTree.png}を見ると前述した制約が満たされていることがわかる.また,赤いノードから見た青のノードは親子関係であり,赤ノードから見た緑ノードは叔父に当たることがわかる.
+本研究の対象であるRedBlackTreeの元となる木構造となっている.
+\section{RedBlackTree}
+RedBlackTree とは,GearsOS に採用される予定のあるバランスした二分探索木の一種である.
+BinarySearchTree と key の大小関係性は同じであるが,それぞれのノードに赤と黒の色の概念を持ち以下の4つの制約を持つ.
+\begin{enumerate}
+\item 各ノードは赤か黒の色を持つ
+\item 赤のノードは赤のノードを子に持たない
+\item リーフノードはすべて黒である
+\item 任意のノードについて,そのノードから子孫の葉までの道に含まれる黒いノードの数は,選んだ葉によらず一定である.
+\end{enumerate}
+
+図\ref{RedBlackTree.png}を見ると,上記の制約が満たされていることを確認することができる.
+\begin{figure}[htbp]
+  \begin{center}
+   \includegraphics[width=60mm]{./figs/RedBlackTree.png}
+   \caption[RedBlackTreeにおけるノードの制約]{RedBlackTreeにおけるノードの制約}
+   \label{RedBlackTree.png}
+   \end{center}
+\end{figure}
+
+特に4つ目の制約により,RedBlackTreeがある程度の平衡性を持っていることが確認できる.挿入・削除・検索といった操作は最悪のケースでは木の高さに比例した計算時間をようするが,RedBlackTreeは黒の深さで木の高さが平衡しているため,最悪のケースにおける計算量が,データの挿入・削除・検索のいずれにおいても,データ構造のうちで最善のものの一つであるという利点がある.また,木の深さがバランスしていない場合は,親と叔父の色\input{../../Report}
+を見て木を回転させるという操作が必要になる.
+
+\section{Agda}
+Agdaとは,定理証明支援器であり,関数型言語である.Agdaでは依存型という型システムを持ち,Curry-Howard同型対応により,命題と型付ラムダ計算が1対1で対応するため,Agdaで書かれたプログラムの証明を書くことができる.
+本節では,本論文を読み進めるにあたって必要なAgdaの実装について,ソースコードを例に出しながら解説していく.
+
+\subsection{Data型の実装}
+Data型とは,複数の要素をもつ集合である.集合が持つ要素ごとに実装を施す必要がある.例として自然数の実装を考える.
+自然数とは,ペアノの公理から0と後者関数(Successor)から成り立つ.0とは一番初めの数であり,前者が存在しない数,後者関数とは前者の数に1を足したものを出力する関数を意味する.したがって,すべての自然数は,0と自然数に1を足したもので定義できる.これをAgdaで実装するとソースコード\ref{Data.agda}のようになる.
+\begin{lstlisting}[caption=AgdaにおけるData型の実装 , label=Data.agda]
+data @$\mathbb{N}$@ : Set where
+ zero  : @$\mathbb{N}$@
+ suc   : @$\mathbb{N}$@ → @$\mathbb{N}$@
+\end{lstlisting}
+1行目では$\mathbb{N}$ という名前の型を定義している.$\mathbb{N}$は2つの要素を持っていることが見て取れる.
+
+2行目から3行目では要素それぞれの実装をおこなっている.3行目の$\mathbb{N}$ → $\mathbb{N}$は,型$\mathbb{N}$を一つ受け取り,型$\mathbb{N}$を返すという意味になっている.これは後者関数の実装である.
+
+以上から,ペアノの公理に基づく自然数をAgdaで実装できていることが確認できる.
+
+\subsection{関数の実装}
+Agdaでも他の言語同様に関数を実装できる.今回は例として足し算の実装を挙げ解説していく.
+足し算はペアノの公理により,n+0とn+sucを示すことで定義できる.
+\begin{lstlisting}[caption=Agdaにおける足し算の実装,label=plus.agda]
+plus : @$\mathbb{N}$@ → @$\mathbb{N}$@ → @$\mathbb{N}$@
+plus n zero = n
+plus n (suc m) = suc (plus n m)
+
+-- plus 2 (suc 2) = suc (plus 2 2)
+-- * plus 2 2 = plus 2 (suc 1) .... 
+-- plus 2 (suc 2) = suc (suc (suc (plus 2 0)))
+\end{lstlisting}
+ソースコード\ref{plus.agda}について解説していく.
+
+Agdaでは,-を2つ書くことでコメントアウトが書ける.ここでは,plus関数を展開する様子を記述している.
+
+1行目では関数を定義している.Agdaで関数を定義する際には:(セミコロン)の前に関数名を記述し,後ろに受け取る型と返す型を記述する.この場合ではplusという名前の関数は,型$\mathbb{N}$を2つ受け取り,型$\mathbb{N}$を返すという意味になる.
+
+2行目と3行目では,それぞれの場合における動作を記述している.今回の例では,型$\mathbb{N}$の定義により,足す数が0である場合とsucである場合の2パターンが存在する.これらをそれぞれ記述する必要がある.
+
+2行目では,足す数が0である場合を記述しており,n+0はnであるため,そのままnを返す.
+
+3行目では,足す数がsucである場合を記述している.ここでは,suc m のsucを外に出すことで,再帰的に足し算を記述している.例えば2+3を考えてみる.2+3はこの場合plus 2 (suc 2) = suc (plus 2 2)と書くことができる.次に,plus 2 2の部分はplus 2 (suc 1)と書ける.最終的には,plus 2 (suc 2) = suc (suc (suc (plus 2 + 0)))となり,2行目のn+0の形に帰着する.したがって,n+sucは停止性を示すことができ,再帰的に定義できることが確認できる.
+
+また,Agdaでは\_(アンダースコア)を用いることで引数を受け取ることができ,これを用いることで二項演算子を実装することができる.その例をソースコード\ref{+.agda}に示す.
+\begin{lstlisting}[caption=Agdにおける二項演算子の実装,label=+.agda]
+_+_ : @$\mathbb{N}$@ → @$\mathbb{N}$@ → @$\mathbb{N}$@
+n + zero = n
+n + (suc m) = suc (plus n m)
+\end{lstlisting}
+二項演算子を実装することで,後述する$\_ \land \_$ などを用いたコードの可読性を向上させることができる.
+
+\subsection{場合分けの書き方}
+Agdaでは,with文を使用することで簡単に場合分けを行うことができる.これにより,様々な場合に応じた柔軟なコーディングが可能になっている.
+今回は,二つの自然数を比較し,大きいほうを出力する関数を解説する.
+\begin{lstlisting}[caption=Agdaにおける場合分けの書き方 , label=compare.agda]
+Compare : @$\mathbb{N}$@ → @$\mathbb{N}$@ → @$\mathbb{N}$@
+Compare x y with <-cmp x y 
+Compare x y | tri< a ¬b ¬c = y
+... | tri@$\simeq$@ ¬a b ¬c = x
+... | tri> ¬a ¬b c = x
+\end{lstlisting}
+ソースコード\ref{compare.agda}を解説する.
+
+1行目では関数の実装を行っている.2つの自然数を受け取り,自然数を返すという意味になる.
+
+2行目では,with文を使用することで場合分けを行っている.二つの自然数を比較する際には,普通$\textless -cmp$文を使用する.まとめると,受け取った二つの自然数x,yを比較するという意味になっている.
+
+3行目から5行目では,比較した結果の場合分けに応じた処理を記述している.triの後に続くa , b , c にはそれぞれ,$\textless ,\equiv , \textgreater$の意味がある.$\neg$ には否定の意味があることから,場合分けに応じてa,b,cのうち1つだけが真になるようになっている.また,... $|$と記述することで,入力が同じ場合に記述を省略することができる.3行目から5行目の入力はすべて同じであり,2通りの書き方ができることを示している.
+
+3行目では,aが真であり, $x \textless  y $の場合の処理を記述すればよい.したがって,大きいほうを返せばいいのでyを返す.
+
+4行目では,bが真であり,$x \equiv  y $の場合の処理を記述すればよい.したがって,どちらを返しても同じなのでxを返す.
+
+5行目では,cが真であり,$x  \textgreater y $の場合の処理を記述すればよい.したがって,大きいほうを返せばよいのでxを返す.
+
+%\subsection{Record型の実装}
+
+\section{GearsAgda}
+GearsAgda とは,GearsOS の一種であり,CbC の概念を取り入れた Agda の記述方法である.
+これを用いることで,CbC に直接対応した柔軟な証明を行うことができる.
+CbCの仕様を満たしている GearsAgda で書かれた証明付きのコードは,CbC にコンパイルすることが可能である.
+そのため,GearsAgda で証明することができれば,直接的に CbCで実装することが可能である.
+
+\subsection{GearsAgdaの記述方法}
+GearsAgdaはCbCの概念を取り入れているため,再帰的処理が行えず,軽量継続を用いて処理を記述する必要がある.ここでは,2.5.2で実装した足し算の関数をGearsAgdaで記述し,比較しながら解説していく.
+
+\begin{lstlisting}[caption=GearsAgdaにおける足し算の実装 , label=gears.agda]
+plus-case : {l : Level} {t : Set l} → @$\mathbb{N}$@ →  @$\mathbb{N}$@ → 
+	(next :  @$\mathbb{N}$@ →   @$\mathbb{N}$@ → t) → (exit :  @$\mathbb{N}$@ → t) → t
+plus-case x y next exit with y
+... | zero = exit x
+... | (suc y) = next (suc x) y
+
+{-# TERMINATING #-}
+Loop-plus : {l : Level} {t : Set l} →  @$\mathbb{N}$@ →  @$\mathbb{N}$@ → 
+	(exit :  @$\mathbb{N}$@ → t) → t
+Loop-plus x y exit = plus-case x y (λ x y → Loop-plus x y exit) exit
+
+plus-gears :  @$\mathbb{N}$@ →  @$\mathbb{N}$@ →  @$\mathbb{N}$@
+plus-gears x y = Loop-plus x y (λ x → x )
+\end{lstlisting}
+ソースコード\ref{gears.agda}について解説する.
+
+2.5.2で実装した足し算のコードと比べ,記述量が約3倍になっていることが確認できる.これは,GearsAgdaが再帰処理を行えず,自己呼び出しによるループのみで足し算を行う必要があり,場合分け部分とループ部分を構成する必要があるからである.
+
+1行目と2行目は関数の定義部分になっており,plus-case関数では,次の遷移先を決める処理が記述されている.自然数2つとnext,exitを受け取り,tを返す.
+ここでいうtとは不定の型であり,tを返すためにはnextかexitを必ず呼び出す必要がある.
+これがCbCのgoto文を用いた軽量継続に当たり,GearsAgdaでは,nextかexitを必ず呼び出さなければ型が一致しないため,継続によって関数が機能していることが確認できる.
+
+4行目と5行目では,それぞれの遷移先における条件を記述している.
+with文によりyがzeroである場合,ループをexitを呼び出してxを返す.yが(suc y)の場合,nextを呼び出して,yから1引き,xに1を足す.
+これらにより,nextを繰り返すたびにyが減りxが増え,yがzeroになった時にループが停止し,xを返すことで足し算の結果となることが確認できる.
+
+8行目から10行目では簡単なループを記述している.x,yとexitを受け取り,plus-caseを呼び出している.plus-caseに渡す引数のnextにLoop-plus自身を渡すことで,ループを構築している.Loop-plusの最後に返す型はtであり,Loop-plusの定義部分により,exitを経由することでしかtを得ることができないため,exitになるまでnextをループすし,exitを必ず経由してからループを抜けることが確認できる.
+
+12行目から13行目では,関数の実行部分を記述している.Loop-plusを呼び出すことで足し算が開始される.Loop-plusはx y とexitを引数に持つ.このときexitにある
+$(λ x → x ) $は受け取った値をそのまま返すという意味になっており,exitした際に出たxをそのまま返すという意味になっている.
+
+以上により,GearsAgdaで記述された足し算を実装することができた.GearsAgdaでの実装は,通常の実装に比べ煩雑になってしまう.しかし,CbCの概念に寄り添った形であるGearsAgdaは,CbCへとコンパイルすることが容易に可能だと考えられ,GearsOSの信頼性を向上と密接に関係している.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter3.aux	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,28 @@
+\relax 
+\@writefile{toc}{\contentsline {chapter}{\numberline {第3章}提案手法}{11}\protected@file@percent }
+\@writefile{lof}{\addvspace {10\jsc@mpt }}
+\@writefile{lot}{\addvspace {10\jsc@mpt }}
+\@writefile{toc}{\contentsline {section}{\numberline {3.1}BinarySearchTreeを応用した,RedBlackTreeの実装}{11}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {3.2}Invariantを見つける}{11}\protected@file@percent }
+\@setckpt{./text/chapter3}{
+\setcounter{page}{12}
+\setcounter{equation}{0}
+\setcounter{enumi}{2}
+\setcounter{enumii}{0}
+\setcounter{enumiii}{0}
+\setcounter{enumiv}{0}
+\setcounter{footnote}{0}
+\setcounter{mpfootnote}{0}
+\setcounter{part}{0}
+\setcounter{chapter}{3}
+\setcounter{section}{2}
+\setcounter{subsection}{0}
+\setcounter{subsubsection}{0}
+\setcounter{paragraph}{0}
+\setcounter{subparagraph}{0}
+\setcounter{figure}{0}
+\setcounter{table}{0}
+\setcounter{parentequation}{0}
+\setcounter{lstnumber}{14}
+\setcounter{lstlisting}{0}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter3.log	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,28 @@
+This is e-upTeX, Version 3.141592653-p4.1.0-u1.29-230214-2.6 (utf8.sjis) (TeX Live 2023) (preloaded format=platex 2023.7.24)  11 JAN 2024 19:24
+entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+**chapter3.tex
+(./chapter3.tex
+pLaTeX2e <2023-02-14>+1, based on
+LaTeX2e <2023-06-01> patch level 1
+L3 programming layer <2023-06-30>
+! Undefined control sequence.
+l.1 \chapter
+            {提案手法}
+? 
+! Emergency stop.
+l.1 
+    
+End of file on the terminal!
+
+ 
+Here is how much of TeX's memory you used:
+ 17 strings out of 475891
+ 333 string characters out of 5782800
+ 1909074 words of memory out of 5000000
+ 21367 multiletter control sequences out of 15000+600000
+ 561940 words of font info for 53 fonts, out of 8000000 for 9000
+ 929 hyphenation exceptions out of 8191
+ 15i,0n,23p,65b,18s stack positions out of 10000i,1000n,20000p,200000b,200000s
+No pages of output.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter3.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,27 @@
+\chapter{提案手法}
+本章では,RedBlackTreeをGearsAgdaで証明付き実装するため,以下の手順を提案する.
+\begin{enumerate}
+\item BinarySearchTreeを応用した,RedBlackTreeの実装
+\item Invariantを見つける
+\end{enumerate}
+
+\section{BinarySearchTreeを応用した,RedBlackTreeの実装}
+BinarySearchTreeとRedBlackTreeは共通点が多いため,比較的簡単であるBinarySearchTreeを実装し,それをRedBlackTreeの実装に応用する.変更点としては,ノードそれぞれが色を持つこと,黒の深さでバランスすること,バランスするときに木が回転することなどが考えられる.
+
+\section{Invariantを見つける}
+Red Black Tree の正しさを GearsAgda で証明するためには,RedBlackTree の Invariant(ループや再帰で不変な条件/命題)を見つけることが有効であると考えられる.
+例えば,あるツリーに対してRedBlackTreeであるためのInvariantを渡す.その後,様々な操作を行った後にツリーがInvariantを持っていることを証明することで,操作後のツリーはRedBlackTreeであるといえる.したがって,GearsAgdaでRedBlackTreeを証明付き実装するためには,Invariantをみつけることが不可欠である.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter4.aux	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,38 @@
+\relax 
+\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}RedBlackTreeとInvariantの実装}{12}\protected@file@percent }
+\@writefile{lof}{\addvspace {10\jsc@mpt }}
+\@writefile{lot}{\addvspace {10\jsc@mpt }}
+\@writefile{toc}{\contentsline {section}{\numberline {4.1}RedBlackTreeの基本的な実装}{12}\protected@file@percent }
+\newlabel{bt.agda}{{4.1}{12}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.1}BinarySearchTreeの基本的な実装}{12}\protected@file@percent }
+\newlabel{rbt.agda}{{4.2}{13}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.2}RedBlackTreeの基本的な実装}{13}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {4.2}Invariantの実装}{14}\protected@file@percent }
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}RBtreeInvariantの実装}{14}\protected@file@percent }
+\newlabel{RBtreeInvariant.agda}{{4.3}{14}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.3}RBtreeInvariantの実装}{14}\protected@file@percent }
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}stackInvariantの実装}{16}\protected@file@percent }
+\newlabel{stackInvariant.agda}{{4.4}{16}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.4}stackInvariantの実装}{16}\protected@file@percent }
+\@setckpt{./text/chapter4}{
+\setcounter{page}{18}
+\setcounter{equation}{0}
+\setcounter{enumi}{2}
+\setcounter{enumii}{0}
+\setcounter{enumiii}{0}
+\setcounter{enumiv}{0}
+\setcounter{footnote}{0}
+\setcounter{mpfootnote}{0}
+\setcounter{part}{0}
+\setcounter{chapter}{4}
+\setcounter{section}{2}
+\setcounter{subsection}{2}
+\setcounter{subsubsection}{0}
+\setcounter{paragraph}{0}
+\setcounter{subparagraph}{0}
+\setcounter{figure}{0}
+\setcounter{table}{0}
+\setcounter{parentequation}{0}
+\setcounter{lstnumber}{11}
+\setcounter{lstlisting}{4}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter4.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,167 @@
+\chapter{RedBlackTreeとInvariantの実装}
+本章では,RedBlackTreeとそのInvariantをGearsAgdaを用いて実装していく.
+
+\section{RedBlackTreeの基本的な実装}
+第3章1節で説明した通り,BinarySearchTreeをもとにRedBlackTreeの基本的な部分を実装していく.BinarySearchTreeはleafとnodeの二つの要素から構成されており,nodeには以下の4つの要素を持つ.
+\begin{enumerate}
+\item key : 自然数であり,この値によって木構造を決定する.
+\item value : nodeに格納する値である.型は任意で決めることができる.
+\item left-child : 該当ノードから見た左側に持つ子供ノード.制約により,親のKeyの値よりも小さいKeyを持つ.
+\item right-child : 該当ノードから見た右側に持つ子供ノード.制約により,親のKeyの値よりも大きいKeyを持つ.
+\end{enumerate}
+これらの要素を含むData型をGearsAgdaで記述することで,基本的なBinarySearchTreeの構造を示すことができる.
+
+\begin{lstlisting}[caption=BinarySearchTreeの基本的な実装 , label=bt.agda]
+data bt {n : Level} (A : Set n) : Set n where
+  leaf : bt A
+  node :  (key : @$\mathbb{N}$@) → (value : A) →
+    (left : bt A ) → (right : bt A ) → bt A
+  
+\end{lstlisting}
+ソースコード\ref{bt.agda}について解説する.
+
+1行目ではData型の実装に基づき,bt型を定義している.ここに書かれている(A : Set n)とは,任意の型を1つ受け取るという意味になり,valueの持つ型を指定することができる.
+前述した通り,BinarySearchTreeはleafとnodeの二つの要素からなるので,直下に要素ごとの処理を記述する必要がある.
+
+2行目では,leafを定義している.leafはKeyもValueも持たないため,ただbt Aを返すだけ と記述するだけになることが確認できる.
+
+3行目と4行目ではnodeについて定義している.nodeは必要な4つの要素を入力に受け取り,bt型を返すという実装になっていることが確認できる.
+
+BinarySearchTreeの基本的な実装を元に色の概念を付け加えることで,RedBlackTreeの基本的な実装を行うことができる.ここでは,Valueに色を組で渡すことで色の概念を付け加える.
+\begin{lstlisting}[caption=RedBlackTreeの基本的な実装 , label=rbt.agda]
+data Color  : Set where
+    Red : Color
+    Black : Color
+ 
+RBTreeTest : bt (Color ∧ @$\mathbb{N}$@)
+RBTreeTest = node 8  @$\llangle$@  Black , 200 @$\rrangle$@  (node 5  @$\llangle$@  Red , 100 @$\rrangle$@  (_) (_)) (node 10  @$\llangle$@  Red , 300 @$\rrangle$@  (_) (_))
+\end{lstlisting}
+ソースコード\ref{rbt.agda}について解説する.
+
+1行目から3行目では,色の概念を追加するためにColorという名前のData型を定義している.要素にはRedとBlackの二つがあり,二つともただColorを返すだけになっている.
+
+5行目では,実際に簡単なRedBlackTreeを記述している.前述した通り,btに与えるValueの値の部分を色と自然数の組にして渡している.今回は例として自然数を用いているが,ここの型は任意に決めることができる.
+
+6行目では,RBtreeTestの処理内容を記述している.ここでは例として,第2章4節で説明した図\ref{RedBlackTree.png}のルートノードから見た木構造を実装している.BinarySearchTreeでのvalueに相当する部分が,色と自然数の組として記述されていることが確認できる.また,左の子にKeyが5で赤の子,右の子にKeyが10で赤の子が記述されており,これは第2章4節で説明した図\ref{RedBlackTree.png}の木構造と一致する.Agdaでは,\_ (アンダースコア)を使用することでコンパイラが推論し,記述を省略できる.本来,親ノードから見た孫ノードが入るが,木構造全体を記述すると冗長になるため省略している.
+
+以上により,GearsAgdaにてRedBlackTreeを記述し木構造を実装できることが確認できた.
+
+\section{Invariantの実装}
+第3章2節で説明した通り,本研究ではInvariantを中心に証明を進めていく.本節では,特に重要になる以下のInvariantについての実装を解説していく.
+\begin{enumerate}
+\item RBtreeInvariant : 対象の木がRedBlackTreeであることを示す
+\item stackInvariant : 辿った木を積むstackが辿った順に構成されていることを示す
+%\item replacedRBTree : 木を置き換えた際に,木が置き換わっていることを示す
+\end{enumerate}
+これらのInvariantは,RedBlackTreeにおける操作の正当性を示すのに重要なInvariantとなっている.
+
+\subsection{RBtreeInvariantの実装}
+RBtreeInvariantは,対象の木がRedBlackTreeであることを示すInvariantである.これは,RedBlackTreeの可能な値全部の集合であり,RedBlackTreeの表示的意味論そのものになっている.つまり,全体の集合を型として用意し,この型に該当することを示すことで,対象の木はRedBlackTreeであるということを証明することができる.RedBlackTreeの取る可能な値は8種類あり,それぞれについての実装を記述する必要がある.
+
+\begin{lstlisting}[caption=RBtreeInvariantの実装 , label=RBtreeInvariant.agda]
+data RBtreeInvariant {n : Level} {A : Set n} : (tree : bt (Color ∧ A)) → Set n where
+    rb-leaf : RBtreeInvariant leaf
+    rb-single :  {c : Color} → (key : @$\mathbb{N}$@) → (value : A) →  RBtreeInvariant (node key  @$\llangle$@ c , value @$\rrangle$@ leaf leaf)
+    rb-right-red : {key key@$_1$@ : @$\mathbb{N}$@} → {value value@$_1$@ : A} 
+       → {t t@$_1$@ : bt (Color ∧ A)} → key < key@$_1$@
+       → black-depth t ≡ black-depth t@$_1$@
+       → RBtreeInvariant (node key@$_1$@ @$\llangle$@ Black , value@$_1$@ @$\rrangle$@ t t@$_1$@)
+       → RBtreeInvariant (node key  @$\llangle$@ Red ,   value  @$\rrangle$@ leaf (node key@$_1$@ @$\llangle$@ Black , value@$_1$@ @$\rrangle$@ t t@$_1$@))
+    rb-right-black : ? 
+    rb-left-red : ?
+    rb-left-black : {key key@$_1$@ : @$\mathbb{N}$@} → {value value@$_1$@ : A} 
+       → {t t@$_1$@ : bt (Color ∧ A)} → key < key@$_1$@ → {c : Color}
+       → black-depth t ≡ black-depth t@$_1$@
+       → RBtreeInvariant (node key@$_1$@ @$\llangle$@ c     , value@$_1$@ @$\rrangle$@ t t@$_1$@)
+       → RBtreeInvariant (node key  @$\llangle$@ Black , value  @$\rrangle$@ (node key@$_1$@ @$\llangle$@ c , value@$_1$@ @$\rrangle$@ t t@$_1$@) leaf)
+    rb-node-red  : {key key@$_1$@ key@$_2$@ : @$\mathbb{N}$@} → {value value@$_1$@ value@$_2$@ : A} → {t@$_1$@ t@$_2$@ t@$_3$@ t@$_4$@ : bt (Color ∧ A)} 
+       → key < key@$_1$@ → key@$_1$@ < key@$_2$@
+       → black-depth (node key  @$\llangle$@  Black  , value  @$\rrangle$@  t@$_1$@ t@$_2$@) ≡ black-depth (node key@$_2$@ @$\llangle$@  Black , value@$_2$@ @$\rrangle$@  t@$_3$@ t@$_4$@)
+       → RBtreeInvariant (node key @$\llangle$@ Black , value @$\rrangle$@ t@$_1$@ t@$_2$@)
+       → RBtreeInvariant (node key@$_2$@ @$\llangle$@ Black , value@$_2$@ @$\rrangle$@ t@$_3$@ t@$_4$@)
+       → RBtreeInvariant (node key@$_1$@ @$\llangle$@ Red , value@$_1$@ @$\rrangle$@ (node key @$\llangle$@ Black , value @$\rrangle$@ t@$_1$@ t@$_2$@) (node key@$_2$@ @$\llangle$@ Black , value@$_2$@ @$\rrangle$@ t@$_3$@ t@$_4$@))
+    rb-node-black  : ?
+\end{lstlisting}
+ソースコード\ref{RBtreeInvariant.agda}を解説していく.
+
+agdaでは「?」と記述することで,該当箇所の記述を省略することができる.ここでは,全体を記述すると冗長になってしまうため,最低限の説明が必要な部分を除き,記述を省略している.
+
+1行目では,RBtreeIvariant型を定義している.入力として,RedBlackTreeを受け取る.
+
+2行目ではrb-leafを定義しており,これはleafのInvariantを示している.RBtreeInvariantの引数にleafを渡すことで実装している.
+
+3行目ではrb-singleを定義しており,これはノードの左右にleafがついている木の最小単位のようなノードを示している.RBtreeInvaritantの引数に (node key$\llangle$c , value $\rrangle$ leaf leaf)を渡すことで実装している.
+
+4行目から8行目までは,rb-right-redを定義しており,これはノードの右側に子ノード,左側にはleafがあるようなノードのInvariantを示している.
+また,親ノードは赤と黒の2パターン存在するので,それぞれ別に定義する必要があり,4行目から8行目は赤の親ノード,9行目は黒の親ノードを定義している.
+
+5行目では,$key  \textless key_1$ を入力として受けるように記述されている.これは,このInvariantを示すためには,親子間のKeyの大小関係を必ず明示しなければいけないという意味になり,Keyの制約を満たす場合のみを通すことから,このInvariantを示すことで,Keyの正当性を示すことが可能になる.
+
+6行目では,親ノードからみた孫ノードの黒の深さが同じであることを入力として受けている.これはKeyの大小関係と同じように,このInvariantを示すことで,黒の深さの正当性を示すことが可能になる.
+
+7行目では,子ノードの色が黒であるInvariantを入力として受けている.rb-right-redでは,親は赤ノードであるため,必ず子ノードは黒であるという条件を含めていることが確認できる.
+
+11行目から15行目では,rb-left-blackを定義しており,これはノードの右側にleaf,左側には子ノードがあるようなノードのInvariantを示している.
+これは,前述したrb-right-red,rb-right-blackの左右の子を入れ替えたものであり,本質的な構造は似ているため,説明を省略する.
+ただし,親ノードが黒のとき,子ノードは赤と黒の2パターンが存在し,どちらの色でも可能という意味で$\llangle$c     , value $\rrangle$と記述されている.
+
+16行目から21行目では,rb-node-redを定義しており,これは左右それぞれに子ノードを持つようなノードのInvariantを示している.
+また,親ノードは赤と黒の2パターン存在するので,それぞれ別に定義する必要があり,16行目から21行目は赤の親ノード,22行目からは黒の親ノードを定義している.
+
+以上のように,RedBlackTreeの制約をInvariantの入力に含めることで,これを示した際にRedBlackTreeの正当性を証明することができる.
+
+\subsection{stackInvariantの実装}
+GearsOSのファイルシステムとデータベースでは,非破壊的なRedBlackTreeを採用することが予定されている.非破壊的とは,操作を行う際に木を上書きせず,コピーして木を構築することを意味し,読み込みと書き込みを同時に行うことができるなどの利点がある.非破壊的なRedBlackTreeを構築するためにはstackを使う必要がある.
+
+stackInvariantとは,木の操作を行う際に辿った木を積むstackが,辿った順に構成されていることを示すInvariantである.つまり,このInvariantを示すことで,対象のstackが積んできた木の履歴を見れるような形になっている.これを実装することにより,木をバランスさせる際などにstackを見て,ひとつ前の木に戻り操作を行うなどの実装が可能になる.
+
+\begin{lstlisting}[caption=stackInvariantの実装 , label=stackInvariant.agda]
+data stackInvariant {n : Level} {A : Set n}  (key : @$\mathbb{N}$@) : (top orig : bt A) → (stack  : List (bt A)) → Set n where
+    s-nil :  {tree0 : bt A} → stackInvariant key tree0 tree0 (tree0 :: [])
+    s-right :  (tree tree0 tree@$_1$@ : bt A) → {key@$_1$@ : @$\mathbb{N}$@ } → {v1 : A } → {st : List (bt A)}
+        → key@$_1$@ < key  
+        →  stackInvariant key (node key@$_1$@ v1 tree@$_1$@ tree) tree0 st
+        → stackInvariant key tree tree0 (tree :: st)
+    s-left :  (tree@$_1$@ tree0 tree : bt A) → {key@$_1$@ : @$\mathbb{N}$@ } → {v1 : A } → {st : List (bt A)}
+        → key  < key@$_1$@
+        →  stackInvariant key (node key@$_1$@ v1 tree@$_1$@ tree) tree0 st 
+        → stackInvariant key tree@$_1$@ tree0 (tree@$_1$@ :: st)
+\end{lstlisting}
+ソースコード\ref{stackInvariant.agda}について解説する.
+
+1行目では,stackInvariantの型を定義している.入力は,key,top,orig,stackの4つを受け取る.topとorigは両方ともbt型であり,topはstackの一番上にある木,origは一番下にある木を意味する.GearsAgdaにおいて,stackはList型を用いて定義する.List型は,任意の型を中に持ち,List (bt A)の書くことで木をListの中に持たせることができる.List型は, (tree0 :: [])のように記述することができ,「::」で要素同士を並べていく.「[]」は空であることを意味し,Listの終わりであることを示す.
+
+2行目では,stackの最小単位であるs-nilを定義している.これは,topとorigに受け取る木が同じであるといった特徴がある.
+
+3行目から6行目では,s-rightを定義している.
+5行目を見ると,入力でstackInvariantを受け取っている.これは,一個前の木で示されたstackInvariantであり,s-rightでは,この木の右側の子をstackに積んだことを示す.
+4行目を見ると,keyの大小関係を入力として受け取っており,対象のKeyよりも一個前のkey$_1$が小さく,木の順序性を保っていることが確認できる.
+6行目では,一個前のstackInvariantが示しているstackのstに,新たな木を積んだことを示すstackを(tree :: st)と表していることが確認できる.
+
+7行目から10行目では,s-leftを定義している.s-leftでは右側ではなく左側の子をstackに積んだことを示すInvariantになっている.その他の大まかな実装はs-rightと同じであるため,説明を省略する.
+
+以上により,一番下の木origから,対象の木topまでを辿った木を積むstackの正当性を示すInvariantを定義することができた.
+%\subsection{replacedRBTreeの実装}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter5.aux	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,41 @@
+\relax 
+\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}findRBTの実行}{18}\protected@file@percent }
+\@writefile{lof}{\addvspace {10\jsc@mpt }}
+\@writefile{lot}{\addvspace {10\jsc@mpt }}
+\@writefile{toc}{\contentsline {section}{\numberline {5.1}findRBTの実装}{18}\protected@file@percent }
+\@writefile{lot}{\contentsline {table}{\numberline {5.1}{\ignorespaces findRBTに使用される関数}}{19}\protected@file@percent }
+\newlabel{findRBT}{{5.1}{19}}
+\newlabel{findRBT.agda}{{5.1}{19}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.1}findRBTの実装}{19}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {5.2}findRBTの実行方法}{21}\protected@file@percent }
+\@writefile{lot}{\contentsline {table}{\numberline {5.2}{\ignorespaces findTestに使用される関数}}{21}\protected@file@percent }
+\newlabel{findtest}{{5.2}{21}}
+\newlabel{findTest.agda}{{5.2}{22}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.2}findTestの実装}{22}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {5.3}実行結果}{23}\protected@file@percent }
+\newlabel{result14}{{5.3}{23}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.3}Keyの値14のfindTest実行結果}{23}\protected@file@percent }
+\newlabel{result1}{{5.4}{24}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.4}Keyの値1のfindTest実行結果}{24}\protected@file@percent }
+\@setckpt{./text/chapter5}{
+\setcounter{page}{26}
+\setcounter{equation}{0}
+\setcounter{enumi}{2}
+\setcounter{enumii}{0}
+\setcounter{enumiii}{0}
+\setcounter{enumiv}{0}
+\setcounter{footnote}{0}
+\setcounter{mpfootnote}{0}
+\setcounter{part}{0}
+\setcounter{chapter}{5}
+\setcounter{section}{3}
+\setcounter{subsection}{0}
+\setcounter{subsubsection}{0}
+\setcounter{paragraph}{0}
+\setcounter{subparagraph}{0}
+\setcounter{figure}{0}
+\setcounter{table}{2}
+\setcounter{parentequation}{0}
+\setcounter{lstnumber}{20}
+\setcounter{lstlisting}{4}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter5.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,206 @@
+\chapter{findRBTの実行}
+ここでは,RedBlackTreeの基本的な操作であるFindの実装について説明していく.findは,指定されたkeyを持つnodeを探す操作になる.
+\section{findRBTの実装}
+findの操作は,第4章で実装したInvariantを保有しながら操作を行うことで,木の正当性を証明することができる.また,GearsAgdaでの実装となるため,第2章6節で説明した通り,軽量継続を用いた実装を行う必要がある.
+
+軽量継続はLoopを用いて行うので,この関数の停止条件を決める必要がある.前述したソースコード\ref{gears.agda}の足し算の例では,yが0になることでexitし,関数が停止するよう定義してある.ここでは,対象のkeyを持つノードが見つからないままleafに達してしまった時と対象のkeyを持つノードが見つかった時の2つを停止条件とする.
+
+また,findRBTにはさまざまな関数や記法が使われているため,それらの機能を表\ref{findRBT}にまとめる.
+\clearpage
+\begin{table}[htbp]
+\caption{findRBTに使用される関数}
+\label{findRBT}
+	\centering
+	\begin{tabular}{|c||l|}
+		\hline
+		名前		& 機能 \\
+		\hline
+		\hline
+		RBtreeLeftDown	&  親ノードからみた左の子のRBtreeInvariantを得る関数 \\
+		RBtreeRightDown	&  親ノードからみた右の子のRBtreeInvariantを得る関数 \\
+		\hline
+		case1	& $\lor$で与えられた要素の左の値を取り出すことができる. \\
+		case2	&$\lor$で与えられた要素の右の値を取り出すことができる.\\
+		\hline
+		proj1		& $\land$で与えられた要素の左の値を取り出すことができる.\\
+		proj2 	& $\land$で与えられた要素の右の値を取り出すことができる.\\
+		\hline
+		depth-1$\textless$	& 自然数の大小関係を証明する関数.3パターン存在する. \\
+		\hline
+	\end{tabular}
+\end{table}
+
+次に,実装したソースコードを以下に示す.
+
+\begin{lstlisting}[caption=findRBTの実装 , label=findRBT.agda]
+findRBT : {n m : Level} {A : Set n} {t : Set m} 
+     → (key : @$\mathbb{N}$@)
+     → (tree tree0 : bt (Color ∧ A) )
+     → (stack : List (bt (Color ∧ A)))
+     → RBtreeInvariant tree ∧ stackInvariant key tree tree0 stack
+     → (next : (tree1 : bt (Color ∧ A) ) 
+          → (stack : List (bt (Color ∧ A)))
+          → RBtreeInvariant tree1 ∧ stackInvariant key tree1 tree0 stack
+          → bt-depth tree1 < bt-depth tree
+          → t )
+     → (exit : (tree1 : bt (Color ∧ A)) 
+          → (stack : List (bt (Color ∧ A)))
+          → RBtreeInvariant tree1 ∧ stackInvariant key tree1 tree0 stack
+          → (tree1 ≡ leaf ) ∨ ( node-key tree1 ≡ just key )  
+          → t )
+     → t
+findRBT key leaf tree0 stack inv next exit 
+ = exit leaf stack inv (case1 refl)
+findRBT key (node key@$_1$@ value left right) tree0 stack inv next exit with <-cmp key key@$_1$@
+findRBT key (node key@$_1$@ value left right) tree0 stack inv next exit | tri< a ¬b ¬c
+ = next left (left :: stack) @$\llangle$@  RBtreeLeftDown left right (_∧_.proj1 inv) , s-left a (_∧_.proj2 inv) @$\rrangle$@   depth-1<
+findRBT key n tree0 stack inv _ exit | tri@$\simeq$@ ¬a refl ¬c 
+ = exit n stack inv (case2 refl)
+findRBT key (node key@$_1$@ value left right) tree0 stack inv next exit | tri> ¬a ¬b c
+ = next right (right :: stack) @$\llangle$@  RBtreeRightDown left right (_∧_.proj1 inv) , s-right c (_∧_.proj2 inv) @$\rrangle$@   depth-2<
+\end{lstlisting}
+ソースコード\ref{findRBT.agda}について解説する.
+
+1行目から16行目では,findRBTの関数を定義している.findRBTでは,7つの入力を受け取り,型tを返すという意味になっていることがわかる.6行目と11行目を見ると,nextとexitが定義されていることから,GearsAgdaを用いた軽量継続を行っていることが確認できる.
+
+5行目では,Invariantを受け取っている.ここでは,RBtreeInvariantとstackInvariantが組となって渡されており,topであるtreeについてのInvariantであることが確認できる.
+
+6行目と11行目では,軽量継続のnextとexitについての記述がある.両者とも,木とstackとそれぞれのInvariantの組を受け取るところまでは同じである.違いがあるのは,9行目と14行目である.nextの9行目を見ると,木の高さを比較しており,その段階で見ている木よりも次の木の高さが低いことを示している.これは,次の木に進むにつれてleafに近づいているという証明を受け取るという意味になる.次に,exitの14行目を見ると停止条件が指定されていることが確認できる.前述した通り,その段階で見ている木がleafの場合もしくは,見ている木のkeyが一致する場合が停止条件になっていることが確認できる.これらは,orで記述されており,どちらかを満たす場合停止するという意味になる.
+
+17行目から25行目では,実際の処理の内容について記述されている.これらは,4つの場合分けがなされており,1つは木がleafだった場合,残り3つはその段階で見ている木のkeyと指定されたkeyの大小関係による場合分けである.
+
+17行目では,見ている木がleafである場合の処理が記述されている.findRBTの2つ目の引数を見るとleafになっていることが確認できる.停止条件により,leafの場合はexitに遷移する.case1と書くことでorの一つ目の条件を抽出することができ,reflはそれらが同値であることを示すことから,それが満たされていることを証明している.
+
+19行目では,with文を使用することで場合分けをし,keyの大小関係によって次の遷移先を決定していることが確認できる.20,21行目と24,25行目での操作は,左右の差しかないため,説明を省略する.
+
+20行目と21行目では,指定されたkeyがその段階で見ているkey$_1$より小さい時の処理が記述されている.つまり,指定されたkeyを持つノードはkeyの制約により,必ず左側の木に存在していることになり,次の遷移先が左の子供になることがわかる.21行目を見ると,次の遷移先がleftになっており,stackのtopにleftが積まれていることが確認できる.Invariantの組は,RBtreeLeftDown関数とs-leftから導出している.どちらも,leftに遷移する際の前の状態(現在見ている状態)のInvariantが入力として必要である.これは,すでにinvとして入力で受け取っているため(\_∧\_.proj1 inv)のように記述することで,組の左側を入力として渡している.
+
+22行目と23行目では,見ている木のkeyが一致する場合について記述されている.これは停止条件であることから,exitに遷移する.23行目を見ると,見ている木とstackをそのまま返し,停止条件の2つ目を抽出し,それが満たされていることを証明している.
+
+以上により,GearsAgdaによるInvariantを保有したFindの操作を実装することができた.
+
+\section{findRBTの実行方法}
+findRBTを実行するためには,第2章6節で述べた通りGearsAgdaの記述方法に則って実装していく必要がある.
+ここでは,findRBTをテスト実行するfindTest関数をループコネクターでつなげ,軽量継続を用いた実行を可能にする.すべてのコードを解説すると冗長になってしまうことから,理解するために必要な関数や記述方法を表\ref{findtest}にまとめる.
+\begin{table}[htbp]
+\caption{findTestに使用される関数}
+\label{findtest}
+	\centering
+	\begin{tabular}{|c||l|}
+		\hline
+		名前		& 機能 \\
+		\hline
+		\hline
+		TerminatingLoopS	&   様々な関数を接続するループコネクターの役割を担う.\\
+		\hline
+		testRBTree0	& 図\ref{RedBlackTree.png}で示したRedBlackTreeをGearsAgda上で表した関数.\\
+		testRBI0	& testRBTree0のRBtreeInvariantを意味する.\\
+		\hline
+		result		& record型である,C言語でいう構造体である.findの結果を格納するために使用する.\\
+		\hline
+	\end{tabular}
+\end{table}
+
+\clearpage
+次に,実装したソースコードを以下に示す.
+\begin{lstlisting}[caption=findTestの実装 , label=findTest.agda]
+findTest : {n m : Level} {A : Set n } {t : Set m }
+   → (key :  @$\mathbb{N}$@)
+   → (tree0 : bt (Color ∧ A))
+   → RBtreeInvariant tree0
+   → (exit : (tree1 : bt (Color ∧ A))
+   	→ (stack : List (bt (Color ∧ A)))
+   	→ RBtreeInvariant tree1 ∧ stackInvariant key tree1 tree0 stack
+   	→ (tree1 ≡ leaf ) ∨ ( node-key tree1 ≡ just key )  → t ) 
+   → t
+ findTest {n} {m} {A} {t} k tr0 rb0 exit = TerminatingLoopS (bt (Color ∧ A) ∧ List (bt (Color ∧ A))) {λ p → RBtreeInvariant (proj1 p) ∧ stackInvariant k (proj1 p) tr0 (proj2 p) } (λ p → bt-depth (proj1 p)) @$\llangle$@  tr0 , tr0 :: [] @$\rrangle$@  @$\llangle$@  rb0 , s-nil @$\rrangle$@ 
+        $ λ p P loop → findRBT k (proj1 p) tr0 (proj2 p) P (λ t s P1 lt → loop @$\llangle$@  t ,  s  @$\rrangle$@  P1 lt )
+        $ λ tr1 st P2 O → exit tr1 st P2 O
+
+ findRBTreeTest : result
+ findRBTreeTest = findTest 14 testRBTree0 testRBI0
+        $ λ tr s P O → (record {tree = tr ; stack = s ; ti = (proj1 P) ; si = (proj2 P) ; exit = O})
+\end{lstlisting}
+
+ソースコード\ref{findTest.agda}について解説する.
+
+5行目を見ると,exitの条件が指定されている.これは,FindRBTと同じものになっている.TerminatingLoopSには停止条件が含まれていないためここで記述する必要がある.
+
+10行目を見ると,TerminatingLoopSが呼び出されていることがわかる.ここでの操作は複雑であるが,InvariantとしてRBtreeInvariantとstackInvariantを渡しており,Invariantを保有しながらLoopしていることが確認できる.
+
+11行目では,ループのnext部分を記述しており,findRBTを遷移先に指定していることが確認できる.
+
+12行目では,exitを呼び出しループが終了した際の処理を記述している.ここでは,findRBTとfindTestの終了条件を同じものに実装しているので,受け取った値をそのままexitの引数として与えることができる.
+
+14行目では,findRBTreeTestを実行する関数を定義している.ここでは,result型を指定することで,関数の結果を構造体のような形で持つことができる.
+
+15行目では,findTest関数を呼び出し,実際に検索するkeyの値と木と木のInvariantを引数として渡している.この例では,keyの値が14のノードをtestRBTree0の中から検索するという意味になる.
+
+16行目では,受け取った値をresult型に格納している.ここでは,検索結果の木,stack,RBtreeInvariant,stackInvariant,停止条件を保持している.
+
+以上により,findTestを実装することができる.
+
+\section{実行結果}
+ここでは,前述したfindTestの実行結果を述べ,解説していく.
+\renewcommand{\lstlistingname}{実行結果}
+\begin{lstlisting}[caption=Keyの値14のfindTest実行結果 , label=result14]
+record
+{ tree = node 14 @$\llangle$@  Red , 1400 @$\rrangle$@  leaf leaf
+; stack =
+    node 14 @$\llangle$@  Red , 1400 @$\rrangle$@  leaf leaf 
+    :: node 15 @$\llangle$@  Black , 1500 @$\rrangle$@  (node 14 @$\llangle$@  Red , 1400 @$\rrangle$@  leaf leaf) leaf 
+    :: node 10 @$\llangle$@  Red , 1000 @$\rrangle$@  leaf (node 15 @$\llangle$@  Black , 1500 @$\rrangle$@  (node 14 @$\llangle$@  Red , 1400 @$\rrangle$@  leaf leaf) leaf)
+    :: node 8 @$\llangle$@  Black , 800 @$\rrangle$@ 
+    (node 5 @$\llangle$@  Red , 500 @$\rrangle$@  (node 2 @$\llangle$@  Black , 200 @$\rrangle$@  leaf leaf)
+     (node 6 @$\llangle$@  Black , 600 @$\rrangle$@  leaf leaf))
+    (node 10 @$\llangle$@  Red , 1000 @$\rrangle$@  leaf
+     (node 15 @$\llangle$@  Black , 1500 @$\rrangle$@  (node 14 @$\llangle$@  Red , 1400 @$\rrangle$@  leaf leaf) leaf))
+    :: []
+; ti = rb-single 14 1400
+; si =
+    s-left
+    (s@$\leq$@s(s@$\leq$@s (s@$\leq$@s(s@$\leq$@s(s@$\leq$@s (s@$\leq$@s(s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s z@$\leq$@n)))))))))))))))
+    (s-right (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s z@$\leq$@n)))))))))))
+     (s-right (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s (s@$\leq$@s z@$\leq$@n))))))))) s-nil))
+; exit = case2 refl
+}
+\end{lstlisting}
+実行結果\ref{result14}について解説していく.
+
+1行目を見ると,recordと書かれており,record型で実行結果を受け取っていることがわかる.2行目からが実行結果の内容になっており,それぞれresult型の要素を見ることができる.
+
+2行目を見ると,指定したkeyである14の値を持つnodeを検索することに成功していることが確認できる.
+
+3行目から12行目では,keyが14であるnodeを見つけるまでに辿った木がstackに保存されていることが確認できる.これにより,非破壊的なRedBlackTreeの操作を行うことができる.
+
+13行目では,検索結果であるnodeのRBtreeInvariantを確認することができる.これにより,検索結果の木がRedBlackTreeであることを証明することができる.また,操作を行った後でも,RedBlackTreeであることを証明することができ,このInvariantから必要な要素を導出することも可能になる.
+
+14行目から18行目では,stackInvariantを確認することができる.これは,stackにどの様に木を積んだかを確認することができ,stackの木の順序性を証明することができる.この例だと,stackの始まりから,右,右,左の順番で辿ったという証明を持っていることになる.keyの大小を比較をs$\leq$sのような形で記述している.
+
+19行目を見ると,case2 reflとなっており,keyが一致したことでループが停止したことが確認できる.
+
+次に,今回の木に存在しない値である1を指定して実行してみる.
+\begin{lstlisting}[caption=Keyの値1のfindTest実行結果 , label=result1]
+record
+{ tree = leaf
+; stack =
+    leaf 
+    :: node 2 @$\llangle$@  Black , 200 @$\rrangle$@  leaf leaf
+    :: node 5 @$\llangle$@  Red , 500 @$\rrangle$@  (node 2 @$\llangle$@  Black , 200 @$\rrangle$@  leaf leaf)
+    (node 6 @$\llangle$@  Black , 600 @$\rrangle$@  leaf leaf)
+    :: node 8 @$\llangle$@  Black , 800 @$\rrangle$@ 
+    (node 5 @$\llangle$@  Red , 500 @$\rrangle$@  (node 2 @$\llangle$@  Black , 200 @$\rrangle$@  leaf leaf)
+     (node 6 @$\llangle$@  Black , 600 @$\rrangle$@  leaf leaf))
+    (node 10 @$\llangle$@  Red , 1000 @$\rrangle$@  leaf
+     (node 15 @$\llangle$@  Black , 1500 @$\rrangle$@  (node 14 @$\llangle$@  Red , 1400 @$\rrangle$@  leaf leaf) leaf))
+    :: []
+; ti = rb-leaf
+; si =
+    s-left (s@$\leq$@s (s@$\leq$@s z@$\leq$@n))
+    (s-left (s@$\leq$@s (s@$\leq$@s z@$\leq$@n)) (s-left (s@$\leq$@s (s@$\leq$@s z@$\leq$@n)) s-nil))
+; exit = case1 refl
+}
+\end{lstlisting}
+特に注目するべき点は,2行目と18行目である.2行目ではkeyの値1を持つnodeを見つけることができずに末端に到達したため,leafが結果として帰ってきていることが確認できる.また,18行目ではcase1 reflとなっており,末端のleafまで到達してしまったからループが停止したことが確認できる.
+
+これにより,findRBTは指定したkeyが存在している場合その木の情報を返し,keyが存在していない場合leafを返して停止することが確認できた.また,Invariantもこの情報の中に含まれており,返した木の正しさを証明しているが確認できる.これは,findRBTの実装内容を満たしており,GearsAgdaにおいてRedBlackTreeのfind操作を証明付き実装できたことを示している.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter6.aux	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,26 @@
+\relax 
+\@writefile{toc}{\contentsline {chapter}{\numberline {第6章}まとめと今後の展望}{26}\protected@file@percent }
+\@writefile{lof}{\addvspace {10\jsc@mpt }}
+\@writefile{lot}{\addvspace {10\jsc@mpt }}
+\@setckpt{./text/chapter6}{
+\setcounter{page}{27}
+\setcounter{equation}{0}
+\setcounter{enumi}{2}
+\setcounter{enumii}{0}
+\setcounter{enumiii}{0}
+\setcounter{enumiv}{0}
+\setcounter{footnote}{0}
+\setcounter{mpfootnote}{0}
+\setcounter{part}{0}
+\setcounter{chapter}{6}
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\setcounter{subsubsection}{0}
+\setcounter{paragraph}{0}
+\setcounter{subparagraph}{0}
+\setcounter{figure}{0}
+\setcounter{table}{0}
+\setcounter{parentequation}{0}
+\setcounter{lstnumber}{20}
+\setcounter{lstlisting}{0}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/chapter6.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,7 @@
+\chapter{まとめと今後の展望}
+
+本論文では,GearsAgdaを用いたプログラムを数学的に証明する方法とRedBlackTreeの正当性をInvariantを用いて証明する実装について述べた.GearsAgdaを用いて再帰処理を使用しない記述を実装することで,GearsOSに使用されているCbC言語に直接対応するような証明を書くことが可能になった.また,Invariantを定義し,それらを保有しながら処理を行うことにより,数学的な証明を用いてRedBlackTreeの信頼性を向上させることができた.このInvariantからは,さまざまな要素を導出できることから,今後の研究において応用的な処理を記述する際にも役立つと考える.
+
+今後の課題として,Insert,deleteのなどの操作を実装することが挙げられる.現段階で証明されている操作はfindしかなく,これでは実用的なRedBlackTreeとは言えない.Insertの実装は大きな枠組みは既に完成しており,証明部分を記述していく段階である.しかし,Insertなどの木構造を変化させる操作では,木がバランスする動作を記述する必要があり,子供から見た祖父や叔父の色を見ながら場合わけをする必要がある.これにより,場合わけの数が多く実装が難しくなっているのが現状である.Insertを実装することができれば,似たようなアルゴリズムでdeleteを実装できるため,まずはInsertを簡単に記述する方法を探しつつ,着実に実装を進めていく必要がある.
+
+今後の展望として,GearsAgdaのコードをCbCのコードに変換することが挙げられる.GearsAgdaはCbCに直接対応した記述方法であるため,理論上コンパイルすることが可能である.CbC言語はC言語とアセンブラの中間に位置しており,コーディングが困難であることから,GearsAgdaを用いてコーディングできることが望ましい.これが可能になることで,CbCでの記述がGearsAgdaベースで行えるようになり,信頼性のさらなる向上につながると考える.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/introduction.aux	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,28 @@
+\relax 
+\@writefile{toc}{\contentsline {chapter}{\numberline {第1章}プログラムの信頼性}{1}\protected@file@percent }
+\@writefile{lof}{\addvspace {10\jsc@mpt }}
+\@writefile{lot}{\addvspace {10\jsc@mpt }}
+\@writefile{toc}{\contentsline {section}{\numberline {1.1}背景と目的}{1}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {1.2}論文の構成}{2}\protected@file@percent }
+\@setckpt{./text/introduction}{
+\setcounter{page}{3}
+\setcounter{equation}{0}
+\setcounter{enumi}{0}
+\setcounter{enumii}{0}
+\setcounter{enumiii}{0}
+\setcounter{enumiv}{0}
+\setcounter{footnote}{0}
+\setcounter{mpfootnote}{0}
+\setcounter{part}{0}
+\setcounter{chapter}{1}
+\setcounter{section}{2}
+\setcounter{subsection}{0}
+\setcounter{subsubsection}{0}
+\setcounter{paragraph}{0}
+\setcounter{subparagraph}{0}
+\setcounter{figure}{0}
+\setcounter{table}{0}
+\setcounter{parentequation}{0}
+\setcounter{lstnumber}{1}
+\setcounter{lstlisting}{0}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/introduction.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,13 @@
+\chapter{プログラムの信頼性}
+
+\section{背景と目的}
+昨今ではプログラミング技術の波及により,世界中で様々なアプリケーションが作成され,使用されている.しかしながら,そのアプリケーションの安定性やデータの安全性などは十分であるとは言えない.十分な信頼性を持たないアプリケーションは,システム障害や個人情報の流出などの問題を引き起こす可能性がある.このことからもOSを含むアプリケーションは,高い信頼性を持つことが望ましい. 
+
+信頼性を高める手法として,テストやモデル検査などが考えられるが,数学的な証明を行うことでも信頼性を向上させることができる.テストやモデル検査が,特定の条件やケースを対象とするのに対し,数学的な証明は,プログラム全体の挙動や性質を対象とする.これにより,数学的な証明は,テストやモデル検査と比べ,より高い信頼性を示すことができる.
+
+本研究室では,CbC (Continuation based C)を採用したGearsOSを開発している.GearsOSでは,ファイルシステムやデータベースの設計において,二分探索木であるRedBlackTreeを採用することが予定されている.この,RedBlackTreeを数学的に証明することで,ファイルシステムやデータベースの信頼性が向上することが考えられる.
+
+本研究では,GearsOSに採用されるRedBlackTreeをGearsAgdaを用いて検証し,証明付き実装を行うことで,GearsOSの信頼性を高めることが目的である.
+
+\section{論文の構成}
+本論文は以下の章で構成される.第1章のプログラムの信頼性に続き,第2章の基礎概念では,本論文を読むにあたって必要な基礎概念や,Agdaの記述方法について述べる.第3章では,Invariantを用いてRedBlackTreeを証明する手法について述べる.第4章では,Invariantを用いたRedBlackTreeを実装し解説する.第5章では,find操作を実装,実行し,その結果を考察していく.最後に,第6章で本論文のまとめと今後の展望について述べる.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/reference.aux	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,29 @@
+\relax 
+\bibcite{HoareLogic}{1}
+\bibcite{sotoma}{2}
+\bibcite{agdawiki}{3}
+\bibcite{agdadocument}{4}
+\bibcite{ueti}{5}
+\@writefile{toc}{\contentsline {chapter}{参考文献}{28}\protected@file@percent }
+\@setckpt{./text/reference}{
+\setcounter{page}{29}
+\setcounter{equation}{0}
+\setcounter{enumi}{2}
+\setcounter{enumii}{0}
+\setcounter{enumiii}{0}
+\setcounter{enumiv}{5}
+\setcounter{footnote}{0}
+\setcounter{mpfootnote}{0}
+\setcounter{part}{0}
+\setcounter{chapter}{6}
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\setcounter{subsubsection}{0}
+\setcounter{paragraph}{0}
+\setcounter{subparagraph}{0}
+\setcounter{figure}{0}
+\setcounter{table}{0}
+\setcounter{parentequation}{0}
+\setcounter{lstnumber}{20}
+\setcounter{lstlisting}{0}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/text/reference.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,16 @@
+\begin{thebibliography}{99}
+\bibitem{HoareLogic} Hoare logic - 並列信頼研 mercurial repository, http://www.
+cr.ie.u-ryukyu.ac.jp/hg/Members/ryokka/HoareLogic/,
+Accessed: 2020/09/10
+
+
+\bibitem{sotoma} 外間政尊, “Continuation based c での hoare logic を用いた仕様記述と検証,” M.S. thesis, 琉球大学 大学院理工学研究科情報工学専攻, 2019.
+
+\bibitem{agdawiki}The agda wiki, http://wiki.portal.chalmers.se/agda/pmwiki.
+php, Accessed: 2023/09/10.
+
+\bibitem{agdadocument}Welcome to agda’ s documentation! — agda latest documentation, http : / / agda . readthedocs . io / en / latest/, Accessed:
+2023/09/10.
+
+\bibitem{ueti}上地悠斗, "GearsAgdaによるLeft Learning Red Black Tree の検証" 琉球大学工学部工学科知能情報コース2020
+\end{thebibliography}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/thesis.aux	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,8 @@
+\relax 
+\@input{./text/introduction.aux}
+\@input{./text/chapter2.aux}
+\@input{./text/chapter3.aux}
+\@input{./text/chapter4.aux}
+\@input{./text/chapter5.aux}
+\@input{./text/chapter6.aux}
+\@input{./text/reference.aux}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/thesis.lof	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,8 @@
+\addvspace {10\jsc@mpt }
+\addvspace {10\jsc@mpt }
+\contentsline {figure}{\numberline {2.1}{\ignorespaces BinarySearchTreeにおけるノード関係}}{4}% 
+\contentsline {figure}{\numberline {2.2}{\ignorespaces RedBlackTreeにおけるノードの制約}}{5}% 
+\addvspace {10\jsc@mpt }
+\addvspace {10\jsc@mpt }
+\addvspace {10\jsc@mpt }
+\addvspace {10\jsc@mpt }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/thesis.log	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,892 @@
+This is e-pTeX, Version 3.14159265-p3.8.2-190131-2.6 (utf8.euc) (TeX Live 2019) (preloaded format=platex 2020.4.14)  22 JAN 2024 10:17
+entering extended mode
+ restricted \write18 enabled.
+ file:line:error style messages enabled.
+ %&-line parsing enabled.
+**thesis.tex
+(./thesis.tex
+pLaTeX2e <2019-04-06> (based on LaTeX2e <2018-12-01>)
+(/usr/local/texlive/2019/texmf-dist/tex/platex/jsclasses/jsreport.cls
+Document Class: jsreport 2019/04/06 jsclasses (okumura, texjporg)
+\jsc@mpt=\dimen118
+\jsc@mmm=\dimen119
+\jsc@smallskipamount=\skip41
+LaTeX Info: Redefining \rmfamily on input line 467.
+LaTeX Info: Redefining \sffamily on input line 470.
+LaTeX Info: Redefining \ttfamily on input line 473.
+LaTeX Info: Redefining \textmc on input line 477.
+LaTeX Info: Redefining \textgt on input line 479.
+\symmincho=\mathgroup4
+LaTeX Font Info:    Overwriting symbol font `mincho' in version `bold'
+(Font)                  JY1/mc/m/n --> JY1/gt/m/n on input line 541.
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 9.60999pt on input line 732.
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 9.60999pt on input line 732.
+\fullwidth=\dimen120
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 7.68799pt on input line 871.
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 7.68799pt on input line 871.
+\c@part=\count83
+\c@chapter=\count84
+\c@section=\count85
+\c@subsection=\count86
+\c@subsubsection=\count87
+\c@paragraph=\count88
+\c@subparagraph=\count89
+\@abstractbox=\box43
+\c@figure=\count90
+\c@table=\count91
+\abovecaptionskip=\skip42
+\belowcaptionskip=\skip43
+\jsc@tocl@width=\dimen121
+\@lnumwidth=\dimen122
+\bibindent=\dimen123
+(/usr/local/texlive/2019/texmf-dist/tex/platex/jsclasses/jslogo.sty
+Package: jslogo 2017/02/24 okumura, texjporg
+LaTeX Info: Redefining \TeX on input line 94.
+LaTeX Info: Redefining \LaTeX on input line 147.
+LaTeX Info: Redefining \LaTeXe on input line 200.
+)
+\heisei=\count92
+)
+(./ie-thesis.sty
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR)
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks15
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR)
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
+File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
+)
+Package graphics Info: Driver file: dvips.def on input line 99.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-def/dvips.def
+File: dvips.def 2017/06/20 v3.1d Graphics/color driver for dvips
+))
+\Gin@req@height=\dimen124
+\Gin@req@width=\dimen125
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/color.sty
+Package: color 2016/07/10 v1.1e Standard LaTeX Color (DPC)
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-cfg/color.cfg
+File: color.cfg 2016/01/02 v1.6 sample color configuration
+)
+Package color Info: Driver file: dvipdfmx.def on input line 147.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-def/dvipdfmx.def
+File: dvipdfmx.def 2017/06/24 v5.0g Graphics/color driver for dvipdfmx
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/dvipsnam.def
+File: dvipsnam.def 2016/06/17 v3.0m Driver-dependent file (DPC,SPQR)
+))
+(/usr/local/texlive/2019/texmf-dist/tex/latex/setspace/setspace.sty
+Package: setspace 2011/12/19 v6.7a set line spacing
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip10
+Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc.
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2018/12/01 v2.17b AMS math features
+\@mathmargin=\skip44
+
+For additional information on amsmath, use the `?' option.
+(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01 AMS text
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0 generic functions
+\@emptytoks=\toks16
+\ex@=\dimen126
+))
+(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d Bold Symbols
+\pmbraise@=\dimen127
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 2016/03/08 v2.02 operator names
+)
+\inf@bad=\count93
+LaTeX Info: Redefining \frac on input line 223.
+\uproot@=\count94
+\leftroot@=\count95
+LaTeX Info: Redefining \overline on input line 385.
+\classnum@=\count96
+\DOTSCASE@=\count97
+LaTeX Info: Redefining \ldots on input line 482.
+LaTeX Info: Redefining \dots on input line 485.
+LaTeX Info: Redefining \cdots on input line 606.
+\Mathstrutbox@=\box44
+\strutbox@=\box45
+\big@size=\dimen128
+LaTeX Font Info:    Redeclaring font encoding OML on input line 729.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 730.
+\macc@depth=\count98
+\c@MaxMatrixCols=\count99
+\dotsspace@=\muskip11
+\c@parentequation=\count100
+\dspbrk@lvl=\count101
+\tag@help=\toks17
+\row@=\count102
+\column@=\count103
+\maxfields@=\count104
+\andhelp@=\toks18
+\eqnshift@=\dimen129
+\alignsep@=\dimen130
+\tagshift@=\dimen131
+\tagwidth@=\dimen132
+\totwidth@=\dimen133
+\lineht@=\dimen134
+\@envbody=\toks19
+\multlinegap=\skip45
+\multlinetaggap=\skip46
+\mathdisplay@stack=\toks20
+LaTeX Info: Redefining \[ on input line 2844.
+LaTeX Info: Redefining \] on input line 2845.
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
+Package: fancyhdr 2019/01/31 v3.10 Extensive control of page headers and footer
+s
+\f@nch@headwidth=\skip47
+\f@nch@O@elh=\skip48
+\f@nch@O@erh=\skip49
+\f@nch@O@olh=\skip50
+\f@nch@O@orh=\skip51
+\f@nch@O@elf=\skip52
+\f@nch@O@erf=\skip53
+\f@nch@O@olf=\skip54
+\f@nch@O@orf=\skip55
+))
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/txfonts.sty
+Package: txfonts 2008/01/22 v3.2.1
+LaTeX Font Info:    Redeclaring symbol font `operators' on input line 21.
+LaTeX Font Info:    Overwriting symbol font `operators' in version `normal'
+(Font)                  OT1/cmr/m/n --> OT1/txr/m/n on input line 21.
+LaTeX Font Info:    Overwriting symbol font `operators' in version `bold'
+(Font)                  OT1/cmr/bx/n --> OT1/txr/m/n on input line 21.
+LaTeX Font Info:    Overwriting symbol font `operators' in version `bold'
+(Font)                  OT1/txr/m/n --> OT1/txr/bx/n on input line 22.
+\symitalic=\mathgroup5
+LaTeX Font Info:    Overwriting symbol font `italic' in version `bold'
+(Font)                  OT1/txr/m/it --> OT1/txr/bx/it on input line 26.
+LaTeX Font Info:    Redeclaring math alphabet \mathbf on input line 29.
+LaTeX Font Info:    Overwriting math alphabet `\mathbf' in version `normal'
+(Font)                  OT1/cmr/bx/n --> OT1/txr/bx/n on input line 29.
+LaTeX Font Info:    Overwriting math alphabet `\mathbf' in version `bold'
+(Font)                  OT1/cmr/bx/n --> OT1/txr/bx/n on input line 29.
+LaTeX Font Info:    Redeclaring math alphabet \mathit on input line 30.
+LaTeX Font Info:    Overwriting math alphabet `\mathit' in version `normal'
+(Font)                  OT1/cmr/m/it --> OT1/txr/m/it on input line 30.
+LaTeX Font Info:    Overwriting math alphabet `\mathit' in version `bold'
+(Font)                  OT1/cmr/bx/it --> OT1/txr/m/it on input line 30.
+LaTeX Font Info:    Overwriting math alphabet `\mathit' in version `bold'
+(Font)                  OT1/txr/m/it --> OT1/txr/bx/it on input line 31.
+LaTeX Font Info:    Redeclaring math alphabet \mathsf on input line 40.
+LaTeX Font Info:    Overwriting math alphabet `\mathsf' in version `normal'
+(Font)                  OT1/cmss/m/n --> OT1/txss/m/n on input line 40.
+LaTeX Font Info:    Overwriting math alphabet `\mathsf' in version `bold'
+(Font)                  OT1/cmss/bx/n --> OT1/txss/m/n on input line 40.
+LaTeX Font Info:    Overwriting math alphabet `\mathsf' in version `bold'
+(Font)                  OT1/txss/m/n --> OT1/txss/b/n on input line 41.
+LaTeX Font Info:    Redeclaring math alphabet \mathtt on input line 50.
+LaTeX Font Info:    Overwriting math alphabet `\mathtt' in version `normal'
+(Font)                  OT1/cmtt/m/n --> OT1/txtt/m/n on input line 50.
+LaTeX Font Info:    Overwriting math alphabet `\mathtt' in version `bold'
+(Font)                  OT1/cmtt/m/n --> OT1/txtt/m/n on input line 50.
+LaTeX Font Info:    Overwriting math alphabet `\mathtt' in version `bold'
+(Font)                  OT1/txtt/m/n --> OT1/txtt/b/n on input line 51.
+LaTeX Font Info:    Redeclaring symbol font `letters' on input line 58.
+LaTeX Font Info:    Overwriting symbol font `letters' in version `normal'
+(Font)                  OML/cmm/m/it --> OML/txmi/m/it on input line 58.
+LaTeX Font Info:    Overwriting symbol font `letters' in version `bold'
+(Font)                  OML/cmm/b/it --> OML/txmi/m/it on input line 58.
+LaTeX Font Info:    Overwriting symbol font `letters' in version `bold'
+(Font)                  OML/txmi/m/it --> OML/txmi/bx/it on input line 59.
+\symlettersA=\mathgroup6
+LaTeX Font Info:    Overwriting symbol font `lettersA' in version `bold'
+(Font)                  U/txmia/m/it --> U/txmia/bx/it on input line 67.
+LaTeX Font Info:    Redeclaring symbol font `symbols' on input line 77.
+LaTeX Font Info:    Overwriting symbol font `symbols' in version `normal'
+(Font)                  OMS/cmsy/m/n --> OMS/txsy/m/n on input line 77.
+LaTeX Font Info:    Overwriting symbol font `symbols' in version `bold'
+(Font)                  OMS/cmsy/b/n --> OMS/txsy/m/n on input line 77.
+LaTeX Font Info:    Overwriting symbol font `symbols' in version `bold'
+(Font)                  OMS/txsy/m/n --> OMS/txsy/bx/n on input line 78.
+\symAMSa=\mathgroup7
+LaTeX Font Info:    Overwriting symbol font `AMSa' in version `bold'
+(Font)                  U/txsya/m/n --> U/txsya/bx/n on input line 94.
+\symAMSb=\mathgroup8
+LaTeX Font Info:    Overwriting symbol font `AMSb' in version `bold'
+(Font)                  U/txsyb/m/n --> U/txsyb/bx/n on input line 103.
+\symsymbolsC=\mathgroup9
+LaTeX Font Info:    Overwriting symbol font `symbolsC' in version `bold'
+(Font)                  U/txsyc/m/n --> U/txsyc/bx/n on input line 113.
+LaTeX Font Info:    Redeclaring symbol font `largesymbols' on input line 120.
+LaTeX Font Info:    Overwriting symbol font `largesymbols' in version `normal'
+(Font)                  OMX/cmex/m/n --> OMX/txex/m/n on input line 120.
+LaTeX Font Info:    Overwriting symbol font `largesymbols' in version `bold'
+(Font)                  OMX/cmex/m/n --> OMX/txex/m/n on input line 120.
+LaTeX Font Info:    Overwriting symbol font `largesymbols' in version `bold'
+(Font)                  OMX/txex/m/n --> OMX/txex/bx/n on input line 121.
+\symlargesymbolsA=\mathgroup10
+LaTeX Font Info:    Overwriting symbol font `largesymbolsA' in version `bold'
+(Font)                  U/txexa/m/n --> U/txexa/bx/n on input line 129.
+LaTeX Info: Redefining \not on input line 1043.
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/listings/listings.sty
+\lst@mode=\count105
+\lst@gtempboxa=\box46
+\lst@token=\toks21
+\lst@length=\count106
+\lst@currlwidth=\dimen135
+\lst@column=\count107
+\lst@pos=\count108
+\lst@lostspace=\dimen136
+\lst@width=\dimen137
+\lst@newlines=\count109
+\lst@lineno=\count110
+\lst@maxwidth=\dimen138
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/listings/lstmisc.sty
+File: lstmisc.sty 2019/02/27 1.8b (Carsten Heinz)
+\c@lstnumber=\count111
+\lst@skipnumbers=\count112
+\lst@framebox=\box47
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/listings/listings.cfg
+File: listings.cfg 2019/02/27 1.8b listings configuration
+))
+Package: listings 2019/02/27 1.8b (Carsten Heinz)
+
+(./jlisting.sty
+Package: jlisting 2006/02/20 0.2 (Thor)
+\lst@nextchar=\count113
+\lst@inputfile=\read1
+)
+(/usr/local/texlive/2019/texmf-dist/tex/latex/mnsymbol/MnSymbol.sty
+Package: MnSymbol 2007/01/21 v1.4 support for the MnSymbol font
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/base/textcomp.sty
+Package: textcomp 2018/08/11 v2.0j Standard LaTeX package
+Package textcomp Info: Sub-encoding information:
+(textcomp)               5 = only ISO-Adobe without \textcurrency
+(textcomp)               4 = 5 + \texteuro
+(textcomp)               3 = 4 + \textohm
+(textcomp)               2 = 3 + \textestimated + \textcurrency
+(textcomp)               1 = TS1 - \textcircled - \t
+(textcomp)               0 = TS1 (full)
+(textcomp)             Font families with sub-encoding setting implement
+(textcomp)             only a restricted character set as indicated.
+(textcomp)             Family '?' is the default used for unknown fonts.
+(textcomp)             See the documentation for details.
+Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/base/ts1enc.def
+File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
+Now handling font encoding TS1 ...
+... processing UTF-8 mapping file for font encoding TS1
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/base/ts1enc.dfu
+File: ts1enc.dfu 2018/10/05 v1.2f UTF-8 support for inputenc
+   defining Unicode char U+00A2 (decimal 162)
+   defining Unicode char U+00A3 (decimal 163)
+   defining Unicode char U+00A4 (decimal 164)
+   defining Unicode char U+00A5 (decimal 165)
+   defining Unicode char U+00A6 (decimal 166)
+   defining Unicode char U+00A7 (decimal 167)
+   defining Unicode char U+00A8 (decimal 168)
+   defining Unicode char U+00A9 (decimal 169)
+   defining Unicode char U+00AA (decimal 170)
+   defining Unicode char U+00AC (decimal 172)
+   defining Unicode char U+00AE (decimal 174)
+   defining Unicode char U+00AF (decimal 175)
+   defining Unicode char U+00B0 (decimal 176)
+   defining Unicode char U+00B1 (decimal 177)
+   defining Unicode char U+00B2 (decimal 178)
+   defining Unicode char U+00B3 (decimal 179)
+   defining Unicode char U+00B4 (decimal 180)
+   defining Unicode char U+00B5 (decimal 181)
+   defining Unicode char U+00B6 (decimal 182)
+   defining Unicode char U+00B7 (decimal 183)
+   defining Unicode char U+00B9 (decimal 185)
+   defining Unicode char U+00BA (decimal 186)
+   defining Unicode char U+00BC (decimal 188)
+   defining Unicode char U+00BD (decimal 189)
+   defining Unicode char U+00BE (decimal 190)
+   defining Unicode char U+00D7 (decimal 215)
+   defining Unicode char U+00F7 (decimal 247)
+   defining Unicode char U+0192 (decimal 402)
+   defining Unicode char U+02C7 (decimal 711)
+   defining Unicode char U+02D8 (decimal 728)
+   defining Unicode char U+02DD (decimal 733)
+   defining Unicode char U+0E3F (decimal 3647)
+   defining Unicode char U+2016 (decimal 8214)
+   defining Unicode char U+2020 (decimal 8224)
+   defining Unicode char U+2021 (decimal 8225)
+   defining Unicode char U+2022 (decimal 8226)
+   defining Unicode char U+2030 (decimal 8240)
+   defining Unicode char U+2031 (decimal 8241)
+   defining Unicode char U+203B (decimal 8251)
+   defining Unicode char U+203D (decimal 8253)
+   defining Unicode char U+2044 (decimal 8260)
+   defining Unicode char U+204E (decimal 8270)
+   defining Unicode char U+2052 (decimal 8274)
+   defining Unicode char U+20A1 (decimal 8353)
+   defining Unicode char U+20A4 (decimal 8356)
+   defining Unicode char U+20A6 (decimal 8358)
+   defining Unicode char U+20A9 (decimal 8361)
+   defining Unicode char U+20AB (decimal 8363)
+   defining Unicode char U+20AC (decimal 8364)
+   defining Unicode char U+20B1 (decimal 8369)
+   defining Unicode char U+2103 (decimal 8451)
+   defining Unicode char U+2116 (decimal 8470)
+   defining Unicode char U+2117 (decimal 8471)
+   defining Unicode char U+211E (decimal 8478)
+   defining Unicode char U+2120 (decimal 8480)
+   defining Unicode char U+2122 (decimal 8482)
+   defining Unicode char U+2126 (decimal 8486)
+   defining Unicode char U+2127 (decimal 8487)
+   defining Unicode char U+212E (decimal 8494)
+   defining Unicode char U+2190 (decimal 8592)
+   defining Unicode char U+2191 (decimal 8593)
+   defining Unicode char U+2192 (decimal 8594)
+   defining Unicode char U+2193 (decimal 8595)
+   defining Unicode char U+2329 (decimal 9001)
+   defining Unicode char U+232A (decimal 9002)
+   defining Unicode char U+2422 (decimal 9250)
+   defining Unicode char U+25E6 (decimal 9702)
+   defining Unicode char U+25EF (decimal 9711)
+   defining Unicode char U+266A (decimal 9834)
+   defining Unicode char U+FEFF (decimal 65279)
+))
+LaTeX Info: Redefining \oldstylenums on input line 334.
+Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349.
+Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350.
+Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351.
+Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352.
+Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353.
+Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354.
+Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355.
+Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356.
+Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357.
+Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358.
+Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359.
+Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360.
+Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361.
+Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362.
+Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363.
+Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364.
+Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365.
+Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366.
+Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367.
+Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368.
+Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369.
+Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370.
+Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371.
+Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372.
+
+Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373.
+Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374.
+Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375.
+Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376.
+Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377.
+Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378.
+Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379.
+Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380.
+Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381.
+Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382.
+Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383.
+Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384.
+Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385.
+Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386.
+Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387.
+Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388.
+Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389.
+Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390.
+Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391.
+Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392.
+Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393.
+Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394.
+Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395.
+Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396.
+Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397.
+Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398.
+Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399.
+Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400.
+Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401.
+Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402.
+Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403.
+Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404.
+Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405.
+Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406.
+Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407.
+Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408.
+Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409.
+)
+LaTeX Info: Redefining \dagger on input line 84.
+LaTeX Info: Redefining \ddagger on input line 84.
+LaTeX Info: Redefining \mathparagraph on input line 84.
+LaTeX Info: Redefining \mathsection on input line 84.
+LaTeX Info: Redefining \mathdollar on input line 84.
+LaTeX Info: Redefining \mathsterling on input line 84.
+LaTeX Info: Redefining \circledS on input line 84.
+LaTeX Info: Redefining \Re on input line 84.
+LaTeX Info: Redefining \Im on input line 84.
+LaTeX Info: Redefining \dotplus on input line 84.
+LaTeX Info: Redefining \thicksim on input line 84.
+LaTeX Info: Redefining \thickapprox on input line 84.
+LaTeX Info: Redefining \veebar on input line 84.
+LaTeX Info: Redefining \barwedge on input line 84.
+LaTeX Info: Redefining \doublebarwedge on input line 84.
+LaTeX Info: Redefining \centerdot on input line 84.
+LaTeX Info: Redefining \divideontimes on input line 84.
+\symMnSyA=\mathgroup11
+\symMnSyB=\mathgroup12
+\symMnSyC=\mathgroup13
+\symMnSyD=\mathgroup14
+LaTeX Font Info:    Redeclaring symbol font `largesymbols' on input line 119.
+LaTeX Font Info:    Overwriting symbol font `largesymbols' in version `normal'
+(Font)                  OMX/txex/m/n --> OMX/MnSymbolE/m/n on input line 119.
+LaTeX Font Info:    Overwriting symbol font `largesymbols' in version `bold'
+(Font)                  OMX/txex/bx/n --> OMX/MnSymbolE/m/n on input line 119.
+LaTeX Font Info:    Redeclaring symbol font `symbols' on input line 120.
+LaTeX Font Info:    Encoding `OMS' has changed to `U' for symbol font
+(Font)              `symbols' in the math version `normal' on input line 120.
+LaTeX Font Info:    Overwriting symbol font `symbols' in version `normal'
+(Font)                  OMS/txsy/m/n --> U/MnSymbolF/m/n on input line 120.
+LaTeX Font Info:    Encoding `OMS' has changed to `U' for symbol font
+(Font)              `symbols' in the math version `bold' on input line 120.
+LaTeX Font Info:    Overwriting symbol font `symbols' in version `bold'
+(Font)                  OMS/txsy/bx/n --> U/MnSymbolF/m/n on input line 120.
+LaTeX Font Info:    Overwriting symbol font `MnSyA' in version `bold'
+(Font)                  U/MnSymbolA/m/n --> U/MnSymbolA/b/n on input line 121.
+LaTeX Font Info:    Overwriting symbol font `MnSyB' in version `bold'
+(Font)                  U/MnSymbolB/m/n --> U/MnSymbolB/b/n on input line 122.
+LaTeX Font Info:    Overwriting symbol font `MnSyC' in version `bold'
+(Font)                  U/MnSymbolC/m/n --> U/MnSymbolC/b/n on input line 123.
+LaTeX Font Info:    Overwriting symbol font `MnSyD' in version `bold'
+(Font)                  U/MnSymbolD/m/n --> U/MnSymbolD/b/n on input line 124.
+LaTeX Font Info:    Overwriting symbol font `largesymbols' in version `bold'
+(Font)                  OMX/MnSymbolE/m/n --> OMX/MnSymbolE/b/n on input line 1
+25.
+LaTeX Font Info:    Overwriting symbol font `symbols' in version `bold'
+(Font)                  U/MnSymbolF/m/n --> U/MnSymbolF/b/n on input line 126.
+LaTeX Font Info:    Redeclaring math alphabet \mathcal on input line 241.
+LaTeX Font Info:    Overwriting math alphabet `\mathcal' in version `bold'
+(Font)                  OMS/MnSymbolS/m/n --> OMS/MnSymbolS/b/n on input line 2
+41.
+LaTeX Info: Redefining \longrightarrow on input line 548.
+LaTeX Info: Redefining \longleftarrow on input line 549.
+LaTeX Info: Redefining \longleftrightarrow on input line 550.
+LaTeX Info: Redefining \Longrightarrow on input line 551.
+LaTeX Info: Redefining \Longleftarrow on input line 552.
+LaTeX Info: Redefining \Longleftrightarrow on input line 553.
+LaTeX Info: Redefining \longmapsto on input line 554.
+LaTeX Info: Redefining \vdots on input line 868.
+LaTeX Info: Redefining \coloneq on input line 1445.
+LaTeX Font Info:    Redeclaring math symbol \braceld on input line 1721.
+LaTeX Font Info:    Redeclaring math symbol \bracelu on input line 1722.
+LaTeX Font Info:    Redeclaring math symbol \bracerd on input line 1723.
+LaTeX Font Info:    Redeclaring math symbol \braceru on input line 1724.
+LaTeX Info: Redefining \downbracefill on input line 1799.
+LaTeX Info: Redefining \upbracefill on input line 1800.
+LaTeX Info: Redefining \overbrace on input line 1819.
+LaTeX Info: Redefining \underbrace on input line 1820.
+LaTeX Info: Redefining \surd on input line 1843.
+LaTeX Font Info:    Redeclaring math accent \widehat on input line 1845.
+LaTeX Font Info:    Redeclaring math accent \widetilde on input line 1846.
+LaTeX Font Info:    Redeclaring math accent \vec on input line 1848.
+)
+\symMnLargeSymbols=\mathgroup15
+LaTeX Font Info:    Overwriting symbol font `MnLargeSymbols' in version `bold'
+(Font)                  OMX/MnSymbolE/m/n --> OMX/MnSymbolE/b/n on input line 2
+9.
+
+
+LaTeX Warning: Unused global option(s):
+    [title].
+
+(./thesis.aux (./text/introduction.aux) (./text/chapter2.aux)
+(./text/chapter3.aux) (./text/chapter4.aux) (./text/chapter5.aux)
+(./text/chapter6.aux) (./text/reference.aux))
+\openout1 = `thesis.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/txmi/m/it on input line 72.
+LaTeX Font Info:    Try loading font information for OML+txmi on input line 72.
+
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/omltxmi.fd
+File: omltxmi.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    ... okay on input line 72.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 72.
+LaTeX Font Info:    ... okay on input line 72.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 72.
+LaTeX Font Info:    ... okay on input line 72.
+LaTeX Font Info:    Checking defaults for OMS/txsy/m/n on input line 72.
+LaTeX Font Info:    Try loading font information for OMS+txsy on input line 72.
+
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/omstxsy.fd
+File: omstxsy.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    ... okay on input line 72.
+LaTeX Font Info:    Checking defaults for OMX/txex/m/n on input line 72.
+LaTeX Font Info:    Try loading font information for OMX+txex on input line 72.
+
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/omxtxex.fd
+File: omxtxex.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    ... okay on input line 72.
+LaTeX Font Info:    Checking defaults for U/txexa/m/n on input line 72.
+LaTeX Font Info:    Try loading font information for U+txexa on input line 72.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/utxexa.fd
+File: utxexa.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    ... okay on input line 72.
+LaTeX Font Info:    Checking defaults for JY1/mc/m/n on input line 72.
+LaTeX Font Info:    ... okay on input line 72.
+LaTeX Font Info:    Checking defaults for JT1/mc/m/n on input line 72.
+LaTeX Font Info:    ... okay on input line 72.
+LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 72.
+LaTeX Font Info:    Try loading font information for TS1+cmr on input line 72.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/base/ts1cmr.fd
+File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions
+)
+LaTeX Font Info:    ... okay on input line 72.
+
+(I search kanjifont definition file: . . ) (I search font definition file: . .
+. . . . . . )
+LaTeX Font Info:    Try loading font information for OT1+txr on input line 72.
+ (/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/ot1txr.fd
+File: ot1txr.fd 2000/12/15 v3.1
+)
+\c@lstlisting=\count114
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 6.72699pt on input line 73.
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 4.805pt on input line 73.
+LaTeX Font Info:    Try loading font information for U+txmia on input line 73.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/utxmia.fd
+File: utxmia.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    Try loading font information for U+txsya on input line 73.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/utxsya.fd
+File: utxsya.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    Try loading font information for U+txsyb on input line 73.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/utxsyb.fd
+File: utxsyb.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    Try loading font information for U+txsyc on input line 73.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/utxsyc.fd
+File: utxsyc.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <10> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 73.
+LaTeX Font Info:    Font shape `JT1/gt/m/n' will be
+(Font)              scaled to size 9.60999pt on input line 73.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <10> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 73.
+LaTeX Font Info:    Font shape `JY1/gt/m/n' will be
+(Font)              scaled to size 9.60999pt on input line 73.
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <14.4> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 73.
+LaTeX Font Info:    Font shape `JT1/gt/m/n' will be
+(Font)              scaled to size 13.83836pt on input line 73.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <14.4> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 73.
+LaTeX Font Info:    Font shape `JY1/gt/m/n' will be
+(Font)              scaled to size 13.83836pt on input line 73.
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <17.28> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 73.
+LaTeX Font Info:    Font shape `JT1/gt/m/n' will be
+(Font)              scaled to size 16.60605pt on input line 73.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <17.28> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 73.
+LaTeX Font Info:    Font shape `JY1/gt/m/n' will be
+(Font)              scaled to size 16.60605pt on input line 73.
+File: logo_u-ryukyu.jpg Graphic file (type bmp)
+<logo_u-ryukyu.jpg>
+ [1
+
+]
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 11.53198pt on input line 73.
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 11.53198pt on input line 73.
+
+(./text/Jabstract.tex) [2] (./text/Eabstract.tex)
+LaTeX Font Info:    Try loading font information for OT1+txss on input line 76.
+
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/ot1txss.fd
+File: ot1txss.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    Font shape `OT1/txss/m/n' will be
+(Font)              scaled to size 9.49997pt on input line 76.
+ [3]
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 23.90964pt on input line 76.
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 23.90964pt on input line 76.
+LaTeX Font Info:    Font shape `JT1/gt/m/n' will be
+(Font)              scaled to size 23.90964pt on input line 76.
+LaTeX Font Info:    Font shape `JY1/gt/m/n' will be
+(Font)              scaled to size 23.90964pt on input line 76.
+LaTeX Font Info:    Font shape `OT1/txss/m/n' will be
+(Font)              scaled to size 23.63593pt on input line 76.
+
+(./thesis.toc [4
+
+])
+\tf@toc=\write3
+\openout3 = `thesis.toc'.
+
+ [5] (./thesis.lof)
+\tf@lof=\write4
+\openout4 = `thesis.lof'.
+
+ [6
+
+] (./thesis.lot)
+\tf@lot=\write5
+\openout5 = `thesis.lot'.
+
+ [7
+
+] (./thesis.lol)
+\tf@lol=\write6
+\openout6 = `thesis.lol'.
+
+
+[0
+
+]
+\openout2 = `./text/introduction.aux'.
+
+ (./text/introduction.tex
+第1章
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 19.9311pt on input line 1.
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 19.9311pt on input line 1.
+LaTeX Font Info:    Font shape `JT1/gt/m/n' will be
+(Font)              scaled to size 19.9311pt on input line 1.
+LaTeX Font Info:    Font shape `JY1/gt/m/n' will be
+(Font)              scaled to size 19.9311pt on input line 1.
+LaTeX Font Info:    Font shape `OT1/txss/m/n' will be
+(Font)              scaled to size 19.70294pt on input line 1.
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 13.83836pt on input line 3.
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 13.83836pt on input line 3.
+LaTeX Font Info:    Font shape `OT1/txss/m/n' will be
+(Font)              scaled to size 13.67995pt on input line 3.
+) [1
+
+
+] [2]
+\openout2 = `./text/chapter2.aux'.
+
+ (./text/chapter2.tex
+第2章
+[3
+
+
+
+]
+File: ./figs/BinarySearchTree.png Graphic file (type bmp)
+<./figs/BinarySearchTree.png>
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 8.64899pt on input line 26.
+LaTeX Font Info:    Font shape `JY1/mc/m/n' will be
+(Font)              scaled to size 8.64899pt on input line 26.
+ [4]
+File: ./figs/RedBlackTree.png Graphic file (type bmp)
+<./figs/RedBlackTree.png>
+
+
+! LaTeX Error: File `../../Report.tex' not found.
+
+Type X to quit or <RETURN> to proceed,
+or enter new name. (Default extension: tex)
+
+Enter file name: 
+LaTeX Font Info:    Font shape `JT1/gt/m/n' will be
+(Font)              scaled to size 11.53198pt on input line 58.
+LaTeX Font Info:    Font shape `JY1/gt/m/n' will be
+(Font)              scaled to size 11.53198pt on input line 58.
+LaTeX Font Info:    Font shape `OT1/txss/m/n' will be
+(Font)              scaled to size 11.39996pt on input line 58.
+[5]
+LaTeX Font Info:    Try loading font information for OT1+txtt on input line 61.
+
+ (/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/ot1txtt.fd
+File: ot1txtt.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 6.72699pt on input line 62.
+LaTeX Font Info:    Font shape `JT1/gt/m/n' will be
+(Font)              scaled to size 8.64899pt on input line 62.
+LaTeX Font Info:    Font shape `JY1/gt/m/n' will be
+(Font)              scaled to size 8.64899pt on input line 62.
+ [6]
+LaTeX Font Info:    Font shape `JT1/mc/m/n' will be
+(Font)              scaled to size 4.805pt on input line 102.
+
+[7]
+
+LaTeX Warning: Command \textless invalid in math mode on input line 118.
+
+LaTeX Font Info:    Try loading font information for OML+txr on input line 118.
+
+(/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/omltxr.fd
+File: omltxr.fd 2000/12/15 v3.1
+)
+LaTeX Font Info:    Font shape `OML/txr/m/n' in size <10> not available
+(Font)              Font shape `OML/txmi/m/it' tried instead on input line 118.
+
+
+
+LaTeX Warning: Command \textless invalid in math mode on input line 118.
+
+
+LaTeX Warning: Command \textless invalid in math mode on input line 120.
+
+
+LaTeX Warning: Command \textless invalid in math mode on input line 120.
+
+
+LaTeX Warning: Command \textgreater invalid in math mode on input line 120.
+
+
+LaTeX Warning: Command \textgreater invalid in math mode on input line 120.
+
+
+LaTeX Warning: Command \textless invalid in math mode on input line 122.
+
+
+LaTeX Warning: Command \textless invalid in math mode on input line 122.
+
+
+LaTeX Warning: Command \textgreater invalid in math mode on input line 126.
+
+
+LaTeX Warning: Command \textgreater invalid in math mode on input line 126.
+
+[8] [9]) [10]
+\openout2 = `./text/chapter3.aux'.
+
+ (./text/chapter3.tex
+第3章
+) [11
+
+
+
+]
+\openout2 = `./text/chapter4.aux'.
+
+ (./text/chapter4.tex
+第4章
+[12
+
+
+
+] [13] [14]
+
+LaTeX Warning: Command \textless invalid in math mode on input line 98.
+
+
+LaTeX Warning: Command \textless invalid in math mode on input line 98.
+
+[15] [16]) [17]
+\openout2 = `./text/chapter5.aux'.
+
+ (./text/chapter5.tex
+第5章
+[18
+
+
+
+]
+
+LaTeX Warning: Command \textless invalid in math mode on input line 28.
+
+
+LaTeX Warning: Command \textless invalid in math mode on input line 28.
+
+[19
+
+] [20]
+Overfull \hbox (87.32846pt too wide) in paragraph at lines 89--102
+ [][][][] 
+ []
+
+[21]
+LaTeX Font Info:    Try loading font information for TS1+txtt on input line 117
+.
+ (/usr/local/texlive/2019/texmf-dist/tex/latex/txfonts/ts1txtt.fd
+File: ts1txtt.fd 2000/12/15 v3.1
+) [22
+
+]
+[23] [24]) [25]
+\openout2 = `./text/chapter6.aux'.
+
+ (./text/chapter6.tex
+第6章
+) [26
+
+
+
+] [27
+
+
+]
+\openout2 = `./text/reference.aux'.
+
+ (./text/reference.tex
+Underfull \hbox (badness 10000) in paragraph at lines 2--5
+[]\OT1/txr/m/n/10 Hoare logic - \JY1/mc/m/n/10 並列信頼研 \OT1/txr/m/n/10 mer-c
+u-rial repos-i-tory, http://www. cr.ie.u-
+ []
+
+) [28
+
+
+] (./thesis.aux (./text/introduction.aux) (./text/chapter2.aux)
+(./text/chapter3.aux) (./text/chapter4.aux) (./text/chapter5.aux)
+(./text/chapter6.aux) (./text/reference.aux))
+
+LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
+
+ ) 
+Here is how much of TeX's memory you used:
+ 6124 strings out of 493223
+ 79282 string characters out of 6144415
+ 236219 words of memory out of 5000000
+ 9946 multiletter control sequences out of 15000+600000
+ 35078 words of font info for 122 fonts, out of 8000000 for 9000
+ 934 hyphenation exceptions out of 8191
+ 36i,12n,45p,675b,1839s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+Output written on thesis.dvi (36 pages, 121092 bytes).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/thesis.lol	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,13 @@
+\contentsline {lstlisting}{\numberline {2.1}AgdaにおけるData型の実装}{6}% 
+\contentsline {lstlisting}{\numberline {2.2}Agdaにおける足し算の実装}{6}% 
+\contentsline {lstlisting}{\numberline {2.3}Agdにおける二項演算子の実装}{7}% 
+\contentsline {lstlisting}{\numberline {2.4}Agdaにおける場合分けの書き方}{7}% 
+\contentsline {lstlisting}{\numberline {2.5}GearsAgdaにおける足し算の実装}{9}% 
+\contentsline {lstlisting}{\numberline {4.1}BinarySearchTreeの基本的な実装}{12}% 
+\contentsline {lstlisting}{\numberline {4.2}RedBlackTreeの基本的な実装}{13}% 
+\contentsline {lstlisting}{\numberline {4.3}RBtreeInvariantの実装}{14}% 
+\contentsline {lstlisting}{\numberline {4.4}stackInvariantの実装}{16}% 
+\contentsline {lstlisting}{\numberline {5.1}findRBTの実装}{19}% 
+\contentsline {lstlisting}{\numberline {5.2}findTestの実装}{22}% 
+\contentsline {lstlisting}{\numberline {5.3}Keyの値14のfindTest実行結果}{23}% 
+\contentsline {lstlisting}{\numberline {5.4}Keyの値1のfindTest実行結果}{24}% 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/thesis.lot	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,8 @@
+\addvspace {10\jsc@mpt }
+\addvspace {10\jsc@mpt }
+\addvspace {10\jsc@mpt }
+\addvspace {10\jsc@mpt }
+\addvspace {10\jsc@mpt }
+\contentsline {table}{\numberline {5.1}{\ignorespaces findRBTに使用される関数}}{19}% 
+\contentsline {table}{\numberline {5.2}{\ignorespaces findTestに使用される関数}}{21}% 
+\addvspace {10\jsc@mpt }
Binary file Report/final/thesis.pdf has changed
Binary file Report/final/thesis.synctex.gz has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/thesis.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,116 @@
+\documentclass[title,12pt]{jsreport}
+\usepackage{ie-thesis}
+% 必要なパッケージはここに記載する
+\usepackage{txfonts} %設定部分
+\usepackage{listings, jlisting}
+\lstset{
+  basicstyle={\ttfamily},
+  identifierstyle={\small},
+  commentstyle={\smallitshape},
+  keywordstyle={\small\bfseries},
+  ndkeywordstyle={\small},
+  stringstyle={\small\ttfamily},
+  frame={tb},
+  breaklines=true,
+  columns=[l]{fullflexible},
+  numbers=left,
+  xrightmargin=0zw,
+  xleftmargin=3zw,
+  numberstyle={\scriptsize},
+  stepnumber=1,
+  numbersep=1zw,
+  lineskip=-0.5ex,
+  escapeinside={@@}
+}
+\usepackage{MnSymbol}
+\makeatletter
+\DeclareFontFamily{OMX}{MnSymbolE}{}
+\DeclareSymbolFont{MnLargeSymbols}{OMX}{MnSymbolE}{m}{n}
+\SetSymbolFont{MnLargeSymbols}{bold}{OMX}{MnSymbolE}{b}{n}
+\DeclareFontShape{OMX}{MnSymbolE}{m}{n}{
+    <-6>  MnSymbolE5
+   <6-7>  MnSymbolE6
+   <7-8>  MnSymbolE7
+   <8-9>  MnSymbolE8
+   <9-10> MnSymbolE9
+  <10-12> MnSymbolE10
+  <12->   MnSymbolE12
+}{}
+\DeclareFontShape{OMX}{MnSymbolE}{b}{n}{
+    <-6>  MnSymbolE-Bold5
+   <6-7>  MnSymbolE-Bold6
+   <7-8>  MnSymbolE-Bold7
+   <8-9>  MnSymbolE-Bold8
+   <9-10> MnSymbolE-Bold9
+  <10-12> MnSymbolE-Bold10
+  <12->   MnSymbolE-Bold12
+}{}
+
+\let\llangle\@undefined
+\let\rrangle\@undefined
+\DeclareMathDelimiter{\llangle}{\mathopen}%
+                     {MnLargeSymbols}{'164}{MnLargeSymbols}{'164}
+\DeclareMathDelimiter{\rrangle}{\mathclose}%
+                     {MnLargeSymbols}{'171}{MnLargeSymbols}{'171}
+\makeatother
+%設定部分----------
+
+
+\jtitle{GearsAgda による Red Black Tree の証明付き実装に関する研究 }
+\title{Implementation with proof of Red-Black-Tree using GearsAgda}
+
+\affiliation{琉球大学工学部工学科知能情報コース}
+\studentid{205718C}
+
+\author{森 逸汰}
+\supervisor{河野 真治}
+
+%\Jabstract{\include{./text/Jabstract}}
+\Jabstract{\input{./text/Jabstract.tex}}
+\Eabstract{\input{./text/Eabstract.tex}}
+   
+\begin{document}
+\maketitle %Don't remove.
+
+% 目次
+\tableofcontents	%Don't remove.
+
+% 図目次,図がある場合のみ
+\listoffigures
+
+% 表も軸,表がある場合のみ
+\listoftables
+
+%ソースコード
+\lstlistoflistings 
+% pagecounter settings
+\setcounter{page}{0}	%Don't remove.
+
+
+% main text
+% introduction
+\include{./text/introduction}
+
+% ... 
+\include{./text/chapter2}
+
+\include{./text/chapter3}
+
+\include{./text/chapter4}
+
+\include{./text/chapter5}
+
+\include{./text/chapter6}
+\chapter*{謝辞}
+本研究の遂行,本論文の作成にあたり,御多忙にも関わらず終始懇切丁寧なる御指導と御教授を賜わりました,河野真治准教授に心より感謝致します.そして,共に研究を行い暖かな気遣いと励ましをもって支えてくれた並列信頼研究室の全てのメンバーに感謝致します.最後に,有意義な時間を共に過ごした知能情報コースの学友,並びに物心両面で支えてくれた家族に深く感謝致します.
+\begin{flushright}
+2024年 2月 \\森 逸汰
+\end{flushright}
+% reference
+\include{./text/reference}
+
+%付録がある場合のみ
+%\appendix
+%付録項目ごとに章構成する.章番号は本文とは独立に構成される.
+
+\end{document}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/final/thesis.toc	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,28 @@
+\contentsline {chapter}{\numberline {第1章}プログラムの信頼性}{1}% 
+\contentsline {section}{\numberline {1.1}背景と目的}{1}% 
+\contentsline {section}{\numberline {1.2}論文の構成}{2}% 
+\contentsline {chapter}{\numberline {第2章}基礎概念}{3}% 
+\contentsline {section}{\numberline {2.1}CbC}{3}% 
+\contentsline {section}{\numberline {2.2}GearsOS}{3}% 
+\contentsline {section}{\numberline {2.3}BinarySearchTree}{4}% 
+\contentsline {section}{\numberline {2.4}RedBlackTree}{4}% 
+\contentsline {section}{\numberline {2.5}Agda}{5}% 
+\contentsline {subsection}{\numberline {2.5.1}Data型の実装}{6}% 
+\contentsline {subsection}{\numberline {2.5.2}関数の実装}{6}% 
+\contentsline {subsection}{\numberline {2.5.3}場合分けの書き方}{7}% 
+\contentsline {section}{\numberline {2.6}GearsAgda}{8}% 
+\contentsline {subsection}{\numberline {2.6.1}GearsAgdaの記述方法}{9}% 
+\contentsline {chapter}{\numberline {第3章}提案手法}{11}% 
+\contentsline {section}{\numberline {3.1}BinarySearchTreeを応用した,RedBlackTreeの実装}{11}% 
+\contentsline {section}{\numberline {3.2}Invariantを見つける}{11}% 
+\contentsline {chapter}{\numberline {第4章}RedBlackTreeとInvariantの実装}{12}% 
+\contentsline {section}{\numberline {4.1}RedBlackTreeの基本的な実装}{12}% 
+\contentsline {section}{\numberline {4.2}Invariantの実装}{14}% 
+\contentsline {subsection}{\numberline {4.2.1}RBtreeInvariantの実装}{14}% 
+\contentsline {subsection}{\numberline {4.2.2}stackInvariantの実装}{16}% 
+\contentsline {chapter}{\numberline {第5章}findRBTの実行}{18}% 
+\contentsline {section}{\numberline {5.1}findRBTの実装}{18}% 
+\contentsline {section}{\numberline {5.2}findRBTの実行方法}{21}% 
+\contentsline {section}{\numberline {5.3}実行結果}{23}% 
+\contentsline {chapter}{\numberline {第6章}まとめと今後の展望}{26}% 
+\contentsline {chapter}{参考文献}{28}% 
Binary file Report/first/ThesisReport.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/first/ThesisReport.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,167 @@
+\documentclass[11pt]{jsarticle}  
+\usepackage{comment}
+\title{卒業研究I,II 活動計画・報告書}
+\author{河野研究室 205718C 森 逸汰}
+\date{\today}							% Activate to display a given date or no date
+
+\begin{document}
+\maketitle
+
+
+\begin{itemize}
+  \item 1節「活動計画」は、卒業研究Iを開始した最初の月末までに提出すること。前期なら4月末、後期なら10月末です。
+  \item 2節「卒業研究Iの活動報告」〜4節「卒業研究IIの計画」は、前期なら7月末、後期なら1月末までに提出すること。
+  \item 5節「卒業研究IIの活動報告」は、後期なら1月末、前期なら7月末までに提出すること。
+\end{itemize}
+
+
+\section{活動計画}
+\subsection{研究活動の目的と目的達成のための取り組み}\label{plan:aim}
+%\subsubsection{4月末時点}
+OSを含むアプリケーションは、高い信頼性を持つことが望ましい。当研究室では、CbC(Continuation based C)を採用したGearsOSを開発しており、信頼性を高めることが現在の課題である。信頼性を高める手法として、テストやモデル検査などが考えられるが、数学的な証明を行うことでも信頼性を上げることができる。ここでは、GearsAgdaを用いた検証を行うことで、信頼性の向上を図る。GearsAgdaとは、CbCを定理証明支援系言語Agdaで記述する手法であり、GearsOSの検証において最適である。\\
+
+本研究は、GearsOSに採用する二分探索木RedBlackTreeをGearsAgdaで検証し実装することでOSの信頼性を向上させることが目的である。RedBlackTreeとは、バランスした二分探索木の一種であり、バランスを保つために木が回転することや、根から任意の葉ノードまでのパス上の黒ノードの数はすべて一致するなどの特徴がある。これらのRedBlackTreeの特徴をGearsAgdaを用いて検証し実装することで、RedBlackTreeとそれを使用するGearsOSの信頼性を高めることができる。
+\clearpage
+\subsection{研究スケジュール}\label{plan:schedule}
+\begin{table}[hbtp]
+\begin{center}
+\caption{卒業研究Iの研究スケジュール}
+\label{log}
+\begin{tabular}{ rcrr}\hline 
+想定所要日数 & 期間 & 活動内容 \\
+\hline \hline
+1週間 & 2023/04/12-2023/04/16 & 研究テーマの決定\\
+1週間 & 2023/04/17-2023/04/23 & 関連する論文の調査\\
+1週間 & 2023/04/24-2023/04/30 & 活動計画書の作成\\
+1か月 & 2023/05/01-2023/05/30  & Agdaの記述手法に関する学習\\
+1か月 & 2023/06/01-2023/06/31  & BinaryTreeの検証と実装 \\
+1か月 & 2023/07/1-2023/07/30  & RedBlackTreeの実装方法の検討 \\
+
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+\subsection{活動時間の記録}
+\begin{table}[hbtp]
+\begin{center}
+\caption{卒業研究Iに関わる活動時間}
+\label{log}
+\begin{tabular}{ rcrr}\hline 
+週番号 & 期間 & 研究時間(h/w) & 累積研究時間(h) \\
+\hline \hline
+1 & 2023/04/12-2023/04/16 & 10 & 10\\
+2 & 2023/04/17-2023/04/23 & 12 & 22\\
+3 & 2023/04/24-2023/04/30 & 6 &  28\\
+4 & 2023/05/01-2023/05/07 & & \\
+5 & 2023/05/08-2023/05/14 & & \\
+6 & 2023/05/15-2023/05/21 & & \\
+7 & 2023/05/29-2023/06/04 & & \\
+8 & 2023/06/05-2023/06/11 & & \\
+9 & 2023/06/12-2023/06/18 & & \\
+10 & 2023/06/19-2023/06/25 & & \\
+11 & 2023/06/26-2023/07/02 & & \\
+12 & 2023/06/28-2023/07/04 & & \\
+13 & 2023/07/03-2023/07/09 & & \\
+14 & 2023/07/10-2023/07/16 & & \\
+15 & 2023/07/17-2023/07/23 & & \\
+16 & 2023/07/24-2023/07/30 & & \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{comment}
+\section{卒業研究Iの活動報告}
+\subsection{活動目的の達成度について}
+\ref{plan:aim}で設定した活動目的と取り組みについての振り返りを記述しましょう。
+
+\subsection{活動の振り返り}
+\ref{plan:schedule}で設定したスケジュールと対応させながら、どのように活動を行ったかを振り返りましょう。また、卒業研究Iの活動をベースに、卒業研究IIにどのように研究活動に取り組むかを記述します。
+
+\subsection{活動時間の記録}
+表\ref{log}に示す通り、1週間単位の研究活動時間および、累積研究活動時間を記載してください。1週間単位の研究活動時間では継続的かつ計画的な取り組みがなされたかを評価します。累積研究時間では225時間以上の研究活動が行われ、評価要件を満たしているかを確認します。
+
+225時間は、1日3時間$\times $週5日$\times  $15週を想定しています。しかし、これに従って全ての期間に均等に活動しなければならないということではありません。就職活動や教育実習などの予定、祝祭日も考慮してスケジュールを立てて、そのスケジュールにしたがって研究を進めていくことを重視してください。
+
+\begin{table}[hbtp]
+\begin{center}
+\caption{卒業研究Iに関わる活動時間}
+\label{log}
+\begin{tabular}{ rcrr}\hline 
+週番号 & 期間 & 研究時間(h/w) & 累積研究時間(h) \\
+\hline \hline
+1 & 2023/04/12-2023/04/16 & 10 & 10\\
+2 & 2023/04/17-2023/04/23 & 15 & 25\\
+3 & 2023/04/24-2023/04/30 & 18 & 43\\
+4 & 2023/05/01-2023/05/07 & & \\
+5 & 2023/05/08-2023/05/14 & & \\
+6 & 2023/05/15-2023/05/21 & & \\
+7 & 2023/05/29-2023/06/04 & & \\
+8 & 2023/06/05-2023/06/11 & & \\
+9 & 2023/06/12-2023/06/18 & & \\
+10 & 2023/06/19-2023/06/25 & & \\
+11 & 2023/06/26-2023/07/02 & & \\
+12 & 2023/06/28-2023/07/04 & & \\
+13 & 2023/07/03-2023/07/09 & & \\
+14 & 2023/07/10-2023/07/16 & & \\
+15 & 2023/07/17-2023/07/23 & & \\
+16 & 2023/07/24-2023/07/30 & & \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+
+\section{研究テーマについて}
+\subsection{研究題目(卒業論文のタイトル案)}
+「ここに研究題目案を書いてください」
+
+\subsection{研究テーマの設定理由}
+ここには、卒論の背景と目的に相当する内容について、現段階で可能な範囲で記述します。知能情報工学分野の社会的課題や学術的課題を踏まえて内容を記述しましょう。
+
+\subsection{研究テーマに関する基礎概念や専門的技術の概要}
+卒論の基礎概念や関連研究に相当する項目です。次節の研究計画に関わる基礎概念や専門的技術の概要について記述しましょう。参考文献がある場合には、相互参照機能を使って参考文献を記述してください。必要に応じて小節に分けて、可読性の高い文書となるように工夫してください。
+
+\section{卒業研究IIの計画}
+\subsection{研究手法}
+卒論の提案手法や実験手法に相当する項目です。現段階で可能な範囲で具体的に記述しましょう。
+
+\subsection{研究結果の評価方法}
+提案手法や実験結果をどのように評価するかを記述します。現段階で予定される内容で構いません。可能であれば、どのような図表を作成するかを考え、さらに予測される結果のグラフイメージ(軸ラベル、単位あり)を作ってみると良いでしょう。
+\clearpage
+\subsection{具体的な研究スケジュール}
+卒業研究IIの研究活動のスケジュールについて、1$\sim $4週間単位くらいで計画を立てましょう。表や箇条書き書式を用いて、見やすくまとめてください。
+
+
+\section{卒業研究IIの活動報告}
+\begin{table}[hbtp]
+\begin{center}
+\caption{卒業研究IIに関わる活動時間}
+\label{log2}
+\begin{tabular}{ rcrr}\hline 
+週番号 & 期間 & 研究時間(h/w) & 累積研究時間(h) \\
+\hline \hline
+1 & 2023/10/02-2023/10/08 & 10 & 10\\
+2 & 2023/10/09-2023/10/15 & 15 & 25\\
+3 & 2023/10/16-2023/10/22 & 18 & 43\\
+4 & 2023/10/23-2023/10/29 & & \\
+5 & 2023/10/30-2023/11/05 & & \\
+6 & 2023/11/06-2023/11/12 & & \\
+7 & 2023/11/13-2023/11/19 & & \\
+8 & 2023/11/20-2023/11/26 & & \\
+9 & 2023/11/27-2023/12/03 & & \\
+10 & 2023/12/04-2023/12/10 & & \\
+11 & 2023/12/11-2023/12/17 & & \\
+12 & 2023/12/18-2023/12/24 & & \\
+13 & 2024/01/04-2024/01/07 & & \\
+14 & 2024/01/08-2024/01/14 & & \\
+15 & 2024/01/15-2024/01/21 & & \\
+16 & 2024/01/22-2024/01/28 & & \\
+17 & 2024/01/29-2024/02/04 & & \\
+18 & 2024/02/05-2024/02/11 & & \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+\end{comment}
+\end{document}  
\ No newline at end of file
Binary file Report/first/middle_work_plan.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/first/middle_work_plan.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,148 @@
+\documentclass[11pt]{jsarticle}  
+\usepackage{comment}
+\title{卒業研究I,II 活動計画・報告書}
+\author{河野研究室 205718C 森 逸汰}
+\date{\today}							% Activate to display a given date or no date
+
+\begin{document}
+\maketitle
+
+\section{活動計画}
+\subsection{研究活動の目的と目的達成のための取り組み}\label{plan:aim}
+研究活動を通しての目的として、「未知の事柄に臆せず挑戦し、自分の知識の幅を広げていくこと」を目的としたい。これは、本研究において使用するプログラミング言語がAgdaであるということが関係している。Agdaは証明支援系言語と呼ばれる証明向きの言語であり、一般に触れる機会が少ない言語である。このことからも、Agdaという未知の事柄に対して臆さず挑戦していくことで、将来プログラマーとして未知の技術に遭遇した際の底力を身につけることができると考える。これらを達成するために、英語力を鍛える必要があること、報連相を怠らず積極的に研究活動に勤しむこと、たくさんの時間を研究に注ぐことなどが必要があると考える。
+
+\subsection{研究スケジュール}\label{plan:schedule}
+\begin{table}[hbtp]
+\begin{center}
+\caption{卒業研究Iの研究スケジュール}
+\label{log}
+\begin{tabular}{ rcrr}\hline 
+想定所要日数 & 期間 & 活動内容 \\
+\hline \hline
+1週間 & 2023/04/12-2023/04/16 & 研究テーマの決定\\
+1週間 & 2023/04/17-2023/04/23 & 関連する論文の調査\\
+1週間 & 2023/04/24-2023/04/30 & 活動計画書の作成\\
+1か月 & 2023/05/01-2023/05/30  & Agdaの記述手法に関する学習\\
+1か月 & 2023/06/01-2023/06/31  & BinaryTreeの検証と実装 \\
+1か月 & 2023/07/1-2023/07/30  & RedBlackTreeの実装方法の検討 \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\section{卒業研究Iの活動報告}
+\subsection{活動目的の達成度について}
+活動目的の達成度については、40%ほどであると考える。5月半ばにあったOS研究会を目標に、未知の技術Agdaについての勉強を深めていき、大雑把な大枠の形を捉えることに成功した。しかしながら、未だ簡単な証明を記述することに留まっており、大きめの補題をAgdaを使用して自身が証明したい事柄に対して記述することはまだできておらず、実践を通して勉強していく必要があると考える。また、Agdaの勉強をするにあたって、インターネットなどの検索記事では日本語のものがほとんどないため、勉強に少し手間取ってしまった。このことからも、40%の目的達成度が妥当だと考えた。
+
+\subsection{活動の振り返り}
+研究スケジュールと対応させながら活動を振り返っていく。本研究室では、5月半ばに行われるOS研究会のことからも、早めに研究テーマを決定させる。これに関してはスケジュール通りに教授と相談し決めることができた。関連する論文の調査においては、1週間と定めていたが、実際やってみると継続して行うことの方が力になると考えたため、継続して行うことにした。
+Agdaの記述手法に関する学習に関しては、教授の公開している例題や、他のサイトの例題などを参考に勉強し、基本的な文法や環境構築などを行うことができた。BinaryTreeの検証と実装に関しては、先行研究や先輩の残したコードなどから勉強し、自分自身である程度実装することができた。しかしながら、0の状態から実装するほどの実力はついておらず、まだ勉強が必要だと実感した。RedBlackTreeの実装方法の検討に関しては、現在取り組んでいる最中であるが、設計に苦戦しており、教授と相談しながら進めていく予定である。
+\clearpage
+\subsection{活動時間の記録}
+\begin{table}[hbtp]
+\begin{center}
+\caption{卒業研究Iに関わる活動時間}
+\label{log}
+\begin{tabular}{ rcrr}\hline 
+週番号 & 期間 & 研究時間(h/w) & 累積研究時間(h) \\
+\hline \hline
+1 & 2023/04/12-2023/04/16 & 10 & 10\\
+2 & 2023/04/17-2023/04/23 & 15 & 25\\
+3 & 2023/04/24-2023/04/30 & 18 & 43\\
+4 & 2023/05/01-2023/05/07 & 30 & 73\\
+5 & 2023/05/08-2023/05/14 & 12 & 85 \\
+6 & 2023/05/15-2023/05/21 & 13 & 98 \\
+7 & 2023/05/29-2023/06/04 & 22 & 120 \\
+8 & 2023/06/05-2023/06/11 & 14 & 134 \\
+9 & 2023/06/12-2023/06/18 & 9 & 143 \\
+10 & 2023/06/19-2023/06/25 & 8 &  151\\
+11 & 2023/06/26-2023/07/02 & 15 & 166\\
+12 & 2023/06/28-2023/07/04 & 4 & 170 \\
+13 & 2023/07/03-2023/07/09 & 11 & 181 \\
+14 & 2023/07/10-2023/07/16 & 22 & 203 \\
+15 & 2023/07/17-2023/07/23 & 11 & 214 \\
+16 & 2023/07/24-2023/07/30 & 14 & 228 \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\section{研究テーマについて}
+\subsection{研究題目(卒業論文のタイトル案)}
+GearsAgda による Red Black Tree の検証
+
+
+\subsection{研究テーマの設定理由}
+当研究室では、現在GearsOSを開発しており、これに使用されるRed Black Treeの信頼性を高めることで、OS全体の信頼性の向上を図りたい。信頼性を高める手法としては、テストやモデル検査なども考えられるが、数学的な証明を用いても信頼性を向上させることができる。ここでは、GearsAgdaを用いたRedBlackTreeの証明を行うことで、OS全体の信頼性の向上を図る。
+
+\subsection{研究テーマに関する基礎概念や専門的技術の概要}
+本章では研究に関連する専門技術や基礎概念の概要について説明していく。
+\subsubsection{Agda}
+証明支援系言語と呼ばれるプログラミング言語の一種であり、数学的な証明を記述するのに適した言語である。本研究では、プログラムの正しさを証明することでOS全体の信頼性を向上をさせるために使用する。
+\subsubsection{CbC}
+Continuation based Cを略称したものであり、本研究室で開発しているGearsOSを構成する言語である。CbCはCの回言語であり、dataGear , code Gear , metaGearの3つから構成されている。ノーマルレベルとメタレベルの切り分けが容易などの利点がある。
+\subsubsection{GearsOS}
+本研究室で開発しているOSである。CbCで記述された軽量継続を基本とする構成になっている。現在開発が進んでいるものは、GearsAgda , GearsOS , x.v6の3つが存在する。CbCで記述されているため、ノーマルレベルとメタレベルの切り分けが容易に行えるなどの利点がある。
+\subsubsection{GearsAgda}
+GearsOSの一種であり、CbCの概念を取り入れたAgdaの記述方法である。これを用いることでCbCに直接対応した柔軟な証明を行うことができる。CbCの仕様を満たしているGearsAgdaで書かれた証明付きのコードは、CbCにコンパイルすることが可能である。そのため、GearsAgdaで証明することができれば、直接CbCで実装することができる。
+\subsubsection{BinaryTree}
+二分探索木であり、ファイルシステムなどで使われる木構造の一種である。ノード、リーフ、ルートの3つの要素で成り立っており、それぞれがkeyとvalueを持ち、keyの大小関係が$左key < 親key < 右key$と定められている。
+\subsubsection{RedBlackTree}
+GearsOSに採用される予定のあるバランスした二分探索木の一種である。BinaryTreeとkeyの関係性は同じであるが、それぞれのノードに赤と黒の色が設定される。RedBlackTreeには、バランスを保つために木が回転することや、根から任意の葉ノードまでのパス上の黒ノードの数はすべて一致するなどの特徴がある。これらのRedBlackTreeの特徴をGearsAgdaを用いて検証することで、RedBlackTreeとそれを使用するGearsOSの信頼性を高めることができる。
+\section{卒業研究IIの計画}
+\subsection{研究手法}
+研究手法としては、GearsAgdaを用いてRedBlackTreeの特性を証明していくことになる。AgdaはEmacsを用いコードを実行する。Agdaでの証明はメモリを多く使用する点や、コードチェックの処理に時間がかかることから、学科サーバー上でSingularityを用い、SIngularity上のコンテナ内で操作することでそれを軽減する。証明の定義部分を間違ってしまうと信頼性全体に影響を及ぼすことからも、教授と相談しながら証明を進めていこうと考えている。
+
+\subsection{研究結果の評価方法}
+研究結果の評価方法についてだが、証明が正しいと証明することが、現在の知識量ではどうするべきかがわからない。しかしながら、このような方法で評価をしていくことになるだろうという予測を立てることができる。Agdaで証明したRedBlackTreeをGearsOSに実装し、信頼性が向上したかを確認する必要がある。信頼性の向上を確かめる方法としては、モデル検査やテストなどが考えられる。また、Agdaでの証明が正しいことを確認することができれば、OSの信頼性が向上したと捉えることもできる。これらのことを踏まえ、教授と相談しこれから決めていくことができると考えている。
+\subsection{具体的な研究スケジュール}
+\begin{table}[hbtp]
+\begin{center}
+\caption{卒業研究I\hspace{-1.2pt}Iの研究スケジュール}
+\label{log}
+\begin{tabular}{ rcrr}\hline 
+想定所要日数 & 期間 & 活動内容 \\
+\hline \hline
+1か月 & 2023/10/01-2023/10/31 & RedBlackTreeの証明記述\\
+2週間 & 2023/11/00-2023/11/15  & 中間発表会\\
+1か月 & 2023/11/15-2023/12/31  & 証明したプログラムをGearsOSへ実装 \\
+1か月 & 2024/01/01-2024/01/31  & 卒業論文の執筆、提出\\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\begin{comment}
+
+\section{卒業研究IIの活動報告}
+\begin{table}[hbtp]
+\begin{center}
+\caption{卒業研究IIに関わる活動時間}
+\label{log2}
+\begin{tabular}{ rcrr}\hline 
+週番号 & 期間 & 研究時間(h/w) & 累積研究時間(h) \\
+\hline \hline
+1 & 2023/10/02-2023/10/08 & 10 & 10\\
+2 & 2023/10/09-2023/10/15 & 15 & 25\\
+3 & 2023/10/16-2023/10/22 & 18 & 43\\
+4 & 2023/10/23-2023/10/29 & & \\
+5 & 2023/10/30-2023/11/05 & & \\
+6 & 2023/11/06-2023/11/12 & & \\
+7 & 2023/11/13-2023/11/19 & & \\
+8 & 2023/11/20-2023/11/26 & & \\
+9 & 2023/11/27-2023/12/03 & & \\
+10 & 2023/12/04-2023/12/10 & & \\
+11 & 2023/12/11-2023/12/17 & & \\
+12 & 2023/12/18-2023/12/24 & & \\
+13 & 2024/01/04-2024/01/07 & & \\
+14 & 2024/01/08-2024/01/14 & & \\
+15 & 2024/01/15-2024/01/21 & & \\
+16 & 2024/01/22-2024/01/28 & & \\
+17 & 2024/01/29-2024/02/04 & & \\
+18 & 2024/02/05-2024/02/11 & & \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+\end{comment}
+\end{document}  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/midterm/jlisting.sty	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,216 @@
+\NeedsTeXFormat{LaTeX2e}
+\def\filedate{2006/02/20}
+\def\fileversion{0.2}
+\ProvidesPackage{jlisting}[\filedate\space\fileversion\space(Thor)]
+%
+\newcount\lst@nextchar
+\let\lst@@ProcessSpace\lst@ProcessSpace
+\def\lst@ProcessSpace#1{%
+   \lst@check@chartype{#1}%
+      \lst@@ProcessSpace
+      \lst@whitespacetrue}
+\let\lst@@ProcessLetter\lst@ProcessLetter
+\def\lst@ProcessLetter#1#2{%
+   \lst@check@chartype{#2}%
+      {\lst@@ProcessLetter{#1}}%
+      \relax}
+\let\lst@@ProcessDigit\lst@ProcessDigit
+\def\lst@ProcessDigit#1#2{%
+   \lst@check@chartype{#2}%
+      {\lst@@ProcessDigit{#1}}%
+      \relax}
+\let\lst@@ProcessOther\lst@ProcessOther
+\def\lst@ProcessOther#1#2{%
+   \lst@check@chartype{#2}%
+      {\lst@@ProcessOther{#1}}%
+      \relax}
+\let\lst@@ProcessTabulator\lst@ProcessTabulator
+\def\lst@ProcessTabulator#1{%
+   \lst@check@chartype{#1}%
+      \lst@@ProcessTabulator
+      \relax}
+\def\lst@check@chartype#1#2#3{%
+   \edef\@tempa{\lst@nextchar=`\string#1\relax}%
+   \afterassignment\remove@to@nnil
+   \@tempa\@nnil
+   #2%
+   \ifnum\lst@nextchar<\@cclvi
+      #3%
+   \else
+      \lst@ifletter \else \lst@OutputOther \fi
+      \lst@whitespacefalse
+      \expandafter\lst@AppendJchar
+   \fi
+   #1}
+\def\lst@AppendJchar#1#2{%
+   \lst@check@chartype{#2}%
+      {\advance\lst@length\@ne\lst@Append{#1}}%
+      \relax}
+\def\lst@check@chartype@BOL#1{%
+   \edef\@tempa{\lst@nextchar=`\string#1\relax}%
+   \afterassignment\remove@to@nnil
+   \@tempa\@nnil
+   \ifnum\lst@nextchar<\@cclvi\else
+      \lst@whitespacefalse
+      \expandafter\lst@AppendJchar
+   \fi
+   #1}
+\def\lst@InputListing#1{%
+   \begingroup
+      \lsthk@PreSet \gdef\lst@intname{#1}%
+      \expandafter\lstset\expandafter{\lst@set}%
+      \lsthk@DisplayStyle
+      \catcode\active=\active
+      \lst@Init\relax \let\lst@gobble\z@
+      \lst@SkipToFirst
+      \lst@ifprint \def\lst@next{\lst@get@filecontents{#1}}%
+      \else        \let\lst@next\@empty
+      \fi
+      \lst@next
+      \lst@DeInit
+   \endgroup}
+\newread\lst@inputfile
+\def\lst@get@filecontents#1{%
+   \let\lst@filecontents\@empty
+   \openin\lst@inputfile=#1\relax
+   \let\@lst@get@filecontents@prevline\relax
+   \lst@get@filecontents@loop
+   \closein\lst@inputfile
+   \lst@filecontents\empty}
+\def\lst@get@filecontents@loop{%
+   \read\lst@inputfile to\@lst@get@filecontents@currline
+   \ifx\@lst@get@filecontents@prevline\relax\else
+      \expandafter\expandafter\expandafter\def
+      \expandafter\expandafter\expandafter\lst@filecontents
+      \expandafter\expandafter\expandafter{%
+         \expandafter\lst@filecontents\@lst@get@filecontents@prevline}%
+   \fi
+   \let\@lst@get@filecontents@prevline\@lst@get@filecontents@currline
+   \ifeof\lst@inputfile\else
+      \expandafter\lst@get@filecontents@loop
+   \fi}
+%%% [$B$3$N=hM}$b!$AjEv6/0z$G$9!%(B]
+\def\lst@BOLGobble{%
+   \ifnum\lst@gobble>\z@
+      \@tempcnta\lst@gobble\relax
+      \expandafter\lst@BOLGobble@
+   \else
+      \expandafter\lst@check@chartype@BOL
+   \fi}
+\def\lst@BOLGobble@#1{%
+   \let\lst@next#1%
+   \ifx \lst@next\relax\else
+   \ifx \lst@next\lst@MProcessListing\else
+   \ifx \lst@next\lst@ProcessFormFeed\else
+   \ifx \lst@next\lstenv@backslash
+      \let\lst@next\lstenv@BOLGobble@@
+   \else
+      \let\lst@next\lst@BOLGobble@@
+      \ifx #1\lst@ProcessTabulator
+         \advance\@tempcnta-\lst@tabsize\relax
+         \ifnum\@tempcnta<\z@
+            \lst@length-\@tempcnta \lst@PreGotoTabStop
+         \fi
+      \else
+         \edef\@tempa{\lst@nextchar=`\string#1\relax}%
+         \@tempa
+         \ifnum\lst@nextchar<\@cclvi\else
+            \advance\@tempcnta\m@ne
+         \fi
+         \advance\@tempcnta\m@ne
+      \fi
+   \fi \fi \fi \fi
+   \lst@next}
+\def\lst@BOLGobble@@{%
+   \ifnum\@tempcnta>\z@
+      \expandafter\lst@BOLGobble@
+   \else
+      \expandafter\lst@check@chartype@BOL
+   \fi
+}
+%
+%    \begin{$B=$@5;v9`(B}{1.3}
+% $B$A$g$C$H$7$?=$@5(B
+\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1}
+% $B%=!<%9%3!<%IL\<!$K$*$1$kJ8;z$HHV9f$N6u$-(B
+\let \l@lstlisting = \l@figure
+% $B%-%c%W%7%g%s$H%=!<%9%3!<%IL\<!$KBP$9$kF|K\8lBP1~(B
+\def\lstlistingname{$B%=!<%9%3!<%I(B}
+\def\lstlistlistingname{$B%=!<%9%3!<%IL\<!(B}
+%    \end{$B=$@5;v9`(B}
+\endinput
+% 
+%#!platex
+\documentclass[papersize]{jsarticle}
+% Macros
+\IfFileExists{dvipdfmx.def}{%
+  \usepackage[dvipdfmx]{color,graphicx}%
+}{%
+  \usepackage[dvipdfm]{color,graphicx}%
+}
+\usepackage{listings}[2004/09/07]
+\usepackage{jlisting}[2006/02/20]
+\usepackage{url} 
+\usepackage{verbatim}
+
+\makeatletter
+% Original Macros
+\def\email#1{\gdef\@email{\texttt{#1}}}
+\def\homepage#1{\gdef\@homepage{\texttt{#1}}}
+\def\mac#1{\textsf{#1}}
+\def\URL#1{\texttt{#1}}
+\def\src#1{\texttt{#1}}
+
+% Dvipdfmx.def 
+\def\dvipdfmxDefi{http://tex.dante.jp/ok/dvipdfmx/}
+\def\dvipdfmxDefii{http://ftp.ktug.or.kr/KTUG/dvipdfmx/contrib/latex/}
+
+\IfFileExists{dvipdfmx.def}{%
+   \let \IfDvipdfmxDef = \empty \relax}{%
+   \typeout{^^Jget dvipdfmx.def at \dvipdfmxDefi^^J
+            or \dvipdfmxDefii^^J}%
+   \def\IfDvipdfmxDef{Get \src{dvipdfmx.def} at \URL \dvipdfmxDefii \\ 
+      or \URL \dvipdfmxDefi.}%
+}
+
+% Author Info
+\author   {Th\'or Watanabe\thanks \@email \space \thanks \@homepage}
+\title    {\mac{jlisting.sty}\\
+          ---Japanese Localized Patch File of \mac{listings}---}
+\email    {thor@tex.dante.jp}
+\homepage {http://tex.dante.jp/typo/}
+\date     {2006/02/20}
+
+\makeatother
+
+\begin{document}
+\maketitle
+%\IfDvipdfmxDef
+
+\section{$B$A$g$C$H$7$?@bL@(B}% Short Description
+ 
+$B1|B<@2I';a$N7G<(HD$N!VHFMQE*$JIbF0BN!W$H$$$&0lO"$N=q$-9~$_$+$i(B
+$BE>:\$7$^$7$?!#(B
+
+\begin{quote}
+ \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21172.html}\\
+ \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21184.html}\\
+ \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21189.html}\\
+ \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21197.html}
+\end{quote}
+
+ Copyright $B$O5H1JE/H~;a$K$"$k$N$@$H;W$$$^$9!%(B
+ 
+\section{$B99?7MzNr(B}% ChageLogs
+
+\begin{description}
+ \item[ver.~0.1 (2004/03/24)]
+   $B$H$j$"$($:8x3+!%(B
+ \item[ver.~0.2 (2006/02/20)] 
+   \verb|\lst@breakProcessOther| $BL?Na$NDj5A$NDI2C!%(B
+\end{description}
+
+\section{$B%=!<%9%3!<%I(B}
+\par\narrowbaselines
+\verbatiminput{jlisting.sty}
+\end{document}
Binary file Report/midterm/midterm-comments.pdf has changed
Binary file Report/midterm/midterm.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Report/midterm/midterm.tex	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,193 @@
+\documentclass[twocolumn,twoside,title, 9.5pt]{jsarticle}
+\usepackage{fancyhdr}
+\usepackage[dvips]{graphicx}
+\usepackage[dvipdfmx]{color}
+\usepackage{url}
+\usepackage{amsmath}
+\usepackage{here}
+\usepackage[utf8]{inputenc}
+\usepackage{amsmath,amssymb}
+\usepackage{MnSymbol}
+\makeatletter
+\DeclareFontFamily{OMX}{MnSymbolE}{}
+\DeclareSymbolFont{MnLargeSymbols}{OMX}{MnSymbolE}{m}{n}
+\SetSymbolFont{MnLargeSymbols}{bold}{OMX}{MnSymbolE}{b}{n}
+\DeclareFontShape{OMX}{MnSymbolE}{m}{n}{
+    <-6>  MnSymbolE5
+   <6-7>  MnSymbolE6
+   <7-8>  MnSymbolE7
+   <8-9>  MnSymbolE8
+   <9-10> MnSymbolE9
+  <10-12> MnSymbolE10
+  <12->   MnSymbolE12
+}{}
+\DeclareFontShape{OMX}{MnSymbolE}{b}{n}{
+    <-6>  MnSymbolE-Bold5
+   <6-7>  MnSymbolE-Bold6
+   <7-8>  MnSymbolE-Bold7
+   <8-9>  MnSymbolE-Bold8
+   <9-10> MnSymbolE-Bold9
+  <10-12> MnSymbolE-Bold10
+  <12->   MnSymbolE-Bold12
+}{}
+
+\let\llangle\@undefined
+\let\rrangle\@undefined
+\DeclareMathDelimiter{\llangle}{\mathopen}%
+                     {MnLargeSymbols}{'164}{MnLargeSymbols}{'164}
+\DeclareMathDelimiter{\rrangle}{\mathclose}%
+                     {MnLargeSymbols}{'171}{MnLargeSymbols}{'171}
+
+\makeatother
+
+
+% 必要なパッケージはここに記載する
+\usepackage{txfonts} %設定部分
+\usepackage{listings, jlisting}
+\renewcommand{\lstlistingname}{リスト}
+\lstset{language=c,
+basicstyle=\ttfamily\scriptsize,
+commentstyle=\textit,
+classoffset=1,
+keywordstyle=\bfseries,
+frame=tRBl,
+framesep=5pt,
+showstringspaces=false,
+numbers=left,
+stepnumber=1,
+numberstyle=\tiny,
+tabsize=2,
+breaklines = true,
+}
+
+
+% 研究タイトル名および著者情報はここに記述する
+% 学籍番号は「数字6桁+アルファベット1文字」です。
+% 「e1857..」は学籍番号ではありません。
+\title{GearsAgdaによる Red Black Tree の証明付き実装に関する研究}
+\author{205718C 森 逸汰(指導教員 : 河野真治)}
+\date{\today}
+
+% マージン設定等,ここは変更しないこと
+\lhead{琉球大学工学部工学科知能情報コース 中間報告書}
+\setlength{\topmargin}{-15mm}
+\setlength{\headheight}{10mm}
+\setlength{\headsep}{0mm}
+\setlength{\textwidth}{181mm}
+\setlength{\textheight}{256mm}
+\setlength{\oddsidemargin}{-9mm}
+\setlength{\evensidemargin}{-9mm}
+\setlength{\columnsep}{2.5zw}
+
+\pagestyle{plain}
+
+
+\begin{document}
+\begin{abstract}
+
+In GearsAgda, verification of Binary Trees was made
+possible by implementing Hoare Logic on Agda. We want
+to extend this to the verification of RedBlack Trees and
+concurrent execution on these trees. By expanding the Invariant, we can verify RedBlack Trees. Concurrent execution can be achieved by formalizing Model Checking
+on GearsAgda. Considerations need to be made for this.
+
+\end{abstract}
+\maketitle
+\thispagestyle{fancy}
+
+\section{目的と背景}
+OSを含むアプリケーションは、高い信頼性を持つことが望ましい。 当研究室では、CbC(Continuation based C)を採用した GearsOS を開発しており、より信頼性を向上させることが 望ましい。信頼性を高める手法として、テストやモデル検査などが考えられるが、数学的な証明を行うことでも信頼性を向上させることができる。本研究は、GearsOS に用いられる二分探索木 RedBlackTree を GearsAgda を用いて検証し、証明付き実装することでGearsOS の信頼性を向上させることが目的である。
+
+\section{基礎概念について}
+ここでは、本研究に用いられる以下の6つの基礎概念について説明していく。
+\begin{enumerate}
+\item Agda
+\item CbC
+\item GearsOS
+\item GearsAgda
+\item BinaryTree
+\item RedBlackTree
+\end{enumerate}
+
+Agdaとは定理証明支援器であり、関数型言語である。Agdaでは依存型という型システムを持ち、Curry-Howard同型対応により、命題と型付きラムダ計算が1対1で対応するため、Agdaで書かれたプログラムの証明を書くことができる。本研究では、RedBlackTreeの正しさを証明することでOS全体の信頼性を向上させるために使用する。\\
+
+CbCとは、Continuation based Cを略称したものであり、本研究室で開発しているGearsOSを構成する言語である。CbCはC言語から、ループ制御構造とサブルーチンコールを取り除き、継続を導入したC言語の下位言語である。また、dataGearをデータの単位、code Gearを処理の単位として記述する。ノーマルレベルとメタレベルの切り分けが容易などの利点がある。\\
+
+
+GearsOSとは、本研究室で開発しているOSである。CbCで記述された軽量継続を基本とする構成になっている。現在は、GearsAgda , GearsOS , x.v6の3つGearsOSの開発が進んでいる。CbCで記述されているため、ノーマルレベルとメタレベルの切り分けが容易に行えるなどの利点がある。\\
+
+
+GearsAgdaとは、GearsOSの一種であり、CbCの概念を取り入れたAgdaの記述方法である。これを用いることでCbCに直接対応した柔軟な証明を行うことができる。CbCの仕様を満たしているGearsAgdaで書かれた証明付きのコードは、CbCにコンパイルすることが可能である。そのため、GearsAgdaで証明することができれば、直接的にCbCで実装することが可能である。\\
+
+BinaryTreeとは、ファイルシステムなどで使われる木構造の一種である。ノード、リーフ、ルートの3つの要素で成り立っており、それぞれがkeyとvalueを持ち、keyの大小関係が$左の子key < 親key < 右の子key$と定められている。\\
+
+RedBlackTreeとは、GearsOSに採用される予定のあるバランスした二分探索木の一種である。BinaryTreeとkeyの関係性は同じであるが、それぞれのノードに赤と黒の色が設定される。RedBlackTreeには、バランスを保つために木が回転することや、根から任意の葉ノードまでのパス上の黒ノードの数はすべて一致するなどの特徴がある。これらのRedBlackTreeの特徴をGearsAgdaを用いて検証することで、RedBlackTreeとそれを使用するGearsOSの信頼性を高めることができる。
+
+\section{提案手法}
+Red Black Treeの正しさをGearsAgdaで証明するためには、RedBlackTreeのInvariant(ループや再帰で不変な条件/命題)を見つけることが有効であると考えられる。つまり、Invariantを保持したままinsertなどの操作をGearsAgdaで記述することで、様々な操作を実行した後でもRedBlackTreeが正しいことを証明することができる。
+\subsection{RBtreeInvariant}
+前述したとおり、本研究ではInvariantを中心に証明を進めていく。ここでは、二分木のデータ構造とRedBlackTreeにおけるInvariantの実装を説明していく。二分木はleafとnodeの2つの要素から表すことができ、nodeは左右に子を持つことができる。これに、赤と黒の概念を持たせることでRedBlackTreeとして実装することができる。また、2.0.6で解説した通りRedBlackTreeのInvariantには、赤ノード同士は親子にならないことや、根から任意のノードまでの黒の深さが同じことを含める必要がある。以下に実際のコード示す。
+\begin{lstlisting}[escapeinside=@@]
+data bt {n : Level} (A : Set n) : Set n where
+  leaf : bt A
+  node :  (key :  @$\mathbb{N}$@) → (value : A) → (left : bt A )
+			→ (right : bt A ) → bt A
+
+data RBtreeInvariant {n : Level} {A : Set n} : (tree : bt (Color ∧ A)) → Set n where
+    rb-leaf : RBtreeInvariant leaf
+    rb-single : (key : @$\mathbb{N}$@) → (value : A) →  RBtreeInvariant (node key@$\llangle$@Black , value @$\rrangle$@ leaf leaf)
+    rb-right-red : {key key@$_1$@ : @$\mathbb{N}$@} → {value value@$_1$@ : A} → {t t@$_1$@ : bt (Color ∧ A)} → key < key@$_1$@
+       → black-depth t ≡ black-depth t@$_1$@
+       → RBtreeInvariant (node key@$_1$@@$\llangle$@Black , value@$_1$@ @$\rrangle$@ t t@$_1$@)
+       → RBtreeInvariant (node key @$\llangle$@Red ,   value  @$\rrangle$@ leaf (node key@$_1$@@$\llangle$@Black , value@$_1$@ @$\rrangle$@ t t@$_1$@))
+    rb-right-black : ? 
+    rb-left-red : ?
+    rb-left-black : {key key@$_1$@ : @$\mathbb{N}$@} → {value value@$_1$@ : A} 
+    	 → {t t@$_1$@ : bt (Color ∧ A)} → key < key@$_1$@ → {c : Color}
+       → black-depth t ≡ black-depth t@$_1$@
+       → RBtreeInvariant (node key@$_1$@@$\llangle$@c     , value@$_1$@ @$\rrangle$@ t t@$_1$@)
+       → RBtreeInvariant (node key @$\llangle$@Black , value  @$\rrangle$@ (node key@$_1$@@$\llangle$@c , value@$_1$@ @$\rrangle$@ t t@$_1$@) leaf)
+    rb-node-red  : {key key@$_1$@ key@$_2$@ : @$\mathbb{N}$@} → {value value@$_1$@ value@$_2$@ : A} → {t@$_1$@ t@$_2$@ t@$_3$@ t@$_4$@ : bt (Color ∧ A)} 
+    	 → key < key@$_1$@ → key@$_1$@ < key@$_2$@
+       → black-depth t@$_1$@ ≡ black-depth t@$_2$@
+       → RBtreeInvariant (node key@$\llangle$@Black , value @$\rrangle$@ t@$_1$@ t@$_2$@)
+       → black-depth t@$_3$@ ≡ black-depth t@$_4$@
+       → RBtreeInvariant (node key@$_2$@@$\llangle$@Black , value@$_2$@ @$\rrangle$@ t@$_3$@ t@$_4$@)
+       → RBtreeInvariant (node key@$_1$@@$\llangle$@Red , value@$_1$@ @$\rrangle$@ (node key@$\llangle$@Black , value @$\rrangle$@ t@$_1$@ t@$_2$@) (node key@$_2$@@$\llangle$@Black , value@$_2$@ @$\rrangle$@ t@$_3$@ t@$_4$@))
+    rb-node-black  : ?
+\end{lstlisting}
+ソースコードを解説していく。1から4行目では、agdaを用いて二分木のデータ構造を記述している。二分木にはleafとnodeがあり、それぞれbt A という型を返す形で書かれている。leafはそのままbt A を返し、nodeはkey,value,left,rightの四つの引数を受け取り、bt Aを返すという形で書かれている。例えば、(node key value leaf right) のように書くことができ、このノードはkey とvalue を持ち、左の子にleaf、右の子にrightを持つbt Aの型であることがわかる。\\
+6行目からはRedBlackTreeのInvariantを記述している。ここでいうInvariantは順序付けされたRedBlackTreeの可能な値全部の集合であり、表示的意味論そのものになっている。ソースコードを見ると計8つの場合に分けることが確認できる。RBtreeInvariantという型はbt (Color $\land$ A) を引数に取るので、赤と黒の概念を含むInvariantを定義することができる。また、agdaでは「?」と記述することで、該当箇所の記述を省略することができる。今回は説明の都合上、?で省略しているが実際のコードではすでに記述がなされている。
+7行目ではrb-leafを定義しており、これはleafのInvariantを示している。RBtreeInvariantの引数にleafを渡すことで実装している。\\
+8行目ではrb-singleを定義しており、これは黒いノードの左右にleafがついている最小単位のようなノードを示している。RBtreeInvaritantの引数に (node key$\llangle$Black , value $\rrangle$ leaf leaf)を渡すことで実装している。ここで、valueを渡す際に色を指定することができることからも、赤と黒の概念を含むInvariantが定義できていることを確認することができる。\\
+9行目から12行目までは、rb-right-redを定義しており、これはノードの右側に子ノード、左側にはleafがあるようなノードのInvariantを示している。また、親ノードは赤と黒の2パターン存在するので、それぞれ別に定義する必要があり、9行目から12行目は赤の親ノード、13行目は黒の親ノードを定義している。子ノードはkeyの大小によって位置が決まることから、$key  \textless key_1$と記述し、親ノードと子ノードのkeyの大小を証明することで、木の順序を保っている。10行目では、親ノードからみた孫ノードの黒の深さが同じであることを示している。11行目では子ノードのRBtreeInvariantを持つことで、親子の色の関係を含めることができる。\\
+15行目から19行目では、rb-left-blackを定義しており、これはノードの右側にleaf、左側には子ノードがあるようなノードのInvariantを示している。これは、前述したrb-right-red,rb-right-blackの左右の子を入れ替えたものであり、本質的な構造は似ているため、説明を省略する。ただし、親ノードが黒のとき、子ノードは赤と黒の2パターンが存在し、どちらの色でも可能という意味で$\llangle$c     , value $\rrangle$と記述する。
+20行目から26行目では、rb-node-redを定義しており、これは左右それぞれに子ノードを持つようなノードのInvariantを示している。また、親ノードは赤と黒の2パターン存在するので、それぞれ別に定義する必要があり、20行目から26行目は赤の親ノード、27行目からは黒の親ノードを定義している。子ノードはkeyの大小によって位置が決まることから、$key \textless key_1 , key_1 \textless key_2$と記述し、親ノードと子ノードのkeyの大小を証明することで、木の順序を保っている。22,24行目では、親ノードからみた孫ノードの黒の深さが同じであることを示している。23,25行目では子ノードのRBtreeInvariantを持つことで、親子の色の関係を含めることができる。\\
+以上のように記述することで、RedBlackTreeのInvariantを定義している。
+
+\section{今後の計画}
+卒業論文の完成を100\%とすると、現在の進捗状況は40\%ほどであると考えている。その根拠としてInvariantを実装する見通しが立っていることが挙げられる。本研究ではInvariantを中心に進めていくことになるが、Invariantを使用する指針や、構造の見通しが立っていることが大きな進捗であるといえる。また、RedBlackTreeの操作部分の実装に関しても、大まかな見通しは立っており、それらを証明することができるかが今後の研究の肝になると考えている。\\
+
+今後の研究については、RBtreeInvariantを保持したままRedBlackTreeのInsertやdeleteなどの操作をGearsAgdaで実装する必要がある。しかし、これらの実装は、stackを用いる必要があることや、場合の数が多いなどの理由から煩雑な物になってしまう。また、実装したInvariantそのものが間違っている可能性もある。この場合コードの修正は自明ではない。このことからも、ミスの少ない実装が必要であり、教授と相談しながら進めていく必要がある。\\
+また、AgdaをCbCに変換する手順に関しても、現段階では未実装であるため、こちらの実装も進めていく必要がある。\\
+
+\begin{thebibliography}{99}
+\bibitem{HoareLogic} Hoare logic - 並列信頼研 mercurial repository, http://www.
+cr . ie . u - ryukyu . ac . jp / hg / Members / ryokka / HoareLogic/,
+Accessed: 2020/09/10
+
+
+\bibitem{sotoma} 外間政尊, “Continuation based c での hoare logic を用いた仕
+様記述と検証,” M.S. thesis, 琉球大学 大学院理工学研究科
+情報工学専攻, 2019.
+
+\bibitem{agdawiki}The agda wiki, http://wiki.portal.chalmers.se/agda/pmwiki.
+php, Accessed: 2023/09/10.
+
+\bibitem{agdadocument}Welcome to agda’ s documentation! — agda latest documentation, http : / / agda . readthedocs . io / en / latest/, Accessed:
+2023/09/10.
+
+\bibitem{ueti}上地悠斗, "GearsAgdaによるLeft Learning Red Black Tree の検証" 琉球大学工学部工学科知能情報コース2020
+\end{thebibliography}
+
+\end{document}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/info.toml	Mon Jan 22 10:27:20 2024 +0900
@@ -0,0 +1,43 @@
+#""の中に名前を書いてください
+author = "森 逸汰"
+
+#""の中に学籍番号を書いてください
+user_id = "205718C"
+
+#タイトル
+title = "GearsAgdaによる Red Black Tree の証明付き実装に関する研究"
+# GearsAgda で実装と証明を同時に行う
+# 実装はそのままCbCに変換されるのが望ましい。
+# Agdaはもともと、HaskellとJs を生成する機能を持っている。
+# これを修正して、CbCを直接生成したい。
+#
+# GearsAgdaだけではなくAgda自体もCbCに変換できると良い。
+# そうすると、Agdaの証明システム自体をCbCで記述できる。 
+# CbCはMetaレベルでメモリ管理や計算時間の管理ができる。さらに、並列処理も可能。
+# これにより、GearsAgdaの型チェック、つまり証明自体をCbCで行いたい。
+
+#前期・活動計画報告書のPDFのパス
+dissertation_work_plan = "Report/first/middle_work_plan.pdf" 
+
+# 後期研究計画書のPDFのパス
+research_plan = "Report/final/"
+
+# 中間報告書のPDFのパス
+midterm = "Report/midterm/midterm.pdf"
+
+#自分の研究室の行の先頭の「#」を消してください
+
+#supervisor = "ファイヤー和田研"
+#supervisor = "吉田研"
+#supervisor = "名嘉村研"
+#supervisor = "姜研"
+#supervisor = "宮里研"
+#supervisor = "山田研"
+#supervisor = "岡崎研"
+supervisor = "河野研"
+#supervisor = "當間研"
+#supervisor = "赤嶺研"
+#supervisor = "遠藤研"
+#supervisor = "長山研"
+#supervisor = "長田研"
+#supervisor = "國田研"