{"docstore/metadata": {"e06d7e7e-a58b-461c-9f03-8b7a580fc463": {"doc_hash": "076466310f14ae7b9c22d778965d073a71d9e1909d3696d05f6df695c5a7b423"}, "6422cd60-2321-4f9f-a31e-adf7b3c8e342": {"doc_hash": "29d504f7f8309daf72ffcd5f87ef33a1e6f886955dd138322b94f5f2ee58f03d"}, "ccea239e-3278-4217-bcc7-0073fb4c1414": {"doc_hash": "8abbba596e938fef5bd984877e46ec246122c0d869ad8048f0c15654d0dfab56"}, "792f02b9-7eb7-471d-aaa6-f6169baedd5d": {"doc_hash": "26e08ade6422621fff3c3db13a484a5ea286cfdc39a20c5c0be5ccf9c4d935d8"}, "2fc29119-41e0-4bbc-afb7-4ab7cf1e3246": {"doc_hash": "f94ec1b1e1cf5dd2756901dcd9f7b632339070ff14fd2815af55bec48f98794b"}, "09266a16-fa2a-4050-a53b-4a3b45e4ffe1": {"doc_hash": "2412a99583c3976d403c29fa19d98a43a38a36efaa492bf9c7e008f940d97859"}, "c9eacbf1-9acb-4280-baf9-e66191bd1537": {"doc_hash": "14fcc4c14939fcca748602c5a155ba0b3d7064cce1a2c0037bd5b507ed14bd69"}, "896d0f91-b641-4b85-92e0-2cbb50067abb": {"doc_hash": "e94016f79adfadc9323b79f142cd89cdc9641ac08ded3866ed5263807bbb8256"}, "7fe48277-beda-4d44-8b8f-97dd5e58eba5": {"doc_hash": "26c35128ef6962ea9c3e8434a574a7484f3af733767ff60a0a97cd2045aa860d"}, "53dbe867-ff8e-4766-bec3-82ceb839b2ae": {"doc_hash": "a66ed61138c2f87837e733ec2ee7948f33f55bde9b908fe138b93bf37668bccc"}, "fba38f01-4c6f-44a2-980c-196e7ca81b26": {"doc_hash": "0e932856d50b38c3c655c645f2f4a1f8be385712ba415496769640511623a352"}, "418558c8-88f2-45b7-9d76-49d3c67ea76d": {"doc_hash": "c0b3e7609600c2eb0d6059dd3efffdd6d2cd5cb06c898cc496ea7a00266df302"}, "c587750e-9ec3-48b3-b9f2-b450db98e029": {"doc_hash": "1723e9cfef4509a164f4e712065e0f66b250d167d208254f3a803989f887bbee"}, "e881be5a-63d4-4f1b-a997-10fac13decea": {"doc_hash": "db3b2b0c02eebcd2c59b33cd1851af8b853f071d91181e02be027faacd678f27"}, "d50c5b18-20d1-4d72-9666-c534ccfba462": {"doc_hash": "837c96d10ad30929fb231917a8a643dcb3df60e35eded73f1ada18fd36a7f617"}, "0cba35c9-da6c-48dd-b73c-684131dea98e": {"doc_hash": "7439491767f199acb00c7abf0a906477e71f492c8f91d3929da1081c0b79f1c9"}, "f77de622-da90-4b79-bc65-9e201d49e4c9": {"doc_hash": "f656fd24e84579dcc7ce09bf9845f1e930cea6d2ef932c3326cce837ed4798ab"}, "863d7868-1ee3-4f05-9c72-7f1d46d6b063": {"doc_hash": "2999436c4bcf44955e99217fddd17bf90195aee99a50a19363744fe3269636e2"}, "1ebe5d60-f409-4869-abad-ae26365cdfbf": {"doc_hash": "369dd1695cb6d11d3b94f7111ec7535d2696df75975a5b1898fc61f29c55a141"}, "ae3d3124-9227-44ba-8f9b-cecee8cc8e90": {"doc_hash": "50e76f2ddc7f14a111edc5a329ea189ded0d4e6b029556fa009622d6f6963cc6"}, "c9158297-daf8-44a4-9e31-13e2b745892f": {"doc_hash": "4559251253f675872405a6faef145a64e562960c298ef03b3a2902e6228014c5"}, "2e64b9d1-c1a2-41c4-9ceb-84f483cebdb0": {"doc_hash": "e4b45018a265af562ce0b8d84abf5743b069b74ba55dfd38ce57b6d35f7d0234"}, "e6b87de4-a158-4cd9-9322-300f432d0fe8": {"doc_hash": "3531e4f1260cbfea19ce42065e5f94d03a514088167a2eee7e793b12ca39a7c6"}, "ecfc2bb7-15c6-4952-a843-21830b4d4653": {"doc_hash": "43b2182fdbe6c85c1f64ac6b8f4677ea6e9a366130c6d3a37ef4e7bf7855734e"}, "abd01412-a2a5-4888-ab54-d9db0e07d473": {"doc_hash": "66f4f0fbf7374dbf1bd0cdc045af457b8e47a98039e3989f8d7c885ff1223fcc"}, "9c5efe40-56b8-488b-9dbc-d097c4258d68": {"doc_hash": "e7f5e586b548153eba3380e83129d8fbab61a096a6654030d553a9e84506e84e"}, "cc5aebbf-45ea-4b83-99f3-fff6be1134aa": {"doc_hash": "6409f47f95dd6b604320468f640b9bf20b7b4956b56fd6de0ca78c0e803c1e80"}, "e2e91905-2d15-4b55-99df-347d83fca3c3": {"doc_hash": "e03467bb3fa646c63b0b5f450ffc428b6d0eb452ea63988a2d99102501bf418e"}, "fd7e1852-c001-4a86-9e09-d4121cee3ee4": {"doc_hash": "c7ef1d384045c08c7197e27e469a00a06b45301b270ff62a6612b4038ba186df"}, "a94cf763-fe6d-4566-862a-410f8b003402": {"doc_hash": "4a71079cd9afda96eb8d9dba2a9298b781ca167944ea25ac0f21007b933ca4d8"}, "09b608c2-3577-4bab-bf3e-3a03bb544e46": {"doc_hash": "35798eca427bb6dc8670b5bad0bdc48fa78c28979ad86f0566d1f92a58788a8d"}, "5a6a7bc1-484f-4e11-a4a0-107029a66dab": {"doc_hash": "c7506400eaf108a0215fe1da67ff8dd455736132db472db07245db9944e325b1"}, "9ec3b70a-384a-4198-91a9-663c1bddfa62": {"doc_hash": "9ac4d6122f7adc64de012f5014ffbddec1d6c878ccbb181c9a388b4ac5797a6e"}, "8ae4db16-e834-4b63-aec6-9011df4709ee": {"doc_hash": "6f58884d687eefc9ac06ed1eb0bdbcf476c41b5900ce9b113b9f96c4b3c08aac"}, "663b1118-ae46-4bb4-b163-08946d6a6b1c": {"doc_hash": "eb55ec986a7c2bed3aa5d198ca4f1df87fe9466a6ca90e17bf900468c2bd15c2"}, "e7a0c189-4d0a-4efc-b233-349b6ab3c921": {"doc_hash": "961298b66681486f527a9c18c76ec72cb2b2f1d1f8b5ab9bb46c9749b74e5462"}, "e49e07c8-fa6d-43d7-bfe5-5ba466d699af": {"doc_hash": "7d8ea44f577c9f11374b45219d976f3c40e949b3cededae3e4e38be246f8c1a3"}, "6afb2918-29ff-45a0-a112-5c1e52ad55f8": {"doc_hash": "3aa1e5f5827a0616458cb5588bbae4476a1f060b0aaa7efb8c2033df8a657d17"}, "7e2cd070-64de-47c6-9c59-08abdadc6e09": {"doc_hash": "cc2015839963d9dfd66b3d41183dedc3c1e29491341e3e65925db646c6af6f75"}, "466e5638-cb89-40c1-aae6-8b70d4e32850": {"doc_hash": "1c7bb284ef4a077b5c95f83743c7bde02ae8b4fe6480a1de9486cf7e63ebdc08"}, "92e08c50-d71b-465b-b044-385d76199562": {"doc_hash": "234c1e08cd0ad19a810f1d9cced7efe385ad0f54b35b39c99f60c9be3fb68e99"}, "d9a6cdc6-aa63-4e03-bfac-55f337cc53bd": {"doc_hash": "d063b691f292623050766ccba7eda1c0b0e0a3648604e0a1c9aa08fdf571d28c"}, "02ceb922-196e-4b77-bd0c-ddc4fdff10f4": {"doc_hash": "a25a2bacfe76a32e4db0b5a6b56d194ad81bfd61d76c9cd21ef465c3d51a8243"}, "f1c8d298-ef17-431f-8f56-2836c26e0fe9": {"doc_hash": "e60c4bf352e94568c1a854b44dbde447b07d33c0563f3c4686e54adaddb99abb"}, "d5680555-aadb-4a8e-848f-561df3f363dd": {"doc_hash": "f0e1ffc5f1e0376ee800472f5b12d85fe6c4b98f6a0f0f9bca6947d45e5af392"}, "ec1bb5c9-11a4-4c14-a876-01b8e1173080": {"doc_hash": "14f3d5f87ee1a4999931b85ea0ee177702b38976f30061acac6b0c7ea0d92198"}, "14924ae2-a3e0-4214-aff8-6d7ca98b05ec": {"doc_hash": "ee471815c0b8a4dfb6cad914370d66117222541a1e5c97ff7bbd9d94214d2b50"}, "52baa816-2fe8-40e5-8a39-b5f4cf652398": {"doc_hash": "691ce43542a2c24e930b62724d8cecf26f9321b59e7737fabadfda145cdc9d6c"}, "18804887-8c4a-4b35-ab3b-a9dfd1dc5514": {"doc_hash": "6c7176dda93216a6415d57df0cbcbe0e6a1b997710052a084341b6a826e5a549"}, "b1386fb6-85ad-4fab-93b0-ed37d18f9451": {"doc_hash": "6fee2cf05a776496b13c8b3ed159c37a793a362471ab244e4e804791ca7a6206"}, "ce49c018-3db7-4d65-9830-422c565a4817": {"doc_hash": "ffeab17bfd67aec32881b660864fbbf87f92764877cd09bf4b7d33d858ddaead"}, "00161289-efef-4d60-b690-5ff8816fae25": {"doc_hash": "9732273dfeb3edccb4ee4e1ce2ebcd215314f87964c01e15bd187cf6a0b49c28"}, "88d5f645-9e47-4148-84c0-be27114c5d59": {"doc_hash": "bedfefed02abe8c17c4e423d6369f8d116539cc1ea0906eb74630138242c7e1e"}, "7c78a765-cdcf-45c9-b74d-4cf52f493248": {"doc_hash": "a84c0952d17a090760b49a34e99d0f15c2cf8bb1f5add7dc54754efcbda20352"}, "377e8077-b608-4dcb-a58e-d01210294205": {"doc_hash": "3a3a37c3719553f8f8064ef752ab0a10f64b21154f9dda0500fc6fb8edbf9779"}, "90127588-2851-43ad-bfdc-7b4ee5ff6f31": {"doc_hash": "3eb82c627805228cfed6a3eeb1f55597dc10c820f06d200c5b61a9bf4a7956fe"}, "f888be40-ef31-4678-ada5-3f4e9ba312d4": {"doc_hash": "17fcb4b87efa1671a1c8cc7153a273a85d73da3e7ceca1e6ee36473862810511"}, "4a480917-fbdc-4394-b2f9-c10c69209118": {"doc_hash": "8fad5cf96a7d0614fa4040b5ec724138f91662a269f1a0c612c0b433d9c7dd2d"}, "f4d4f92b-2a1d-4201-bfb2-eb009729cf89": {"doc_hash": "de4197e5df4d7c5c830b8e232c61892a55526ea8a3fd59fde6d15fb5b17cdc26"}, "425d87cc-2396-4503-8651-83b94db81b45": {"doc_hash": "40a6c1909cfcd6365c1af43901b8f1d1bff53665b97011a9627acbaadb0e8a59"}, "4c48cbe9-d0ee-4a2a-85e8-51433af36bc5": {"doc_hash": "d13e97d778df5117faaaca2e636bc929d41a779fafcdde2919784fba920756c4"}, "3a9f053a-b3ea-4cbb-8c2a-527a9290fff6": {"doc_hash": "355836ac4d48d59370e34485410bfdebbf328df1a348a340b2f2d5aaba0f288f"}, "162622bb-e6e3-4ea2-a206-05017df4dccf": {"doc_hash": "68a491638195f12d2e95d57f766cb2758635f061fe1191885850cd90f26d1b68"}, "7ea18c94-16a4-433b-b258-afafb3325928": {"doc_hash": "d45ab8e8b340625ae20c22b29cfe60aceb89e135cc7f44b7546a151a3d08ce8f"}, "28116bfc-9dbd-4646-b790-3515969c56fa": {"doc_hash": "c1101dae229600b849cbebab4fc66e514e5dabef247741d5fd540e4316a06fc4"}, "5b79bcd2-ef15-4a11-94f8-d60efa66e83f": {"doc_hash": "f1ee1573cbb6569fcd9958ba42a42f804c4c0cddad9e562e496f9322f08750ab"}, "3e0e87d6-522a-46c4-93a6-541a6d01ffae": {"doc_hash": "753390fb0be38f433bd8f93beb711095ded0dfae31e19470f413f299529eb6cb"}, "620974e6-9c9c-45be-b6c5-5db4d79733ef": {"doc_hash": "70028510582b21d844ae8213bc89cf26d3611d56dc0a8a03eb4ee9a1573a08b4"}, "77a9814c-c35e-452d-974b-e5515c763f50": {"doc_hash": "f7dc581419842caf724e7a694edefe6276c151c3e72d3c5dc5823e36838bd5a3"}, "4d1f5928-bda4-4c0b-984f-f109d0da0903": {"doc_hash": "c7cae95ccf74ede004df06b3bbea805dfe5934a77a6a59d566693d0ea49a0f36"}, "00794d28-190b-4000-a8db-e4576a615c22": {"doc_hash": "e96fd4b308ac10b43f1506c7c96d36732a73268be108308c31b2ccb69cdd6dce"}, "8217f657-4b06-4560-9387-9a9ea32eb7f6": {"doc_hash": "0fb4f06299c012231661ec1d5159ba7c35cd4496dccd80ffccea60d79ff52323"}, "1201afc4-3036-4df6-bf35-e670a682b8f1": {"doc_hash": "f22915a71411ecb40ad50e82ffee7b440ffb2e9e70f46adf5ceb14d55901e4f7"}, "d60d05cf-c748-4bb6-853f-888add44bd73": {"doc_hash": "5c0a7539395a10c7d7beb6fe0c98f08cbdd7d1c7d093a287e1afe1ab6dcb8f81"}, "53ec7105-a5c5-497c-9bdf-510a748c9911": {"doc_hash": "4d0f923147637515724486f6114dbe2314bd363c645c0d6495079bfeb95f1526"}, "b1fc1513-a205-4f29-9d32-a431aa6be6b7": {"doc_hash": "7729c1e027cd51f26ecb28a1b58fdf60920e3c9c80b008d6f0473de1edb38c4a"}, "fc9653a0-fb91-484c-8945-f46af6b63c09": {"doc_hash": "25c8060b926d3533aaef7265ceae1c4e936b60b53cef952cd1f59acffdfa1c3f"}, "b9053f8d-0a5a-4446-9739-ab5072c96ad0": {"doc_hash": "e0bfa06f27ab3504b87dabc5277edb908cf02bf87a2214ec1bad81c098055174"}, "56e57d9d-6b90-4e60-bc1b-cc1c605370c9": {"doc_hash": "c242b486713aaa5ccec6c194995df820535e4c4e604f40724abb31e2ede2cbc9"}, "53fbc237-cfad-41fa-a81e-e4391be04eda": {"doc_hash": "6599c114ea96aaa1f558ae56385a8921df3087a22d627d529a346657ae426694"}, "67846276-9d0f-4984-9f17-6c94abea1215": {"doc_hash": "ca11fa1ee9035bdec449d8ba2feac1627787a9406f7dbe6d1f42eba120e71d41"}, "7aa7e20e-6184-49b8-babd-79f086856f9a": {"doc_hash": "8dcf1557ae0d54431aff4bb0e6b3c276c50aaa4128a7f2edbde2c8017365c11f"}, "651ef24f-fe22-4ef5-acfa-f7bdb8341b3d": {"doc_hash": "b5e8886c72d4944447a58816edcaa179c9de3edf4f75ae9301b26e9554cd3080"}, "70a96e39-d6f9-4fa3-a802-95cd305f4ff1": {"doc_hash": "5dac4826e5bca226750489621d7749eddcb88ab096808b0634b9dc10ffc9da75"}, "f497ee38-6c98-4e34-b262-3c9489a5a5e4": {"doc_hash": "245ddc3a4a27ae395285996799a9b54464607b379796ed7303038f10f3a0b8d5"}, "7c49de1e-9f22-47ad-926e-cc265a113ecc": {"doc_hash": "e6249cb0c7ed3468f681784ff6c426c0574f06b83a35a81080607caf2befd608"}, "a23060d3-7fc0-44c1-935f-bf717ab30ed6": {"doc_hash": "a08f286b0773f5d109e3db630ffb427a60545f09f4a765e42020ed69e585d90c"}, "e72add08-a51c-4cc5-9399-9ce9efdd9b78": {"doc_hash": "a79dc509484f525c53fb8a4a2725b8fa13ed6ffedd4d7b7ecaa0f9bf513e68be"}, "a9ba1f44-d982-4669-9fca-ce7b7000beb3": {"doc_hash": "cf7fd3b198b69643d0b457211ebe406f0e6b01cbe678dfab6fada2513e6393c6"}, "aa136feb-6535-4523-88bd-e76550c00f9e": {"doc_hash": "962562e9802ab9642dd6c1ded1da128abcd2a8a7e81305d41d3f0604fb87310f"}, "75886ffe-9a16-4591-b4f7-5452f85b58df": {"doc_hash": "63bc6f8c1259341e5679b7e765db93f665b9a993c84bb9151428606f9754c7f0"}, "4f6d7880-bd44-4a73-ab9b-daeb57812aa1": {"doc_hash": "9d04fef5852b323ffcc70b2186cff1f6cebfd56e545ebd0044a1b5215cadb8ec"}, "21809133-b190-4792-8c9f-632c9340f90c": {"doc_hash": "d6cc70a455fa54ccc00f57b0aed20f419fc800d751397a0b057e10d2f4952faa"}, "ffd3a7d7-069c-4ecf-a4b8-dbe55bb64b01": {"doc_hash": "636503e106a205dd0b718407deb2b634fb98d1dfaacfd1ac9ec0c41867935479"}, "abfe0c50-9e30-4175-b51d-5f07b502f632": {"doc_hash": "d19dc9f2fda933982741926d84b257e6f443189762202b440af373a70c29d56f"}, "43fac8c0-4b29-4cef-a6ac-7d1f35fce8c8": {"doc_hash": "87240bd0566810f4dc2c5ef2580d3bd4f40773cfbeefbb28dd1c2f9bee741d97"}, "4fb978c0-d241-4981-aec2-ca2db0fcaeaf": {"doc_hash": "247267b6bf5f7f70f7621c4724b7608fa849193df89c0ca86c4d5354e5c183a5"}, "29578f41-64e3-48e5-9024-8a54483e265b": {"doc_hash": "04af448cb3c58cce22d9538e4ca661de610bd9c965677a7a8acdc29c82a9ad7d"}, "4c979f28-6faf-45d1-bd31-3366faa35b11": {"doc_hash": "909f794864631ad28069a12d92ff4a7be2c07a7e4f29c649f75b2393be6735fb"}, "e1cb3f9a-e7de-47fa-afb6-e01d58ccd4b9": {"doc_hash": "14dd6b4258b705a3d02ba854c31ee9b91ade4bc84c67a2de6e3e5e98f9410d02"}, "c5266d44-a3d6-42cf-82dd-0836f0f7105e": {"doc_hash": "a58ccc59ad7ed66edad3ce057ab0bdecd3344a4cde8557a8f0fa29a605d05022"}, "67766adf-526c-473f-b29d-bc8b38fa515a": {"doc_hash": "ba2d6a0d5113648c76a8aa3113168f8980791941f1bcc5868d6af154b44041f5"}, "1239ecc3-4088-499b-a4be-e881a437770f": {"doc_hash": "f89033abfd9abfc1f2d8d28469f954c85d24878e42677b46003cfdec2638c664"}, "d7cbe54f-6253-4253-a605-c578eceabd98": {"doc_hash": "00b110c9342217e686824bc2b679637ff557dffbe9d5496c098d71da66c24c00"}, "1915f845-6e52-49d1-97d2-b62d0c552310": {"doc_hash": "598f0794110564d8b0b40b1fabc7c9963dc58067443e93975913f4e4b9e0e64c"}, "aeb70f03-ef30-43cb-8d7b-034826b0320f": {"doc_hash": "039ba7aa5d20247c37f5788c5b84f0a8175a56b29cf81db48a24ac5acd1e1193"}, "33bff7e8-f3c8-46ae-aca6-500cc2e861c0": {"doc_hash": "44a77232a58a1c16eebe1329b975dca8eacbcda30afaec732dfe03d76e28b151"}, "33537690-b4d2-446c-b019-e412a21967ad": {"doc_hash": "840076912dcf93a2d873fc396b6fcc8f3ac4fb704948d493a9e77a111ddbcf87"}, "268a753e-cd35-48fb-87f4-2e85619cdbfe": {"doc_hash": "9b96cc32b444a7667e5e381b3ded8cafcc11b15ff2d02d275a073c559f0c43de"}, "be119211-3583-4fc9-aa84-6f25bbe0590b": {"doc_hash": "cf6491dd96e7dbd33f536c4bebe10d2a0d64f165683524fcf4fc823ecea87d69"}, "b47aa7d7-b12d-4c11-8bee-de58e5f3cf99": {"doc_hash": "546f4746c096a6a662aa9c906e3c008dabc920d03b0fd5ef7b9d0f96b95f2df5"}, "da03ca81-8f56-44a7-ad5a-4b3bc91da4ba": {"doc_hash": "12a47552f187dbb0504e90b3631288b4c9249be834bcd68d06a5f156e53fcc7d"}, "3416562b-b5c6-4c1f-a58c-645041792890": {"doc_hash": "6ec0bffd7c05d0c5c287795f4100a2dbcd04230f7ab4817e0bf6b565f28f3c74"}, "0e1c4cce-b403-4faa-a41d-13d9dee922d5": {"doc_hash": "45255ea7181f88747297783f83d06cbbdb5b48e8087a47a44ace4a618d34c8d2"}, "2ee7c1f1-08ad-466c-a7a8-5a529b8e6ee6": {"doc_hash": "eed3aca9e1d09dd4bff19ed7481b31b1b0d11690313d6a06447c32183f7d5e81"}, "49118fc0-c987-4507-addb-73640285d570": {"doc_hash": "8bb7fc808ff1f21a8a023e6134075c71b28551efea0cef8d12e2807a1ce87b65"}, "02d0ce3f-56e9-4966-bc7b-fd1d2589d295": {"doc_hash": "585cd94647e5923d3fbaef12cb48caadf263269d3ac2358205df462094b96906"}, "275bed04-9789-4330-92b4-64cc8e7d3a29": {"doc_hash": "002a8050657c749a47eb3af9d63813fc80020f2f6456a7a19548044c7a85408d"}, "b9b439b9-66bc-47ad-b55c-efeb8d18490c": {"doc_hash": "bf82ee5bd6b8e6e71b2595157fff32de71d9090a3beeaf4ed827ccde0afcc38c"}, "f0703d5c-6799-4917-90a1-103fad71995c": {"doc_hash": "5d10d6d53637d169226f18761040ba49fee382cd5c41fe103559b06ec60db00b"}, "fb90d954-52f2-440d-bf2a-3d472c8126b5": {"doc_hash": "07dd99af9f00630532e63bb72cfd3cb70e44640cdf7d0c22cb7d5ecd4afdfe3b"}, "42522ea5-c891-4f9c-b164-fd0c950ddac0": {"doc_hash": "f617e6a3c1b13a435eb229c3380f99507af4130c75b5f426b95ee85617b54997"}, "e27e0b80-9c95-4db7-a28f-d1bad7cf1e4a": {"doc_hash": "b7abd3ceea753cb1994f24ff45caca3c06168d7f999b79c29dbf0dd21cd5ed18"}, "02dedd44-c93f-451f-90c8-c93c4619bcee": {"doc_hash": "d85c393142d728202bbea539da4a9656156f3b2f76bc04c5fb1fb64d35a42a72"}, "2004be53-d697-4701-b9e9-4e860e877b1b": {"doc_hash": "e11ce36a8a44d06d4ec9be762ae424356c73e01da85432b8e3eb12465cf60544"}, "90e56275-c3e3-40a1-9482-8550ba5323f0": {"doc_hash": "028ae8a4cac2a20539e368c16c999a93469de3c197c435ded161512ddafdd3f0"}, "e1692368-fbc4-4cce-8e92-31446be6d163": {"doc_hash": "44ee3adc2702ebcd6bf40899cad9b7be852ed7b3da02dc8300cc62ba1f768c8e"}, "f5d499ab-869a-40d6-94ae-93acf0a76d5f": {"doc_hash": "4fd0b3635e772156121868d75985336c698c11c545a5e92355a2bc6a1e8028f6"}, "66271a71-762d-41d1-a48a-b64ecccc8575": {"doc_hash": "6a9fe84d5c7549189b80a2941dc5d6938863a4d60e203c95f1637bd32f90ec1b"}, "bb822432-da73-4cb8-aa49-791fdade5749": {"doc_hash": "5dd972e802556fab0775f26360267cc53a05b2c2222006c2fb084cb5cc5758aa"}, "f5741d7c-21a6-41f5-9738-575ca347de0c": {"doc_hash": "2ee956496f717e8e2b7440f1efb581fbc75d219f574d239ec543b9b13cd3a2c5"}, "c7de38fd-d9aa-4c33-88ec-a44be9ff7b9d": {"doc_hash": "e3aa022a4aa5ac4c39b3b978b39521cacde57835cbc7994f32e5fe17c5f613fe"}, "fcd0446e-c5a4-4381-9364-3d1156892065": {"doc_hash": "24ee041541c5c61d1338f30bfda13897bf542e2135f6c2e5230048e118f7e04e"}, "d859ca18-b279-4b2c-9da1-f2f307c69980": {"doc_hash": "1b3fd721fcf6c0f698a078f96547b34a19fbd316a1d496ef6503efbca16080d4"}, "68f97990-1b07-476b-b1aa-dcde472bf156": {"doc_hash": "b596d601e15e3b601806544930b2ba95534d1ce3feb3913d8d5422cfdd90a839"}, "8715f287-f413-404e-89b7-7d16ac6ff86f": {"doc_hash": "4e40f6490850e2b5b60844285f64c643e8b95f01b8f1c16908db4d0a5395671a"}, "ff6839ec-42bd-4037-96c8-bafd3557384e": {"doc_hash": "2d66c7e680afd3f57b4bdac9eecb29012951c3de66cb12fa128091d2d0ba5f58"}, "826ce114-e57e-492d-9d36-db999b785c38": {"doc_hash": "e7bedc25f36d8613bb4d46e56bc7a6f3f80e383a4cd461856b42eac7d49eaee2"}, "34562b9e-41b0-4c55-b91c-a8e68e78c5de": {"doc_hash": "cd33f2968b18302f6e7ea6ceb03a3272467d50c9b2d2d26dc92a4c665532cc1d"}, "652b823a-51d6-4dd5-8a32-a9439ec86d14": {"doc_hash": "deab65b02a737161b573f80796191716b8c6fc2440a19a9c8924675247377d72"}, "5c97d1bd-fb04-4323-85fc-1cb5de8a908e": {"doc_hash": "61c25cabda3f2b7e78f5d7b41016e68ae0b9c1571d42c8be6ecb2a456cceb8b9"}, "f2b5f1a1-6867-41fc-8227-8ec99b6cea22": {"doc_hash": "9cec7b62cb943fa693965166fde883dd465cd8262b77d5bb7a5f0062eab8a356"}, "177e0539-83a6-4ee6-b85b-8120da8f2bcd": {"doc_hash": "2cb6eb21a63d0fa9603ccc61ea36dc1bab62afdb394ab5e46cd511da6c566239"}, "5d4ffcbd-0aa5-4ecc-8f27-26f90df73d2d": {"doc_hash": "cc87d8939e06b517c72245cda9dfb4bc0b5d5fe84edf730eb8e258da2c99e449"}, "14b3ded6-2db4-4f6a-8be6-d6092bcfce2a": {"doc_hash": "308f0c3cc5807a9ef89af7b435a20ffd452f9a57773ed67bb1301f9ba6160c91"}, "d224812f-ed2c-48b6-8b0d-4b85b6056a6d": {"doc_hash": "e34e2bb2863000d0f683e839d62036aa2a0341344eb9e611f44cfa9a2b445176"}, "65ffad4d-a233-48b3-a13e-ecf477ded187": {"doc_hash": "79c778afc6dec75d40cb69ff02c10e6ec2880fb0cec8a0f82188b72845cad9ec"}, "19341d89-e6ff-4743-940c-b22f9a3293e5": {"doc_hash": "05eca7e35569e929614a597ee1043f34831b085b9967c8f8163076bdbce379e7"}, "e8c640c8-7e65-4cca-9734-1bd2a956f7e7": {"doc_hash": "9a79dd4b16340a7830099dee6d6693e5d23e8933cc4c571818b1f999086e1145"}, "e614d752-bcf5-49a5-9fc9-7883c532d2d9": {"doc_hash": "9d1b2e574a13148b300d9b5af6a0634b4ad1013c2f3a082a9be5bd953d52fbad"}, "dc2a682f-573e-40c2-9bcf-343269d2a6dc": {"doc_hash": "712994a3ad6a0a1242651c166d96d7a958db06a458b3a1051e9a8581c7275063"}, "94174a27-1550-49dd-bc2e-f888f9496523": {"doc_hash": "a66c311348c35c885fce6e003efc556cf8426c2557295551ec2dccaee18157a4"}, "6db89246-18d0-47d7-85af-16b2dc31cd15": {"doc_hash": "018c3f40cf83fb1495d598bc78c4762ac780bcd432696f93f25ac2c1b16ac807"}, "d84d45e6-be5a-42db-a647-b6cc84755468": {"doc_hash": "4504dc772b48f8ba8004994fc569a7db0d9ce65bdcf8e78106ab0d0f78df7029"}, "5eb418ed-3041-4ad6-8bd9-b8129cae2861": {"doc_hash": "8ac0ed3169f2b35bcfd29d6407bcf27fbb098d03ccfa64a763d175c5cb8acc33"}, "d01b286d-3cce-46f2-a9ae-f0708d27e75d": {"doc_hash": "5c9e4c3ca41cdedeeb5b579f3c885461b3cd6d43f70619a1addb5659d27e7c2d"}, "bf16fd0c-21c0-41d5-93fe-5b78e601078a": {"doc_hash": "f8e27d73f9c3be1898f7ce222b5126cbd11a6adda96c8ccae9e29ca4d7200892"}, "a37f829a-0fd3-494b-b314-c279ba3c2d65": {"doc_hash": "bfa34e30b870043f94ee68c68ce55dc01cadc558afd1277d3813c5370414437c"}, "b9d7d631-e605-4c87-91b3-8f92585b11f5": {"doc_hash": "7ee17a241574c5ad349236dc30377d528f726a06f5d8719e0063df6b90f6c59d"}, "1d8e5a67-9ec0-4f33-afd8-5a97a8e192c9": {"doc_hash": "55a88f98a58c5822106a49c22a77681431af887dfebda5f99960129ab3d05abe"}, "bb591a49-da5c-4f82-9898-0d2a0d9ae501": {"doc_hash": "25fc0ecc774db5e1a2ae575bd1c7a561daeb415d840f9ddcadd2a0c832469889"}, "d4f282e5-53b9-4e70-9933-c9dbe963e10b": {"doc_hash": "147e4a46d341a0409745f570cc6708d6fac0af9888eea485fe2c1d9507603d58"}, "d25d7bf1-7339-488a-8b46-bb0749a5166f": {"doc_hash": "7f1bf49f5e9db23a4a225afd10023cedd2d7bb821b22c43cc8124e5ecbbafb8d"}, "58e2f8d2-0842-4902-8e5a-b73208e12a9e": {"doc_hash": "28d95d76f2c2e5fcf95c781fccc28c45035f839875b7f8df939b74e6c0fd7ea6"}, "8ac57253-6f5f-4cfa-a9ec-2ea74903388e": {"doc_hash": "b6a154d84fa90f26325e672f3890d2ad369fa392fb558f0a81fa63a0a5d0cb51"}, "57a131dd-3f13-475a-9428-926232d89fb6": {"doc_hash": "99319ce6d5c51a91fb8dc5dc14dbbbc393de9fd6079df5ce99c2c2f8420ea282"}, "dd01422e-34d1-47ca-a0f3-c80b3ff6d0fe": {"doc_hash": "952f05a63a7a385cd47f6b74946d58383d7f84639d6a5fd75123d0564fe0269d"}, "6a6baab4-2547-4cbe-b1fe-465c0d949762": {"doc_hash": "704e3c0df134e822d4504fc391fe090806f74bbf27fdab01a840e3ee6759213b"}, "2bae00d6-f4c5-4561-84c3-5307560822fd": {"doc_hash": "cf272c733dc4fc341e6958e4819c6a43514ba3d3d7a9b4f2ea99c2fe6675cf5c"}, "0ab8f1e7-1fb0-4774-9f93-2894a8287369": {"doc_hash": "83686128cec12613b31f9e96b5028e0393b0e94413a93a45f5332287cb40c601"}, "f839c0d4-a929-4b35-93db-418d7729f6bf": {"doc_hash": "90c5a1eb9a1444f475e3c68369ec2fcefc59b77b0618fdfa179bfbce32ddcd76"}, "010435cb-5b2e-4b28-b5e8-54c284e1a5e3": {"doc_hash": "00a478db4aae89eb67ce9b00b5c1448252f7c8468d0dad945b1806fedabbe84d"}, "80490ea4-ef44-4b7a-bf3f-5dbb4800cd23": {"doc_hash": "889c8027d810280755b1018bad4429cd465dcc7d2b711b1ac255f88e7bfbbb68"}, "e6f6b118-d604-46b6-bb81-dd86f1c4adb2": {"doc_hash": "5d60459967b6dff2301904b9289d0d521a3bf79ff165b68decc552dad476ac3e"}, "3a11fae2-a59c-4767-9fa0-186aee0f6b3f": {"doc_hash": "ca14130c6d08fc47158e52d3ebe762fd60c5c2eba3d56a5163f14281c5e0c24d"}, "8606e7a6-1ab0-405e-8b62-e0fc6586d593": {"doc_hash": "d1f8808ce30a794f979d5059ae550be6584adb26996d0710d59375e1098de0dd"}, "76196a68-7981-4c7d-945c-a04499e66762": {"doc_hash": "e1ba2a40783fff2f56293eec8cf477c0e7d04c6c05a6cb3dc6d670f829f565d4"}, "d02f9b46-091b-4c7b-aae2-fd39ccae1af6": {"doc_hash": "8436cfa258c631b9a7d331688cf145d1495c76f6707889470556fe1fc28e6e40"}, "2f203be7-76b2-46a3-8f4e-3444a0b499a2": {"doc_hash": "3d047dddcbe3e7773c1f0dbdb1491ee8517970a686251469d6143c4eac15a5ac"}, "daed4d87-e851-41f4-98a6-f0653081d48b": {"doc_hash": "340021a9c4a0823bc705c20567ab851865ae0012ce8aec5b08ec8e564abe65f1"}, "665a0a77-502b-4c27-9467-9d5874b27483": {"doc_hash": "1bdfdc123ed6cb88910fba6de621d1fb063c799910df5819531e3e8b6d4f42ce"}, "ecc51507-0ff9-4e49-a19f-5af643f641ac": {"doc_hash": "d2678ff6150e18b2081db607a73c348a520d3c8bc36d428b96d73b3b6bc2427d"}, "636b8d85-8dcc-48f6-acbe-d300c630e506": {"doc_hash": "6f5dcfb32b38e4d86a81328d305d7098116e9e22817510ecbdee3987c41c8a1e"}, "ab0fbfe6-9386-4a48-90e1-730abead36de": {"doc_hash": "f234fd7e61fe9586682fbf9103b2dd4b2fbfd916450f74dfdf8c1d4123a4e40c"}, "33c4be35-9853-4469-8d78-c9ab83e01723": {"doc_hash": "275d9d6838b6cb6157d692621f1db778d2d06be248a1f5de6a5ebea52ada1c61"}, "78bdb8dd-4de2-43a5-b2a3-d860c7695619": {"doc_hash": "dae6a8aaaff4cf118b3c09d7d573fa6800289666a8c09d3af65b8c638133fccb"}, "f744805b-9538-4ab1-a894-c961027efb75": {"doc_hash": "4ca7f21cbe2ab0e6486ba4b78a02020cceb6972f1b4a42bc4771a6bbf3ed4125"}, "ce9169a6-62a6-4cec-94d0-508cac215a6b": {"doc_hash": "0c82830c01be222809c244532be3d97e8e27deb8a7eb74a538aeb3fb22796d7b"}, "78548f55-5957-4fe2-83aa-ec57754083a8": {"doc_hash": "eae1f3db76d3557fe0f1c37af333886a452a1c27c202b87fbac479a5c54bbf74"}, "5771ff67-72bf-4251-930b-833d1764632b": {"doc_hash": "af3766270ba9d6782044f9d549033cd83df10da5ee508b040f972a50ea6239b4"}, "bca8fedc-c8f0-422d-a4b8-65ae810bce59": {"doc_hash": "706e22cff5681d668e891de7c5b3bf0e6b04fdfea450234bf2a262fe57d51105"}, "f4bd7278-bc46-4029-a1f9-914ffd8a4b2f": {"doc_hash": "2b9f69b335d093595821d03b009e66ea1fe4faeee130e6387c050615d4de0810"}, "02c96afc-6870-4d9f-90f4-a3ae2e6820cc": {"doc_hash": "f83d4c206b443dbad8c36cbccb45a7366e5a74a1642e204bd7e5fc99333d9a5d"}, "a373aa68-e184-4dab-85df-867937dcdb98": {"doc_hash": "a5079defc305a95f8ac53c829e4d275a1cd95b0ba9d235dd3de9f46945c82a6f"}, "319afecd-f575-4d19-8c70-94ef80042c83": {"doc_hash": "61d358b3637f64739fd9afe18a1b9010fdbf16687b78079e4b86ff809bf9c767"}, "1b085ac9-c481-4f39-bb59-45942753f3d1": {"doc_hash": "5562aacd976f9c5e096d77e75f9b0a1f02bfb9c863cd0ce8d980585937b2726c"}, "3f412286-2258-4001-a60d-c422d6a67fcd": {"doc_hash": "4e6bd2cab7ac5480d43c223d473e1fc34f9b287c0ce1d5bf66a85623f504608f"}, "f7d6531d-80dc-46c7-8574-0931175abba8": {"doc_hash": "98b1014fd7fe02e3ac946172f07c80c4d5a773141723b7ff4b543588419406c3"}, "233401e6-f50b-47ac-a580-ec26f54046c1": {"doc_hash": "9cb8627cc647e6f7296d058707110ebd4da9a7b0edf910ca8cfb9ba25604920d"}, "b72b3a82-e2da-481a-869c-45dab9c4acf2": {"doc_hash": "3e65c09ad89893ad8171be3f856ae42ec07532821634198dd2f0dae39efecd74"}, "c289301e-a55b-477f-808c-d2e7a332b617": {"doc_hash": "627b3c8285481741d6d5b9fec548c5bc2d70a94870c1f08bcc22b1346dcfd779"}, "fe91f5e5-47d9-4946-8247-4381d7af140f": {"doc_hash": "5621f96148468ae63e31bc3adc877fc737e77d8d85c29160c6530e20b956ec76"}, "1bd6ad7c-57a5-47e3-848c-5eff3697a2dd": {"doc_hash": "504fb184c82b70686720fd200caa9376e470f16e3029047f0f096198f9c3946b"}, "ab69c291-5e76-470c-ae69-41db01d955a9": {"doc_hash": "6616116c75a10dd6005bb14762bb2c904d32e034929352cc186b198e21b76f19"}, "6de3ff5c-dedd-43b3-8993-8f911cad9136": {"doc_hash": "005057c8082876fa818f418177a92c18abf4cc7841bca544368e6f0dcc3ffc95"}, "36fece7e-765a-40e7-afc6-a0c271429538": {"doc_hash": "0ffcd61ae46b27d7514d1bd44f5efdcef6b377105f22dbc0c05b176772a8c120"}, "51620b85-d294-4618-bc89-3360b5d96844": {"doc_hash": "bba52d77acda465db7b4a8854ca9f853fb6813e0850a99a953e71ded7eb2ebdb"}, "bfed46f7-e04f-4383-b56c-5bbc6b261074": {"doc_hash": "ecaf5051904f07313096c31ea85efd9903593393cf50d902738915754b67d2b2"}, "0cd0464b-2426-4762-a58f-49c3a35215e1": {"doc_hash": "8524b17e2ba019f9d2c884a2a0c16742dc0f2d92eb6893b8280e469f71b98890"}, "931792e3-1793-4ba4-9d25-a5928d5be837": {"doc_hash": "f071fd23b664df9d7106601f1959407903987691da075ec381e75a6e73083707"}, "a4bd9921-3209-4389-a9a9-965f4f880848": {"doc_hash": "1d0b2af7ad295a1f49f1523edfcb23f6b5f0647e5e52696d9ee7b13fe6e1e3b8"}, "9af38552-175d-47f3-a805-7633c6cf22d8": {"doc_hash": "354c89752189dc502ca640cec2b074643940e050ff742568ddbdf620ac0272e5"}, "e74a7022-c0cd-4f44-9372-e7f14ab9b4ef": {"doc_hash": "e84cba168abc2c4eb676bda8b0be9bf24962500c4d3e39ab98423d1e3f872c08"}, "ad3f9dde-9beb-4e79-bbed-9df2a49c3517": {"doc_hash": "ee5699c0ee6df8ea9464357835928b83d35db06549267ac6fb9930588d54c323"}, "82927522-c49d-4a56-b7fa-5c7e73f63991": {"doc_hash": "56cfe9ad283b2312032bbbf3d644276bbc84e56d461e3152445e0bc3de7d5c00"}, "dce37b19-836a-4c32-ac38-be196aca2032": {"doc_hash": "cea21c7402f712e3b9dd8a473ece94cfb0a60b12b75a6ebcfc943797b91493d9"}, "ebd8a5ff-9822-4ebb-b087-f770afb0fac4": {"doc_hash": "d04963c0625cda2a6b5a023f5212dc8370e90be869dbb19be3200f50535f293c"}, "a3a56610-650b-47be-9ff1-dbaf14af3873": {"doc_hash": "ff3b5dda320e3f69036fe10900276bc036002e4182585993fa44e796c17ce1d0"}, "c5f7eca6-1fd2-4df4-b35e-274d93e653b8": {"doc_hash": "c388990a2a85c56b78d6b5fcb8277d511063a0a1b84e6c53599c9df74945e788"}, "21a904c2-1e46-453b-b879-d25ada42b096": {"doc_hash": "230b0d7fb60ca313b32cf43b4f383dbfb0d8893736d9000f018f4a1307a19e7c"}, "028e5875-bc18-4263-8cdb-ae58b3482c2d": {"doc_hash": "f2ef6cfafb674b5859f55be45053c8db86d7adbd2c379cb0feb890270c6434ad"}, "a0321963-8ff2-4ab5-8fde-6e17f4525236": {"doc_hash": "d9c92e5301397113e857fce75913f2060a745d75d2754f225c32fe374c8f04fa"}, "2dd8238f-b5c9-44cc-83ae-7c10f4f43b3f": {"doc_hash": "e79ad957e239a2e46aeb41dd08b4da184b4e614e50c435a6fa811a3f02b36400"}, "636fdb76-0a49-4e1a-9423-0b0c8eb670de": {"doc_hash": "1ddff7de84c616278900fdbd7cecbe47ab4b3d2d11bb052ff7f5d9b6304248cd"}, "b82ac977-b61f-48dd-9704-799fd90d58c3": {"doc_hash": "1bd07573fec529db600fd4dc5c79116ccf215e6ccff87d9ea897fe99aaefbb4a"}, "531afd3a-2533-4db9-9fb7-3b101ce460ed": {"doc_hash": "d8816e5fc05fc6469ef2121deb23ed09df8be533b86233b9c948ea737a22c599"}, "c178e692-3bc8-45cf-b811-ae4b941afedf": {"doc_hash": "fc0d148df8878f1828cd8f79ac269230bfdfe9f268dca4915f93d1079ae3fb55"}, "de92c691-5b1f-4be9-b182-ae35ad06a0af": {"doc_hash": "12bbdb4b38cc94862a3eae0cd3a2d280a928bdc8a88d2298d57aa6d4d9a2e1d1"}, "07528021-ec45-453b-a31c-64b1153a5c7e": {"doc_hash": "20d5b903657fd5f044af8ab63b88b9f57c7d0c816dee5bdf2a4b5e0c5374893a"}, "2db1ef4f-ce24-45a1-ae1d-dcb103d839b2": {"doc_hash": "1d07685be58e534a127f548eff85a631e0369b9596e53fbf1d41b454d3e32ecf"}, "67967a6b-5d6a-4cbb-82a6-3b0d00479d89": {"doc_hash": "7ab0071036d998c37d366c75ca527694e6c42e5193ff08dab35b275726ba4f50"}, "73469d13-ed85-4f0b-b88e-785dccd018c1": {"doc_hash": "b5224b79f545e690de6ea3c26acbe3f703d0431e30ba7487b11dd5d6c3361092"}, "9d23310a-def1-4b7a-8114-8751cd93b046": {"doc_hash": "02c40a00985576c71d4cb9d8a3718219348ad925117fafeeb73f096e58894f7a"}, "8a816488-4bd1-430d-9407-e4d437b06582": {"doc_hash": "c973575f817b161756a57869aadb60d9a9228c765bacf4b4fd32adf77777dd88"}, "31ef71f7-b42d-4df0-921c-fe65f7d441d1": {"doc_hash": "9f20749c9678eb898d26686baed5235e4d05d3d66ad093cb7591be1168d18bb4"}, "bb034993-4e86-428a-9636-2c111a10847d": {"doc_hash": "91f13ee3a54e329ae96a3a31baf2859aec74c603ff987d77f004ec52eb919e05"}, "2e94eac8-3942-47d0-8582-eddd303b488d": {"doc_hash": "272b4b6ed4de25ac24950aa0720d7f8dcd52ff1689a6ec3c9faf14c204f77f18"}, "d7460287-2399-4db1-b08a-297053c179fe": {"doc_hash": "c33fc31dc0aa8cb1687f70314fd06cc0702fe5ce7a9cda8b477fc508242b53cf"}, "5d358f44-9364-4eba-9b06-2ffbdb4db936": {"doc_hash": "f67a16f5215479e505dcddeab94544cb2c7b654ac8bbe138712576d848b659bb"}, "2974e4fc-aa26-4792-a3c0-634dbaee5c8b": {"doc_hash": "96611b201d27581a13fc44213cdd507f78e12db36b54ef3b82596a5f90fec02c"}, "c718d7dc-0091-418c-ba49-268c0e532bc9": {"doc_hash": "643509a2c88eecb76a44b3eecc04d34c3d7177d38a4905e50d5d7b47961fda51"}, "efbc3004-ecb9-4354-bcdd-749a3d8cf57e": {"doc_hash": "5bd883d0b7d9cc41f851aa4e559aa881e166fa0f96e97b11b654ab3db87d5efd"}, "776c473c-2b18-47aa-8353-f9750d03e31a": {"doc_hash": "a98fc66f9ece9a745b579af63796b6b373a8cca079e15f579d79fb85d7e425f6"}, "87df2992-a843-4dec-a768-3b5e0d3e0257": {"doc_hash": "ec86a0c88e0abaef88ff3c6851ee5ec966657759ad55cc9d400474ead4ffe022"}, "90b55eb8-e599-47f4-b7f7-f63a12a7a2ea": {"doc_hash": "2a0f92b753a38b0fb508157e7f7d1ea2ea010f8971a84220c45a69e107af4af1"}, "57cfb6a9-1246-4ea0-b824-e43d77405411": {"doc_hash": "2fe1a397ba8a2e1525cf5fa9bb333b4d6d01e4796ec5b1c63e621147a6137f6b"}, "9da8e4e2-0e74-4996-8e3d-ee3c184080d5": {"doc_hash": "b697a55997e60e10b0b091e0135f78c9d5a8e6085086392c20fd2ce69156115b"}, "3fb6a6d7-8047-4129-9f16-c234707eed4f": {"doc_hash": "f08dad8486aa31f758038abd49c242e7adb6573bf9cb958776f77ef8dca24554"}, "c17cf19a-c752-4743-81ba-ab582098c608": {"doc_hash": "8c9def720637ce57753928867004eae33a47bda83f75ac42545971643ad46e5e"}, "4d1f38c9-90c6-456f-bad8-0d543be10876": {"doc_hash": "d42b7c4cbd6a363972ba74fe6c8fb4d54e9f76fdc02da317c7c944459ca8bdbc"}, "7f31de39-1a67-4001-bf9c-d25ed478162a": {"doc_hash": "76055093c16bea5bcc05714436620ca924627cf18184e241805bb32523db0f93"}, "0030bf3b-db5b-4058-9373-d719107e4a1e": {"doc_hash": "44f968449b06521eaab30015ee8dfe64e3ba9e52d53345070aa2e0d061bd4dde"}, "688dcb2c-bea4-44b7-8d74-4b05fc49dd55": {"doc_hash": "ea0323716111a382c07b3df3d7887dff44397ce677b83733f447b78feac8e479"}, "01758b2e-50b8-4ece-a556-02d4caaed0c6": {"doc_hash": "5b4fd3ead34ccf0dc546107775c2eb9f05c7192391e7ed046e037151c69baa38"}, "ff6a04ac-047e-4fa0-9042-7c43009a93ad": {"doc_hash": "5f3d1e97880f3ecb293d3f10d2feb8b1612893cf5a6818da4405626936317c5f"}, "fbb126ec-4aaf-417d-bd62-c98629920739": {"doc_hash": "56ac5198da343587fa5f4d5caf1e90398f9e906a8b2921565ebd2293f932ca5f"}, "889ad586-729b-4006-af89-d3dbc943ed0f": {"doc_hash": "7f739b6f656f6ceb2cf11005df774cf0ec3f9a1477f717a0eb26e80d5979bfa6"}, "fbaedddd-79ce-4928-8c01-39baa059cb13": {"doc_hash": "417194ff370644b1403321162598e7497b75114995c953f75c14713efcf6465b"}, "ec21280e-7d21-41cb-b5bb-f4cf36cb22ec": {"doc_hash": "cb8317b00629520700ae83579078c8fe3d7af833c21b14d45dceb5d7e61b6608"}, "6a47b973-52a1-4b78-b3e8-ff953f489119": {"doc_hash": "b5cb62d2587d2bce962fad916626863940fadf6bd4f901709f3052440290bca4"}, "ff0339ca-286f-4a9d-82f7-c47792fbf62c": {"doc_hash": "44f233ed3d2553e111d0eb135868a6293440a348bca882f0a9f54207b21450e4"}, "4a0b7b56-7b0e-4bdc-abbc-eebb14a0ca75": {"doc_hash": "12c02d612d0d36462095e2e4153d94751e4fbb8c4dd584a2b59a7b1e36ec416a"}, "b53aafcd-ee6f-409c-8581-fec15b4a55a1": {"doc_hash": "f725bb18f323c586f2d032058253e151f2d396b425848a3a379a82e490a5bfae"}, "5dc10584-eec8-4de1-9275-ad1e2ae6e431": {"doc_hash": "2588df804622789f62723817ff662bfd01b050e64a4adf04562886430cf6e74b"}, "672de12f-2ec7-4a58-9f37-a258e7ae85d2": {"doc_hash": "cb77f4609dd2367a5610fb41f06ef7f61eb26636b99f268c775ec1d952e8a280"}, "f1f92b47-4413-4f49-b916-cb98809531c0": {"doc_hash": "faea5ef9a061602f11daf80bf0e7369fb27fd0b3fd8860b5c5ec7ebb4bd1322b"}, "0f386667-5cff-4b58-b914-2f74fabe2441": {"doc_hash": "5bc892f9a71202b5ee67c9d7ea3cce4d56e44a8d87c4eac14083ca9c60ad1c05"}, "d7280c29-b6ad-41cd-9208-94d6691bec18": {"doc_hash": "f9cb547f782162a77eddc1cc0e0ddf3630f0b33997e40895fa7868035b25e475"}, "2caaec2a-322a-4442-9c62-78ac5612d765": {"doc_hash": "7d5dd0778ad1f435ef8dc16a85bc59c35ad50c055562bf38afcc26744f6101c3"}, "1d660d84-22f1-4371-b24d-85b784bbb36c": {"doc_hash": "f06d68e5b0efcc9a5749a08e825519567bfcb8fedabd94378a081ee13680fb9e"}, "d7f0be94-137e-4112-a261-9f8507bd790b": {"doc_hash": "778ee128c1a08732287400d5bef81f398c67ee42ece86929d9958dee58df54eb"}, "68c92e9e-2494-4d0d-9384-8fe4c432d4a7": {"doc_hash": "6d4f6218bdb8b93025be2d6a17311d7bd8e43d6e68671173aa882b72473066d5"}, "c7f0756b-4cdb-4f2f-a4b7-b4abf7281db1": {"doc_hash": "c25409fd5056bf5c427d409e0098fa8e0f9257a0595bca1cdd09b7b0c576b853"}, "d71f7ef8-7f3f-4d3b-a80c-2b6fc5142f38": {"doc_hash": "50cbe7eac9529988f1d61a09d3529bf424c915a61870d9df95c54c0d79cd227b"}, "2aee9b13-97e7-4c9e-b861-db680b45a462": {"doc_hash": "f8a935dfbd56acec4a99e7f418f0646f07ad776b4c1ac9f9c49e6d77f0491ae8"}, "499b5452-7778-4177-937f-e34ad66ac19c": {"doc_hash": "08365159e961f3ee3f98e64bd0d2a9c8523313439f01617b45f1d4044ea75eea"}, "f890d30b-4495-4093-b798-8e8648293dd4": {"doc_hash": "a030c26c72018275b75cb9257cd666e1718affcb9c9742f1bd0a3f670604081e"}, "86610747-b21d-4b54-9e63-bcb1620938d2": {"doc_hash": "8b79c4b2451c6b60abd1c67ec24b2160c1a3273b76f5ea7d39227e2a665a84a5"}, "19271a26-4e3f-4d73-8254-4ccd2404a2c5": {"doc_hash": "162b73c9b9b78d6e5841cf8f8793ad16a5c300dfc4d6c5b323b0a9bd41abe1a3"}, "e863e51f-03de-4693-be1a-e1427d95dbae": {"doc_hash": "6654a1279bdfcd12a5620948d15ed3511a95ae3b0c4a6b74e086a71b2c260095"}, "e327193d-0c0d-47cb-886f-0aa5b2de44ba": {"doc_hash": "05651f98c77b67e5edf73277fa3b0212340698cad4974d29a4d5445864a5d726"}, "86cb79a1-8dea-4096-87c4-5fdee9068470": {"doc_hash": "f01749674286db15ed580973bcf825c44a2b796063ef9390e81f137d080a7314"}, "a6ecf36b-beda-4120-9c2d-f510fd43c48c": {"doc_hash": "79ed0742ea5c2c9afefc4ce24359cc15051053c94e20910d5838d5db765798e8"}, "44fd8e5e-b2be-48fd-a409-dac7e8ca8b17": {"doc_hash": "b8ab388a86aeb1a3ad85b5801b0c0f94202834fd260ef50ff2d3892ef111c7bc"}, "f2c10cae-5d9a-4acb-a45b-2c5dba2400af": {"doc_hash": "318421686bee4dac15006434f1ba311760e840ee0eeb2b44cf320daf527e7e40"}, "b7818993-ede8-4367-9f6a-5fdf5943bece": {"doc_hash": "3569c9829b94c81c7233a53bddd070cb37473565b1901498321c1b4d7e219b46"}, "578155f4-0e4a-4271-b8ad-f63ebd9a5668": {"doc_hash": "6939a80640fdc7cefd7efea703dea4d6d92c73089d57e9ac47a2e154e14e1a9f"}, "95109bdb-511c-449b-8ede-afb99ef70043": {"doc_hash": "0bf1ec91fd74a24763be82adff7a5bae99b5a01c7f62e26a3428c044d49417a2"}, "f6802080-3da1-4a2f-83d0-b26707f55200": {"doc_hash": "08251d995ef9b2918dd9239b5bc642356285b81e4fe35bc4fb6e7aa5265d4324"}, "5caa264a-f7dc-4afa-8a67-5cb72b1655eb": {"doc_hash": "4a9835112f5336cdb93a8a84f96dc8cbb96d7f4c65d2650bc89b6966631e51ac"}, "72e0c9aa-b71c-40be-9f5a-da9e7b8be455": {"doc_hash": "d995989a63536fd73a1cece82bb4472972456d5dd5464883d53354ebaa0a936d"}, "ca41b5f2-bb87-4ee6-bcb1-fa8a1e39cbc9": {"doc_hash": "a331690773a9560eaeed8ee6e0649265196ac6e86bde06360c77002a699a052b"}, "ed12e29d-0130-4d50-995c-6ae2d5a867ab": {"doc_hash": "73518efc8605f7ebfdfe2a2d6f13a6eec899452568ed8e65b501d8df7d228c2a"}, "8a49f89a-1c56-477e-9548-00a47562f51f": {"doc_hash": "22df1b49eb4d407f6f4fa406cf4e2858a1643400affce25cff20477b87f2a8f7"}, "e0e49a7b-27c9-4e33-b0dd-9bd77aab93b8": {"doc_hash": "c91e01bb9dc3a2988ace3c801e8f137379f6b573fecfdeb6433de9e26736ad59"}, "58aeed7e-b50c-453d-97e6-fe4567615909": {"doc_hash": "705f2620386d568b01ee082c54de67ee210654f845534bffbad4da95c9f432ff"}, "ee3ecdfe-e123-4a78-a143-4b090300b9d7": {"doc_hash": "00de9bc1a7ca33f1e244201928d2e4ca7d924d42485628217772e60bf5a9554d"}, "c5611fde-0b06-4f39-8ee5-1462926e6a7e": {"doc_hash": "d8e7ed760a526f6221db037c2b7c13c2f3e11f9a78e0861af1b37089f070c975"}, "83a5d65a-7b0e-4811-8350-d54c95af23c9": {"doc_hash": "6931e97e1b03267624be1c17bc1a9ca01ae6e7f8c4d38f4c5317fe2550180b7f"}, "e9a4d9ae-b033-4d29-a20b-5b85b896a8fe": {"doc_hash": "8a78233d4e0b867cfac9a850575c956d09ba7ab89c9e92a75c3c4d4bfcdbdc9c"}, "09997602-71df-4827-b08b-ddcceb2fa6b7": {"doc_hash": "47540aaa71240ae9920cbbbc7ba0844719dd28dd141abde3ce35a0abf25c2d1a"}, "8c007612-ceca-4859-821e-e8f949699739": {"doc_hash": "8446b7bb3fa07cf5ef6cc6c9245095cc24aeeacb92e8e95bcfde993e4896c1b6"}, "41dd2289-fdb2-416e-9928-6616a6dd832c": {"doc_hash": "016141bb2c7fd9f7cfa8f6d4629658ffb7d94120e0361a121cc94bb547a6c879"}, "52419c57-ae65-4ff0-a76f-38809201ac13": {"doc_hash": "c38fa752f0d11a8ddce12738581bc72806871ac1e795545e297cace794a73524"}, "3e847f41-4220-4f5d-a9b8-cb9175f29709": {"doc_hash": "af7ccc2b463950852af7f566ed3b65c636fea79076d0a85f461b020ab8decbc3"}, "6c6fc445-b4e2-4744-88d5-f8655ce5af18": {"doc_hash": "33cb66f560e9a639548090ebaf9392efdba4362a14ad2bff32ff6db730a8debb"}, "e3e67105-1b12-45ef-b2e1-cd6ddbb3cf1a": {"doc_hash": "8854b1f4e1655a65c8c33eb7a8fd459f244d375a9531fad0148de629cf0bb07c"}, "f2a5d9cd-caf9-450f-8331-5df48fd3c94c": {"doc_hash": "d4be91ea8991269ee0736ef1776ebd5e3ad2f0b5e71bc6ee340d2c523703eb2b"}, "dbb85775-0ff3-42aa-958c-1ac3a78e034e": {"doc_hash": "513961bd4649755f10f7fdb8b1184d1156dfe5a84bd5891a48c345e5bcfdf206"}, "4daf4552-2b4d-43c9-ae2c-03ab77e60d9f": {"doc_hash": "2dd0080a7a030a39b415eb4966b6621cd4fbd4f9d5e742b1f0e35f0f76c5a16a"}, "4ca8f838-44c1-45ae-ac33-4755f2714aac": {"doc_hash": "484ed04a349d0d209e8fe05250b798b5f522c32eb425da6cb150dca0037f41e0"}, "b4497ab9-2afd-4d8b-b3d5-9176986b0fdc": {"doc_hash": "922ba8b86b4a3208a134fed2f489053692ef759d9de9337ea3062983699de142"}, "a3cebf60-6223-453e-927f-4b8cc1c5b5b5": {"doc_hash": "9ebc9a58fc6d7cceffd9d520287b1fb24730d6ceb5b67df98982773275bc3eed"}, "f55b9170-8cce-49e7-9198-f8f694e61808": {"doc_hash": "e66d262c7b8cb74bb1392b86ce065395348022821fdce8609978fc6f1c3ba968"}, "d55b425f-2c7c-456f-a76e-d4defd093678": {"doc_hash": "f794b4a71b1f11568cd5d91a74b84574c40c429c33c0830ed660442377e9d605"}, "ca5afee3-0cde-4e4f-8f91-a9cbc4d3b6d2": {"doc_hash": "1c784cd1ba4edd83b9b143a0a7f68d98c2bca8385bef10b448fff178e0dcb851"}, "539f8591-5953-4660-a181-96febc6ed5c0": {"doc_hash": "5c2996d3694663f2b2838d73ab6e14e976d1142270b2feb807658c3b14dee423"}, "c0f98458-c31c-4ef4-a41b-9ec99e614d67": {"doc_hash": "5658a315abf823c7d6d0ce3eacbe8e862db3ba2b259b84443610ce3fd866f831"}, "2290dc41-4dcc-4716-b972-ea85bcad2128": {"doc_hash": "639accfa340d1e5a4236fbe4cc03a8ec8243ffc918c8e1092e847f83ef698d8b"}, "a86fce18-9a32-4ceb-b5ac-b84c4db13b04": {"doc_hash": "1701f4a440283865835be4065bfe23c51b18b25490f3b2fb2e1c042527196b91"}, "6cbf7941-acc2-401b-83c9-5cf6055c5418": {"doc_hash": "f2ed4cd9de55866c8531b5b99995cabbb678e72c2e684f6960ae4a9566266059"}, "ec83aa2d-60cc-454b-98b4-f14ed817cd2a": {"doc_hash": "5aab814c6452a0f09fb2e800dc95c7a4c80709c68641ed75274b927d30be0486"}, "a6c539a4-563c-4469-818b-0af7e85abe18": {"doc_hash": "1f520e1200ede401c0f53ed2d38b3659fce6398c9abe3976656c448b9cbf7f07"}, "2ff26c0e-6a5d-4217-bf2f-ad58ff69e47b": {"doc_hash": "bdc871b88f136c17bb248845a279a8d3c952a225d299f2d78e75a241708adbd5"}, "9b11cfb2-944f-4ee3-93f6-48af277ad8ae": {"doc_hash": "5f2f5889ab0b88299333817d6ff0291feffc16f10a155881ab96534b59cf38ce"}, "6a860b3d-0380-4b04-b29a-cf435a112968": {"doc_hash": "83f79136274255470f509974dd7ce944331e9139504183dac61fdbc5c9459cf0"}, "3f234a7d-a8c8-4c0c-b6ab-8098854a1e6e": {"doc_hash": "fbea3267d497ce68a8dd06f2d5cacb7231625ffdf78bf46dde9d8f027a21096a"}, "4af3f9ce-37cf-4e2a-957f-e0bae849a1a3": {"doc_hash": "ac2774d9f264b77b9f7a7d0e6564a0bb26eb6064af1a92be366c3a8d8a71ecf8"}, "2eb8ae5b-bda3-4f8e-80ce-4952786f603c": {"doc_hash": "610c1d2c8b0073d2c009f51d61bc52a078bfc039bdfdf804ee223677de269bc7"}, "f94bcf04-9a54-4790-a1c8-7a8d22e987c5": {"doc_hash": "9a0a93fcd881e689b63bf61ed4c9ec93cd526400dcb992b46695e9ad775f54b2"}, "ea81f8c1-6216-493b-aad2-6f14fbdb22a1": {"doc_hash": "0e1a0fc7ca5bf2ef5f4740dd5b3b787939a0875cc49087bd25b701583ed01f06"}, "71f3c27f-ae98-4dea-a337-dd07ccc819a1": {"doc_hash": "2c9d756677037229b20c2a51613015e055558e10d0ba332f6311f619b451aa59"}, "1c3e8b1c-1dcd-45b1-8664-3ad34bccc770": {"doc_hash": "61f6ba7c6358e88035c72746a42d96044dba3e40297bd80786aed9fa2ca0da69"}, "803f4178-7f87-4f8f-891d-cb59fddb0f0a": {"doc_hash": "4a6098a543cfa1028ffc938704a622cb26a48d5eed21905f00bbf0b57ad6f13a"}, "7b710131-364e-4bc5-b2e9-e7f4b5fcfa2a": {"doc_hash": "48e9c7ca03d169a7d57a2cd37c68503e612b2ca2ab42e7ceef174d82bb6de2f3"}, "e3abc501-edbf-4607-a901-88279381cc2c": {"doc_hash": "a0758a6a2fd7f1cd847c1cadda093b5fc719024d35e035643531bb5b7eff4f87"}, "027c61ed-ec7c-4476-8731-74c8571cee84": {"doc_hash": "6c302de9e9debdd11785117dc6d3d3be07ae407c2817d85c2b2088cd56c5c8e8"}, "2f75c810-f18c-4067-9252-4d09d1d18b2f": {"doc_hash": "1158fa3188b0d61f58ec80da392d41d711033ba60c5d8783e2f735a7f9948772"}, "e2c78923-1204-4f05-b887-99a6bff120ab": {"doc_hash": "dc4fed671110fc3436700fe5226f2969b39d8abb8a8b21cf46d91f0ec138a62a"}, "0d7fab36-2c6f-4e23-b90f-2bc6730da0a0": {"doc_hash": "140152bc486884f7a1a471ce5ba789f89b2e52cad3e810efd95a7fc1040924f1"}, "10dbccf2-1a8e-4b8a-b256-7d9568b285fe": {"doc_hash": "271ce4dd50abb48a18fae5a6c243594106149cb98eedf54226f2b8d66d3d5a69"}, "33fdc0a1-6561-48c3-998e-89c0333c7e9f": {"doc_hash": "f005a273ffef2d79c59d045bad2de20d0c3acee269762829e29b7eb0b1463581"}, "4731bd9c-3858-4789-8f98-7cf1866689f5": {"doc_hash": "199bfcc96180115b056f9f7e851182741bda9adc2234990bcdba4429bd7c83a3"}, "f3ce54f5-9b69-4b0f-86b7-ba5bc66d7085": {"doc_hash": "6fdb728c1761f60ef018affd30589c19b8dc4b2a0b20c7cab75381c133aba99f"}, "2e6140c2-6bb9-4cee-aa40-0ceba53a44b1": {"doc_hash": "080555054562a8fe7377034234b53f72d2f8d3632d33e3f36396545e09c9a3db"}, "c3304f9a-595a-4dfc-96ba-bbd19e6f4f57": {"doc_hash": "a15fd971b95db6bc20d02a2be531c3559953c727787aa5d3658b4435e505c102"}, "fa627162-bb28-438d-b7a8-5456eb82fb3c": {"doc_hash": "fb40c3d2992ca8a00f2d689bda4736058f749273f49a73c9f01fd09a254f3686"}, "e05b56a2-c7c5-4c49-ba44-39e60e89b1c1": {"doc_hash": "ac173e10a45493a4d278b9382bd435592a816fb48bb0066bc56902c3787cbf00"}, "c41e11d9-ebaa-48dc-8284-7ed5367bf332": {"doc_hash": "68d6b0b2d6e180e8abb055410df66f645bbba40445560166c5ad312cc0cf658c"}, "0177558b-9d0d-49a6-9644-fc9d74730c0f": {"doc_hash": "d819fb44ab11222cc0709a49f452f4f146f62d87312a2dd372252505900263d5"}, "b7e2b995-a7fc-418b-8078-25620a255b71": {"doc_hash": "c901eae72497e02e2853ff4b0ba8f849e129e264e42b6249b959ba33329908f6"}, "169bbaad-84ad-4eda-acfc-26415a5e5f88": {"doc_hash": "020eb4ab7a37302decf35c9a4120442884fe38a43684bfba1cb59c0cc39c0475"}, "a4c1fb0e-2a75-4b9c-adb4-a439757ced40": {"doc_hash": "527c1f43bb72dd8214cb64c3a7038ca050b67c3e9e06dec840889a772eefa0d5"}, "15e6d703-6715-4e5b-a989-4a4b14446bdd": {"doc_hash": "49b4c0c247465294451cc1677cc3f14a6724637e953459e183e373d8da848d22"}, "04a26b1e-a807-4772-bce8-c0081849eb08": {"doc_hash": "3a204a18cdd4333ffdb38ce975c463d8c59ba02569a25f7e14949644dabda872"}, "d9da3902-bdef-4d17-ab94-bdd46cf6fcb0": {"doc_hash": "a1e4d7be4587b6dca9aec616e6c25712b308f133761366fbaed8ad0113bdf748"}, "5851eca3-df58-4608-9748-65667ef53334": {"doc_hash": "4d37fee1f55d7e45825e4a342ece0b9094ea86041a6fb55ff7c0e30fdd60e45f"}, "b40c98d9-c3b7-4bd2-bf36-3a0ba25d05e5": {"doc_hash": "32aa82748825cefcf9f178bb00c43617472d37f8ca21bd6f02180c2c1905d163"}, "efa53c04-3fa9-41df-83d5-fbacbfba05e1": {"doc_hash": "3fe196a5b424ab55e5fca61dff5b4c19c72b81049d7ba9d1c506e97c1ba235a8"}, "04f3b053-992a-4ad4-97cd-9def0e9667cd": {"doc_hash": "0f5d61d1be6eb27eaa80863a3eb3bffd85beef18a47ef4f6ac233d99cbcd14bc"}, "fed0817b-0036-47d5-ab89-964ac95af8a4": {"doc_hash": "782e95ba1c21bc94dc30d67bad4b0fde27ac6e532eb494bb4aebd2e51abbcace"}, "bf3551bb-a69b-4786-8b97-9e1991779b25": {"doc_hash": "056367591d19bdb94b098f048eb6e793095b255284f0259f519986163b3b21fb"}, "dd4802ad-d90b-4097-b027-0c9063d87a6b": {"doc_hash": "527166682af951849cd7bfb2337417948e07de619022946f8dd10490a2cea069"}, "e1dbcc9b-86f2-4156-989c-97a5793dd227": {"doc_hash": "866fee241851044b46ae301f4fc0da946c19bab10120d9950ec888d5f6fa68d0"}, "afbb6827-a175-4052-8938-0a65fa569958": {"doc_hash": "14e804ab6c1b5cfeb0d76282ba9256e110265cadd86a0acc29571b4c45160466"}, "d3f89eb8-9591-4eb8-90f5-78862abd97ef": {"doc_hash": "0d191d03182d36e011b9faa06ed4571a1d98aa810960dce31155b377aa0615a6"}, "80239979-c162-4be3-a87b-d736b75d6d86": {"doc_hash": "ce7055190f2744685decc24ccf69229a01dafbb56a90fe1f8afada0ddadddeba"}, "b632da1c-a299-45b5-af0a-c02d87d51ab0": {"doc_hash": "62265c232d227f19bbcc6252e1d339580ec57040c7318b25c0fd8bcfdd7ff985"}, "5e01de27-ac07-485f-8ec8-aaa8727920fc": {"doc_hash": "5ce7c966d78805a1352bdabcfcb59f662a7995e06be5510deccad52d5a7dcbb0"}, "1054260f-7162-43e1-87e2-4adc704520aa": {"doc_hash": "2405bed36482e30b75a9a7277e64b9ba6d6bd0ef47c367549fec9bfd58dbfbb1"}, "8f275a63-b889-4200-9f19-6b5e79099395": {"doc_hash": "e1eb7a2e8093322b9baa6b2ea21e5b9935ac0cddc8bab61c44f1a1db9228b2be"}, "f849f020-c8b2-47ef-a5ad-8a712f14a243": {"doc_hash": "084c763a0f697d655890d80da2b3a4cd91c398768bc0700c3336eeaacced9350"}, "51a40464-b60a-4af5-8ed7-0aeac71e3790": {"doc_hash": "cecd5f312f754600ba65d1b36165ff6a18b98d6ce6d8e74e063a65c9140e60a1"}, "50ac2efc-012c-4509-834a-ed09ae8f63de": {"doc_hash": "fe7dd1ca8c522405fa2ff5c2f623cc33d2154e136d5ac3caf454cfba691fc0a6"}, "d866a6a8-3bd0-464d-848c-abe58043d188": {"doc_hash": "95b1e2c3f2c79016495979344e3d0eebc8acd2398f7c1e1965874cabe4c4699f"}, "87b2b43c-0df0-4eb3-9aea-59147a753c60": {"doc_hash": "eb9c73a412dbd4e3d3f1e91b75ca7b1b075bbcaa0993abb6bf5cae47fb70762d"}, "f2405322-6a69-49ab-9945-70f2c4a4c31c": {"doc_hash": "d3e06198cfc571941cc161d65b7de458d71c0828a4b6cc20225a9d6dfff9d9db"}, "f287c9f4-8311-4f48-8743-675111602dd0": {"doc_hash": "58a9137da16061cb1a153227e6ea90d45e03baf3be7f5b4b4186b603b3b3a8e5"}, "a56deb37-fdb5-4992-8631-cc26f94c6811": {"doc_hash": "bb40460a169a6d70c19c5152f46fb0d261e26ce98f7ca8bfd5b55802de0406e0"}, "c9269bbc-a5c0-4847-871e-c48413c459f5": {"doc_hash": "d69083552fea67fe4dbbcd19295734c0b04bf58e75fd7c53618792fbedd05c0a"}, "a688981c-5fdd-4b87-90f9-4e5a7c7b9f2a": {"doc_hash": "b22d41909227128a92d3120e4479170819008f180d59ad77039ab43ca87c52f1"}, "6ce55b5e-e69b-4764-91b4-0bf267aefb9c": {"doc_hash": "ae1ce83ff3703557f3c751654a667e3f83fee8d2f59b82b4d85f0aed8479b567"}, "dce7d637-fa63-4b5a-a7e3-a173d79e4d55": {"doc_hash": "9506b7834a38214254baff76d0cddb7daee9bf1a4495ec41d92e91b5b68564a8"}, "88fdec93-e525-4504-a951-124a7b7fb27d": {"doc_hash": "48a2b1884c17746316246421c0240fd554a5ebf03703be389ba042bc301759cc"}, "0372323a-6121-416a-9281-85ba8271185f": {"doc_hash": "64f983cbcd4b4bdca65aa97d95dcc0a5777738dd57494a9e8a469709fcd220c0"}, "8613a745-e3ad-428f-a3f4-f46d707a3be6": {"doc_hash": "278146d6b25ae99e2de7cd808f715842d7cb07ac8251a52265ca3a7ee4941fe4"}, "d67d9b9d-a347-4ebd-8c68-eab5e57d6a15": {"doc_hash": "f93a5e1834ec2e5067e87a2696dd3b35cccc926c55d9d702c2f3be50994febb0"}, "d4bc8f5d-66d9-4d67-80df-5a54f94d49eb": {"doc_hash": "755222dc350989c7b33a6dd6416a647e4587ebf67e07a7a06e0af148f550f5c0"}, "e94de2b8-a1c9-401e-b46b-55842d2b42c8": {"doc_hash": "f5a50499b591535a227d2f1ad12fe12d70402f157da1cd57490cdf6c4e5f18a8"}, "07a578e6-45e9-42ab-a845-4e10000dfdbd": {"doc_hash": "2aa92cb8ecc9ed7f47f48064814f25c2a38045494aa5b2c1cfc874c2d22fad7c"}, "223a0db6-4f51-4623-9c88-c6f1e3e57f3e": {"doc_hash": "bf555388484dd71ae7764b232ddb5951b6154362624d99320ab8614303dec3ff"}, "290cf564-ff5f-4e14-aab0-e2daab98f2d8": {"doc_hash": "e4b4539298c2c64cde06c9078a0ef3edf49150511ab5a85a4fd0f575bcb8465a"}, "ffe8d2c3-f7b0-4546-a0b6-62af01debd44": {"doc_hash": "a880da4f3f4e21f3f8cec7808409ab2cd51f775161b2f74f4a197073155cd25e"}, "744d61ac-3c3f-4bcd-a02a-75cd6e617007": {"doc_hash": "4c49dfb19235d957d786f4e11d031073f48ab70c687ba88f44b3d142ddcb849c"}, "f0ec5205-b0be-4aed-82df-6d032d3d95be": {"doc_hash": "ef01a83f4c061cff99a99feed0b26253418f6df7eed0ef92815800527f30c8d3"}, "a43a5582-b664-4232-8cbd-e1a698c76529": {"doc_hash": "5f2f4da117a97a5d459952dde3617c6ba876b65e58fbd4715d31bc8cac28962c"}, "7dddbbb6-98c9-40b3-9aa4-ee6d51fb5a10": {"doc_hash": "f1f24bdd8a897c05a60f97fdfc2e01f8e87bd1f2f62c614cd83c5ea630bff754"}, "d4d49f27-79ad-4678-a77c-2e4773879061": {"doc_hash": "3cf6ecfd769f217f231f2c84d20558c6b9a1ed4597b1e59835d4103fbaea3d8e"}, "35e396a6-b1b3-4ba3-b8da-3e78d25e7c11": {"doc_hash": "a45c2c6eed9bb8308b856410cddb31f2bb652089743dbb715957eaffe8366026"}, "5bf9f36f-1ffc-450e-ad32-5aa4ec0b074e": {"doc_hash": "31a26074cfc6e2458e829cec88e9859cbe9f6468b84ce1b3dc2f0c5b4235b431"}, "799365a7-246d-4db8-9743-423571ba73d4": {"doc_hash": "ed6dbebb8acdc4b47ffa11bb6de29efacd87a16f13c7ffadab2381624da85375"}, "d0422eba-a342-4da4-a900-10f22e1af418": {"doc_hash": "e2210c23fa6a3f690490617630b287fff995d31c2dd959b6b5532ac1d5d6a41e"}, "1886b990-6e64-458b-a499-b0788432dc1b": {"doc_hash": "77e8b8f11b0ca304bd0dc3861e9d64ce7e42a121e5f4dad55e972c1d38693c7b"}, "8b750aba-9a8d-44cd-a6de-5bd835fe7668": {"doc_hash": "a6ad4afb059cf31747d8cd1a0b29f44ff66b6758c72e2c0de58926fe5cc16d21"}, "c8dd567f-3b26-42ba-a364-e1a6cc1aea91": {"doc_hash": "049cde75307319d7ef74c1e69fac5ffa9456dcfc30485b7c194428d3fad50d5a"}, "13989220-a054-4245-a93e-d6888b340135": {"doc_hash": "b3bf52015c14804d1e9599028021f1b8ada59809e772bf524bc87528d0fe7abd"}, "697cfd63-29e2-4306-be1f-256208ad1dd6": {"doc_hash": "293edf449526db0d65d9a599be8f70687a64e539026121b8802456e1eb5ddd60"}, "5da6453a-0764-4d06-bf7d-57dcc8aa8ffe": {"doc_hash": "1303ba7fb01badab0977c6669ceb38b17d7c73efc1ecc6336474e8d8dcbe76c0"}, "726dd4aa-a665-4d0f-88a8-14d896a7ffb3": {"doc_hash": "262adb13d3fa743ccc14c6540e42125e837a4e3259751d6ab5d0e66928942b38"}, "e616ef71-4a0b-4cab-b1e3-11e4414e2198": {"doc_hash": "5dbc80e93541431487ea2e82878ca765948c86159dc144f0e086cc833fbe71ed"}, "04f11f87-b9d7-4add-93cd-fddd8ea9c421": {"doc_hash": "f4c8f0608aa2a393e1bc826fdeef60245df6a8a8689fc1d5a00dcb62a82f977a"}, "84fce7b1-c416-420e-8163-895208ff3738": {"doc_hash": "3db94dcbfd84158c7adb42907007f008b5789551e9fbb69acbbb03eb54ba1a64"}, "f905dd96-3364-41de-b8d9-9b52b790479c": {"doc_hash": "9951d3748542aaf9c55fa28d1f1f9235356df58064fd1ab1a18f8201dc39cd1a"}, "32d90b03-e4d9-4c78-a68b-9f2757d3c282": {"doc_hash": "7b2fe39d5dd43d8c2b6af82743cf6a7c874989719a25ad468623199af7bd31ea"}, "d4e3cdfd-5afd-4465-b1b6-297275b2075b": {"doc_hash": "1c84ff6f0c6f3f22333c84fa9e7ac986c35770a576b65f1132f4df9e21b95d4d"}, "c926d539-2327-463d-9e6e-e70ffe3abd2f": {"doc_hash": "af7ce9591c0c2d30c0969226cf3024ae8b1ab23a2d0204d16550def88c097ed0"}, "cccca899-8ab8-4615-81b0-1dac5d48ed99": {"doc_hash": "e6d5a284bb906fda643b4b4b195c4cc615e8ad14bc7f501681cfc49618be0460"}, "c0e197b3-ba58-4e4b-8214-20ea6bb78a63": {"doc_hash": "c28eaf34050550de300ec7cdf1f9e67c3cebb1faca8d580ecf56158078044fb9"}, "dc1dc521-9838-4b9a-ad8d-70416b301089": {"doc_hash": "84d81bc43f70959975e825e8dedc40d722542ea815ae71b459a10fafc8618dd8"}, "19b71fcd-15d8-4271-a2a3-125f386bbc21": {"doc_hash": "7a35141462ca5a6d42bd3d05a9ac4a054ccad0ece355a623fafd3a10605a17ec"}, "e09f0a03-a02d-4663-9d48-1bf00d5fdc4e": {"doc_hash": "26a581093e7670d0d192e5dc00cc3854366a6da5d3b850254541ce77e248f910"}, "25e03c5c-4106-46c5-819b-5da441c12aa8": {"doc_hash": "c1a74fdb626677a81b80065923616bc53e76e896490b0e14e7245face71f941c"}, "99428655-c2f8-4f80-89ee-416f5a73c506": {"doc_hash": "a36fb69c03c0d92c6dbbcb42155bb769eb1faab6f3311192c8543073cc8996a7"}, "a8b8a16d-03a1-417c-abae-fa999fefa8b9": {"doc_hash": "097762b0937449004b56b543f22ed32a918c63ba4f3e33cd96f270d3242608ad"}, "620c0c64-71af-4f84-9bea-9cb655339ebf": {"doc_hash": "3df5b5c89e3640fcb6559497fe1a8b79ccdc5758053ed30f2cef105543023ad0"}, "c4708dd5-68d4-4aae-8ccf-78ba5b0bb2e4": {"doc_hash": "26a74ac42e4722c5d4ae278c1201a79295cee79963ee5afb0a7dc773ee9a8cc8"}, "c2588257-46a5-4107-aab9-e30dfc2f039d": {"doc_hash": "d570b4d52b8142c6d0e55549cea5fe974adf6e303b81aad87f70cea92cda055b"}, "ba7a052b-e731-4020-822a-b834a9201dcd": {"doc_hash": "882ea979dda1e4afa896cbfd80348b7ff9ab7ac15bef176fe0391606ea9a6ac8"}, "c7475fab-c6f8-4a13-956a-ee42b4597bb6": {"doc_hash": "8dc6276a0906721df58dbce4e5259542a3bf84a57d0448927bc957d044a70a4c"}, "4f9fc753-4917-4a02-87a9-e3a23c6a9764": {"doc_hash": "d7b5587bc426e54c3f8849e82ed963729f83e3e55826fa57c6cb32f72c86eb2e"}, "c85615fe-eab1-4b76-8657-f4b59ca1cdf0": {"doc_hash": "8aedc86d77bba47aa63dedb4ca354778c5831ae0558b080317a665d3a6e42e8a"}, "f047a5c3-91c6-410f-8802-1a7a518cd5be": {"doc_hash": "3e7821f6352f3f7d7de129c8dc004dacb1d623a49a13b47f39c176f80bcb87ef"}, "a8f5e1c0-1477-4982-8b0f-eb310384510e": {"doc_hash": "2020c3b725b64dc316c1afa5d3971a42e35c0d38d273275d25b3351e6d9040b7"}, "a148c81f-57e5-4ebb-8f75-a9338a4f350a": {"doc_hash": "5646a3551aecb81a7e51a50ade7a8af6fb34e45ea357dc54ea8e0091a87ff145"}, "ccbdd146-08da-4e5e-bee7-c08456289b09": {"doc_hash": "4900278a18ff83150524d1c174793ef81cbd277ca31ba3c49c44d6e897f9f47f"}, "575f2d11-d731-47d2-ac53-6fb66fcfba4f": {"doc_hash": "b87f2ac440263726809e5d80bfc8542e5f4462267e7a4c87c1099338104fa5cb"}, "fc76e065-cd9a-477d-bdbc-8b4ee513fbb1": {"doc_hash": "f3db8bb93db64684a0ca79eb6ff6575625dd948cc0d050851a398c3e68a8f8c9"}, "e9fee1c7-0f03-454e-8c49-4aa4c54980fe": {"doc_hash": "b9e0fc3415f14ed11c88b4c292309846e8d83d110613da3169f2c35cd92386ac"}, "4bd5360e-180f-4515-af78-3351033db5cd": {"doc_hash": "05caa0292d9060b6456d6ca680b2beb9c29813c2cc2095348c063cf3b90de503"}, "b562eff1-8611-4a50-9cae-734517aaaba6": {"doc_hash": "78e5711190f872941a4e0063d61f687874fc72f36436a96f85ff02db2873d2b2"}, "cd1debd8-c3aa-4c88-a574-047a013dada4": {"doc_hash": "2ffa926e05bca8eb814f8710d970bb551398dc133914e254fd31eb69f33baa72"}, "92a40f89-2155-455d-b05a-89b585944884": {"doc_hash": "0d53c42707aa862b5946325b4e0b3bdf1d002d9d37c5ee2d9c32cfca0641cdd9"}, "a08a4887-bebe-4910-a559-29469701d3bd": {"doc_hash": "91ddeb461cf35961c425823aaaeebb7afcc9e7c031a32d75f409eb95952ada90"}, "ae4786c2-b8c6-4b78-b1ce-4bc15a04f6cb": {"doc_hash": "c54147b827fd7e6e4a76e7abb069f6ff72ceaa62525f190e026d980c30140b33"}, "23fa9e9f-f346-4c66-a40a-6ebaac43783a": {"doc_hash": "42f0d7406cb23fca12a5c6232ee2e8c99736f86d9bf98cc2d260ee5299139625"}, "2d91f457-af7b-482c-87c2-bb6c5951eeb6": {"doc_hash": "b9412f8887bbe6cfba0c6aab68112bf7dc8d0405750dc95ec8c5402f3af910a9"}, "4fdd7801-f42e-4314-a8bf-54ab7349d058": {"doc_hash": "78698da552489c3422ee8f0319c987ff101a9e098f6dbdd8b1d113cb5fa5af84"}, "562d8c23-f0de-4efa-bb19-3f8dbfc4e739": {"doc_hash": "1a084ca44488de516da882f21c4d7bcd84ea1004581b4b2373485df440474db0"}, "329513eb-9027-4f77-a34d-9691b4b55308": {"doc_hash": "c54b833fc7cbf59b192a9f857717e85648138c7ff41f0890f0b7dc2e8c40cc2f"}, "ecae360b-ffea-4275-9cf2-c9348f9912d1": {"doc_hash": "e8d7572b5806fae0f9abc7f8e0901e86bf8109b2543d06063a97df03a4f37dc0"}, "ba46548f-c0e3-42b1-91bd-1edcfdb78f64": {"doc_hash": "8a92a9a698c3657ce8e0548181953c8166c06e70d2a5c601a9ef83ec798a2a79"}, "ea686be8-b317-47f8-bce2-f5f58a9ff1b5": {"doc_hash": "a26bc357f66b1594f400986d8bc274002a3ad91b0a0701c9667e3261fe210714"}, "118f7e01-ba0b-4828-ae19-5afe6c94367a": {"doc_hash": "242ec8619c13b243ce27dab892dc3231529bc641535f7fd14b806f5586f4bc1b"}, "22b30988-4276-4847-a318-d41456d456a5": {"doc_hash": "f1e832760c65bbe3c0cc578daa5a3547157bd2b597c9cdf4cfad26aef2da01e2"}, "689e2465-c0e9-46d9-b7d0-9c7cab6543dd": {"doc_hash": "e283be842cd3a028a14399df921e059d830337e52ff81134130bd0710420266d"}, "ca7589bb-9b3e-4601-804d-28498152a7ad": {"doc_hash": "ec0818acdb4472201e9a0e1a82e7e2e5b7d36c36c59986f14e375224bc24d8bd"}, "89e98d9b-081a-42da-9d8b-91abcd90bf1f": {"doc_hash": "6ae6f071220dc1126d3c8e19379cbee907c3e0fd7ed0610f5f942df4e4a1b2a9"}, "fd17eb08-fc20-4a90-a4a1-c3b4cf6b89bd": {"doc_hash": "d3481f75e91b11b8e9b6627e938dcaec88821d8cf84c22909eb9ac020b760f5a"}, "4d98d23d-c42f-444b-9323-1fe97baca94e": {"doc_hash": "8b7a172bd1572cac5d70792c4db6b28dc3e7d17b3ab11432b13abbb5bcbbcc75"}, "8ec72078-d96d-4747-a4e2-a7daacc332a8": {"doc_hash": "e701bff97cb0eb3f30ef9d4c1f47d168856941f9958197028f51d0a69228361b"}, "794ad272-a4d7-44e7-a22f-46892474b952": {"doc_hash": "cb30e04d7528be39f7bf7af26a4eed135a0eba6deba6d5824b331e1b1d1c2d44"}, "a32121c2-7242-410d-98fe-f2d81d8e58c7": {"doc_hash": "1ade6ff7d0d9049aa8ecdb80a502e91348b3ef78668b85ed91f3b473cb518f72"}, "429c284f-4fe9-480e-ab19-d64267de40ec": {"doc_hash": "cb84be251633265d661ae667b03f02c25a1de6058d528b14a1e6283b8835fee0"}, "9d36db84-fefe-4e6d-8034-9eb0e37c55fd": {"doc_hash": "c3001970a23acfea666405edbf730aec4cc231409b420a61d4b14273a7042b17"}, "42781a21-7024-426e-83ba-4af0bb4387b4": {"doc_hash": "b4d7feac49c326d388314951d2399caaba500e626ca697bf76aa3f3f6f586bdd"}, "c9587028-18dc-4835-b0ca-e2efcf7e12a9": {"doc_hash": "e08a13977ca67440731402493d8b6d1464f59d3d08546fb2ab9bb955628c3c99"}, "5200c3ed-ecad-48ae-a6fc-9e49e59a386d": {"doc_hash": "72eb7a8fa8875336815dc4cb9835f79c7024ece8902035570186fe4d951023bd"}, "8ab592e8-7178-4b82-ab4e-e27508a21501": {"doc_hash": "f7e53ac2da19139d50275cda0321ca7494f991dfa5d294023e34300c680c3be9"}, "fc139323-ae7e-4f71-a7d9-089bb416b7d2": {"doc_hash": "91303b63e46247e6bd480b334b5e517070fc6b7d07a51652ad2416279820645e"}, "880463eb-8565-4a9f-9410-927a8e0084eb": {"doc_hash": "d472367c00c8eb2942ac1316fe4e6f614ce61f6d06552aa2a13aa2423a4bc3f7"}, "650aaba2-9ff6-49ca-9da9-5b6941e2e460": {"doc_hash": "30eee91942114d19de897f0df884b340070fc9c925c55eba4f9939fbc53a1be3"}, "65067d81-e80a-49d0-be37-bdbeb86477c3": {"doc_hash": "975cdf3374a76dc5668adb121146af2eaa3d984bfe30d718ee1a6bb9c0ba0016"}, "1c3dbc12-03a8-4b38-8cfe-d3260f3aead2": {"doc_hash": "520c48c1f1ab50dfb39302c6b37a5ace935f8dc2a21201c7b46562bdb63588d6"}, "5f6e090d-e6ab-44ea-b030-63a0b81e5890": {"doc_hash": "45b31987465e0446fb6c01de9397d1fe0b6ee9c41130234dedaf5466bfb98b2c"}, "3c25db0f-0efe-4641-85b8-41f37d34f11a": {"doc_hash": "4a53e8b7663c93d0457ee74866c878dcdd287902b5f3b746d8058f68f86b7ee4"}, "80a26ef5-2152-438d-93f2-e99d0ff385e8": {"doc_hash": "0ed35caa7d5eae5510476e0de40c6a5e571ca7e0650853ed2c74f096fa652080"}, "f6f0a271-e590-4481-bbda-1673f8911af6": {"doc_hash": "2d62b75a80dffad011a8132e2eb67a53866fd23c295b7d6c1d258cc0a8bebf14"}, "c92c3ba1-c02f-415f-bacf-a21086a8ca30": {"doc_hash": "da848cdbe93d5d14c09a75892a58e663ac760645a4800dc46ef25fcfd46178cb"}, "82817cec-6ca7-41d4-b42f-2dae2f0b112a": {"doc_hash": "458f9b8825d9c1c43f663727e1b7edca1c883478839f270f97097011d26cf325"}, "25e80a7a-ab4e-4d67-801b-ed1dd66320d5": {"doc_hash": "ac2ea6da5a28ed3a4eb79e285991fa85e20af6872a7496170becc1347efa7cc1"}, "e9acb4f4-88b6-4ea0-bc71-4e926e70a931": {"doc_hash": "6b78e68a0cef586221824fbbafb7ddadad4c01b838aaf46378515b0b403a11eb"}, "d80eceb6-ebb8-4704-84e2-c4e31aea85cc": {"doc_hash": "b250783bbffcb0c54a985d72e6422ff5d956a661be6adfaab03da5084307f6a0"}, "3bd05c2a-98f0-43bb-9c18-068045afbd73": {"doc_hash": "49655146bb810e1b8bc09f2117d8d0fe9b421cc14cc496497dd2e39a08230c00"}, "a2824579-7f5c-4154-ad0c-5f4a8497bb6f": {"doc_hash": "ddf81baa3d939d34e5670b875109ec02d2747fbd8bcd21e360f3eaeb19c66b26"}, "06c7b0d7-c250-47a7-b208-4988b241d811": {"doc_hash": "f526e58dfb9a5efb7d564e5de9070e75068601fce121d48f1ed06b95e92f9f2f"}, "b0e5baa2-f02b-4bfc-9d28-1b2505e3f73e": {"doc_hash": "4bf9db522c66f39776d82eda7764e28e8dcb489a5dd01850a2feee0f3e77da0c"}, "2d97bbc7-d34d-4676-9c49-2bebce8cde61": {"doc_hash": "2c08f0fc97dc465086fd2b43f6aedf6296d41306f419089ff390162ebf4c319e"}, "c96dd937-7ac2-4451-ad25-f023d0883c0a": {"doc_hash": "4bc5bbcbad965c0d6f00de823a317fe857f1fdc080e15bc1f5fcabfc8d4ad347"}, "830305c3-609b-4801-9adc-005c67d22cc6": {"doc_hash": "208aa82e3992d7f287d5a71009054cb01e141e24e81d4412bb31649f55a7be5d"}, "f9abceb8-bdf5-4600-a217-efd48276f962": {"doc_hash": "971c03e4df8b6205d13bc06d45f24839950318840c6e944917dd8b94612ee2fe"}, "dbc6a8ca-6079-4a3f-9f79-ef586620a4ab": {"doc_hash": "4401d264b32ea801a52035c47adab53a3289c071c2ea461ce23518c538206b2d"}, "471e4d15-b9dd-4fc2-a696-b406755c55df": {"doc_hash": "3e1f72b5042e6f4eb7d737dbd8358501d8ce0ca8c3cf1652392842dbd6fa51c9"}, "acffaf91-caa0-4d73-a07d-c749c5bcda6f": {"doc_hash": "e4121c9f72d5334c4754a235a6f765fa9a27f61aeac3106d006ceb49028c465c"}, "6f2844c6-fd21-482c-b18c-3dbb1b3d3520": {"doc_hash": "3b1d40c90888f4058993d9d39071e88ee9456d6415ea3fc6879ee19024de3e55"}, "fab66206-335d-4130-bf81-df3daaacbd2a": {"doc_hash": "19f6c5c53578047d587cdee2725107df7448e0d9e0f7a01db3081a74dfd40ff8"}, "91a0e099-9352-43c9-be28-b097c6948ccd": {"doc_hash": "d258fe920f955145baaefa83e56680f67f322ece9ae5949c63c43aeeaa7d3dca"}, "e373490c-63ab-4a0a-9468-52bb59feb4eb": {"doc_hash": "5b65523af85631f074573cda0557bda6a9206030a44c798f776b2dd4744a3ef0"}, "ffa06323-0f28-4158-858e-420adb2b52ee": {"doc_hash": "49662bfe000cf4c13eb790b2510fca690db9ea42422a8ae9a4b6a5ad827142a8"}, "18cb1284-786a-4c85-b1d9-3be29b41e3d8": {"doc_hash": "88671d2a22893084f777d699da9a3a8f9209066bd977563c3cb06c210f1a88f4"}, "895ce90e-7271-45ca-99a1-6b64e506194e": {"doc_hash": "736b94d45a22c7198b4e7056a250a403c759c6e63c02e5d0900d7e2e6013e4ea"}, "983665e5-b3c8-4f2c-9cf5-642420dca2fb": {"doc_hash": "e9e05e98f866ced25f82a884ad48a9645a7241d4eb5f6b1ed9ba3f4e324cd247"}, "574ad8ba-e6f0-46f6-aa1c-b3540f8ef1d5": {"doc_hash": "e6b5c6da55faee6f31e2ce374fef78511b2532e86e947bad6c89761fd4851961"}, "47712a70-0e42-4e57-b314-df6893743083": {"doc_hash": "d1456deae198fd97f5ae1801611d14cbe6f3741c6b3476317e64d6c5bad20dc2"}, "67fb5e22-830d-4357-b7b1-24aa423c671c": {"doc_hash": "6f7a48149b09dbe2e05683223664b842f77e008fbcc4f40ec8e43fb1753aa1a0"}, "31286cb6-e92b-459b-8a12-1b78d8a964a5": {"doc_hash": "accea5bc8beff43e64faff2a0d604926a739523b517c03ca0c47ae8006fa4cfe"}, "9cfe2d17-5416-4b9f-aa4f-9d99f68bca8c": {"doc_hash": "8bc854ce983a3c79f63986725af21d33eacca61fc3ffd78167a949f772c5d211"}, "020699a9-b701-46b2-a642-b577f16ab28c": {"doc_hash": "770bb6cefcfa42d3a8ccf682087e3b13c58bb193b30f7eb76e1582bbfc1eeaa6"}, "7a9e7e27-00b3-4beb-9aef-3d1b001d4be4": {"doc_hash": "ee39b349ddb1aed3d91c346bf62d2d60838527fce7000c8ee08d42fc76a5cc70"}, "a546c90b-f54a-4ead-a910-873dcbcf3679": {"doc_hash": "d317467d781773ecbbc68475f310eae5e7278f2583948045b84678c87d1c9d5f"}, "4f42f07a-0612-4806-b7f7-d8340894b052": {"doc_hash": "435a34353195897340f34f2a817b5279933ec83026c9fed9adca02f1029f27a1"}, "4a4c7a86-55ca-4fea-86b4-31b073c4c7a4": {"doc_hash": "bf0f5bbdf9c986e94f31a6aded84c3449336d4cecf029b853fe63ba87fc1d646"}, "c732afba-4e52-4c28-b884-4898cbbf8cdd": {"doc_hash": "1d98c86a8b66ca1a6b7b8b9cebd23d1701a62375a084293ef6d6e207eac97982"}, "2c5c2ddf-7e81-4453-bd3c-1820ccf464fe": {"doc_hash": "4f7e7ab09c2d53ee0271976525ac320989da3d733c6f2b66dc32619d329051ce"}, "c92d81c9-a929-45c3-a048-9a6079e2325c": {"doc_hash": "3094d4692805d73d7a8c148bc1ad6115b6298d0d9d89e3cad94f747db99746d8"}, "d5489249-da51-4c41-99b0-7272b2fd55db": {"doc_hash": "65a0a541cbb6308acb633bb864ad071722ed34429418cae538ac0b9964751835"}, "45d2774f-fd5e-422f-889e-9b49ebe8aabb": {"doc_hash": "56839438c414deb64c6dd5181120e904be769a95c76debb7c4f502c8e8fcb293"}, "f0b615a9-16af-4b1e-88b9-7851aff8a6bf": {"doc_hash": "19cb8dd5a5bbfe32c53a215b6b2d0f959544eb9a36a91bb7a619a0c44b9ff4e1"}, "782dd48e-91d1-4ac3-8964-5c039488bebe": {"doc_hash": "91cab62321ca6f983969d87b97ead05116a1ee884aed172ca3f49f5b7c7c74af"}, "13f9a580-e911-46b8-942f-a573c653285e": {"doc_hash": "d6703d77b46c6bd81d7d6f328f3b35fda9b7aacd5773f562cd9cbe0945d9cf3a"}, "91261279-84e1-4e31-8385-422fc05bf691": {"doc_hash": "f8f081c9d8632f656cfddcdbf59deabfecad450e9d09bd0f6c6b15fc9219b187"}, "baeede9e-dd88-42be-8318-e867b5f18e1b": {"doc_hash": "59fedf9efc64752147623a677484a8d4e4aa5af0bae3859a7445223b0014ff0a"}, "4a61b464-204b-4c5d-a1cd-4a2e8d2ec383": {"doc_hash": "ce566594650788d4f831279d4a5b443896f049a10640c3f0a2a339129f81b564"}, "a59bee68-7978-4dea-b538-21f517b45231": {"doc_hash": "8c43b94de8f279b3fcfd4e307d82c6e2fcb223120977d0520030546341ef7ff6"}, "6e7782fa-7c64-4be6-b1a8-b775384c6045": {"doc_hash": "c6c88ad4948aea2d92157a3f2eb18688450cc5ae85898a008e46ec4a71f607e2"}, "cf46b441-f121-4ceb-b962-533de2ab09ef": {"doc_hash": "33bb082e5576c0878201d8bee0087732cfd3b737c16baae83f69f738f8b2c5ec"}, "b7c22205-d09c-4c1b-8769-27187f8f8f3c": {"doc_hash": "560af1c5b50f59b1d7f3c08f266daa85c667d344a926b23c7279df6fdb74653f"}, "1b5246dc-12b7-4622-adbb-65c56b283528": {"doc_hash": "4899f4f66cf4084d39842e44f80029d7bf638e21e8c7de865edd7b8838420a84"}, "0f09bfc6-d04a-40da-ae1c-216cd687c2a8": {"doc_hash": "52487f3fb76ac0494118d804e073c395f77fee91b6f7056100423400241c997f"}, "301b59e1-7bfd-424e-bbea-c78435a4e74f": {"doc_hash": "62fb9d63a3c63fadfb75c9c8f0b34c34765e2fb92c592829693346f8d7997750"}, "4c3acf80-a37c-4608-b91f-7d138698cc39": {"doc_hash": "6750fcc0def7bd3bcae117a589d07b0acf905676f5649aca9ac088d42d9a965c"}, "6a94ba21-36ed-4666-b23d-68c960f0e51f": {"doc_hash": "b7e99a43b400db6f71762d416ab66b2cc2cf55dd917330607d124596d5da1004"}, "a796ce72-4b56-4e6b-9153-af284fec00ff": {"doc_hash": "aa8d1fa1df7c36296a2246250ce36d8733241e4bbc7c3aa539632eeb955779e7"}, "e415bf5b-c8df-4d49-8f9e-929870e90d82": {"doc_hash": "d00fd6ef89f5ea2923479744da0b9f894e35b9001f7ed2707fe806c0fa93ea6e"}, "26d95543-2609-44ca-a060-642c622650a6": {"doc_hash": "95f50e5c0409396c2ef331706666579d7a2c30875be9a78c2f06884252e7ceeb"}, "9f131792-ce60-4bd0-9d09-76c9faf87792": {"doc_hash": "17461c22e380a486e3c23fee27fed720147322474788e657b3965ed3e6965c1e"}, "3233a8d8-e958-4023-9cd3-e31a1fe713cc": {"doc_hash": "ec694bd200db97c8af8c3057c666c48f4c511fb01a7950d83ea4a3460cd7029d"}, "fcc46606-2a7c-4b00-8e9c-02ef0088ec48": {"doc_hash": "722573918b7255b910ea5d28723fdf2a686783449210b829f345771a96e4df60"}, "9a689495-cd44-40f8-8713-1e688b3fea5a": {"doc_hash": "c6fd5001dcec4b3fc27eb568eb964090ac4c7d479eaee7a33c6cb91ea2a3fa2e"}, "23a4e7cf-847d-4167-887a-9503eebeb38c": {"doc_hash": "fc9649da7f3b7085a9f1ff68066b781792802ab038059b5bdb5b4a09b5ec59f2"}, "073d7554-2822-495a-88c3-8181a0d96057": {"doc_hash": "46c0384c6ddb273ab8c019faa9ae00d409b136eed4238b242150834c0240cb56"}, "0861b705-526f-4ec5-8512-5a223a554697": {"doc_hash": "0e4c6c5124d7af643c07e11c9b598b44a02bce4d9272f656460c71609de1ae02"}, "299bdafd-87c1-43ad-ab20-1e15cea35998": {"doc_hash": "7c4d66618acf0e05fd6295dd5978d748556f7d61c158aa5fc5ba94e5d5c7fb4b"}, "86419b13-fe0b-4ebf-b289-7a76d092426f": {"doc_hash": "51290d1c48fa69d7e24562c57bafd2fa843cde1cb4d4b3c75502ddce5a79475f"}, "a0b3d243-a1be-478e-af7f-5cb685263367": {"doc_hash": "6f26ab1f0ee872218e94ca8da454bf45cd4efe43f3b87da7d8854bbec4ee112f"}, "fd270dac-04c1-4540-bad7-be889e6f13b6": {"doc_hash": "d7c3284297403aac1f328ef6772739dee8a786b9af12d9648bd23c9dfe70b557"}, "79cdcea3-4106-4852-af23-05376dc62149": {"doc_hash": "ed014e993f9382fd0ea277d53212969dd89c0515908fa7037f85b815dbbda55e"}, "14d5a4f1-97d4-4afa-b7e2-ce34b22ee040": {"doc_hash": "99bef9b47c0c4fca39c43cd7f88b0318e1138f6d018fb3777f9486b6a3ea483b"}, "c8c1849e-79b1-4ea8-9416-eadcf372d06d": {"doc_hash": "6b16b5790ae712a00173dfe659993be626648b8b61415d3de2554a6c78b8f82b"}, "c38b6e84-c14e-4c89-a98c-203da93122f2": {"doc_hash": "437fa8d4783dcc061f67987d9817240d6515401e36b5375ae77dc042c89a83a4"}, "24c147ae-2bd1-4716-89b2-a4ccd9964cfe": {"doc_hash": "a21fec4e8d1f51c20c22fcbeb373df6fac7f9800588e2a14d69b8c44ae7429d9"}, "cf158de9-7c38-42aa-a93f-23d893e79d03": {"doc_hash": "d03cbc0fda18cc88906259b2a6136676f3dec370dc8ab51e05bf22ef5894746d"}, "1afb2557-03af-4d8c-9e3f-91403f1e7a0f": {"doc_hash": "697f021cbf303f4ffb68590d9e922d28a015aad63af6d43b11e4f0da54e4c04d"}, "aa8a5db0-1399-4397-9812-efe1d991257f": {"doc_hash": "5e18322add8baf6919ba3c974c419a103015e5085965f3aab734fc346d1d8fa9"}, "96bc6cf5-071b-40f2-a18e-7228b28f954b": {"doc_hash": "6333708f61680c53e4f1f2f07460b6db427e500e5da8d33385c15dbec3266e4e"}, "e682343e-cde9-4486-b456-e475edfcbdfb": {"doc_hash": "8515a21915c7126b1ba1b1f16f624f1c5eec56751bf07bbcfd2b8953d85dba41"}, "2c0df155-53aa-42c6-a41c-1f606533b23d": {"doc_hash": "a4fdaf00b43d47823587177d5ad6b4bb339f46a2d0d7c80c656f7173afbdc062"}, "9090fba3-be99-400b-a1da-530771880f18": {"doc_hash": "b1133922333629505c600834bfcd9e6211b2230946a4575645c2947946a8b850"}, "c702bfd8-9800-49c7-92fb-b693c6145849": {"doc_hash": "ff2168e03d1432f34eb9dfd3fed752133d35bd0a795186abca66ca0ded499a64"}, "b0c6553b-33ee-4108-96ee-62f106037168": {"doc_hash": "7b88e8e7fcc5c922d4f2aa576b856ed3dbcf2ca514abf0662987851a15833874"}, "26481353-f152-4f38-9411-b83984780735": {"doc_hash": "8139899bf3ca5961891136dd4df8fc6feba23b23a029aad80bdf5bd4663a9028"}, "02d62435-c5fa-48cc-9f0e-fb7aeb8c728e": {"doc_hash": "5857c88f270c87679a05741f1f88736320ba27ec0d4e2bf69dcc00ff394df8f5"}, "e64df88d-e942-40b8-ab22-c5364989388f": {"doc_hash": "49af37af4013a1a1abe207b33d4ea183bb59dee33fa89a7b3a9a860cafbc9ccb"}, "6092dddd-47de-4263-b7fc-a3ecfecdb2cf": {"doc_hash": "57f4d65ad0e91fca0841e5fb3cc49388a74092dd83c6a6e4fe92851a43feeaf8"}, "6284aa5a-d57b-40b1-86ca-1dc2ddb4f77e": {"doc_hash": "78cd7c3b62ff70f5d719842bc34ee2a82e6f06f99b94422a533dc8cec9264932"}, "b62617e8-5b2e-4ecb-8f1f-43e6137f9488": {"doc_hash": "40904850d8c5a1634ec43661516e1e2da4f1021bac14ff00273982171a26f012"}, "c867a2ae-a7d9-425a-a1de-196b65d9b431": {"doc_hash": "8791ddce1b0f6879e8ef57b887d646ccedb9718db4f21a4cfb1f0a32464b1826"}, "a05b4cb2-113f-4bf3-be3c-04b7d84b88da": {"doc_hash": "6dcad74d5bbb565d526de14ad5e237acbf1c1191fad0976ba0a0c3c340775778"}, "12209d31-5909-44ad-841d-8d24c207b7fb": {"doc_hash": "ed1b7983a2030b18bd8d6a6d0c3dc407daf16fa70e864806a44a755e0c66f42e"}, "7df62fdd-2eaa-4daa-94b5-eb47e66a77d0": {"doc_hash": "7c753553b6baf825bdc4fc03054fc21f5d1f018baf96186d3a6589a3fefe7b1c"}, "ad712aa0-cfb6-477a-b7a8-f688e69bc2a6": {"doc_hash": "b220251ba34e95223795635959dd8130b3597c4fa175e5460d39675094b5ba1b"}, "9424c67c-0023-4cbb-a07b-55ddb2e96746": {"doc_hash": "dfb636a62cb8592a3b9141ffc7bcebf4cd0552f3e0f101734ed5876fd147eaba"}, "a59eff89-d205-408b-9480-3ac62d20ac25": {"doc_hash": "58bb067b34d85555013bdd050e9564d96596f1e374b9aa31e84a0e4940ecf411"}, "1052f264-49dd-47d2-a3d6-8443a6955451": {"doc_hash": "fbafa46e611d0a51514e01323a1d3635356e202bc646cd81ea0c852d1a3037ca"}, "f46a460e-58b5-46bd-a6b4-347d8650a1f3": {"doc_hash": "773174403f224ba7b60c37e8f7cbb67a416c0d55684d92b8f58f71a84e4adcc5"}, "ff3189ee-6cee-4ea0-af55-214386c4311e": {"doc_hash": "932575de5a9831053fbcb015ce79910aa7841e4b2e798281cefb254fdd68b503"}, "9f775235-b052-436e-9a44-029203885d7e": {"doc_hash": "43d0bfe3d9b81349eb199822fb93ede29b7eb65d13bff47fe0a8beeb3219dcea"}, "f9196c41-455c-440a-9fbd-4c48c23b1073": {"doc_hash": "b68ade13125f0566955fe72c95aceacffa85b741c94bf5d5e6d463969991aa38"}, "140c7a6d-d3b2-4654-94da-9c360bd4924a": {"doc_hash": "963c02b91a3e4699d96f09cd2d277b61407c457ce1fd0967df794a710800072b"}, "3fd70f57-777c-4642-8892-0ffefdcd50e6": {"doc_hash": "8df0828326c77529d7d48dc4d800d2af623c3c2dc9d7c12117793f2cc7d30a81"}, "3b30874b-f2b3-416b-9e10-2f652fab7ae2": {"doc_hash": "3df0b8589384b6b12b8782d0b90925dbd9293f9fce291bdbe44796f744d2ad67"}, "487b3eb8-8cab-406c-8060-a2e6e36a8ad8": {"doc_hash": "f9c89f2c8c196f5efb1e9b04968d02ef5290916efa81b68b2b5527e42b5ab462"}, "bcc9a12f-2bce-4e9b-b756-a2b1d08dad75": {"doc_hash": "bc55d83ab8ce0481d21a453d217570cb59f7a7ef10d5c5795d2f8439d523f603"}, "0a0fc459-8fe1-4b48-a380-b63513da438d": {"doc_hash": "f83a9a6a596accb5e159394585bde639cc904f5adcbb49f33f14c253707ac44b"}, "36bfac59-dc60-465f-b915-1005e705be87": {"doc_hash": "103fc844153a0346be4275221de5294dccd6cecb4475e86c98a23ad5b59ca2a7"}, "a74c4f60-ea99-49c7-a20a-06789922b60b": {"doc_hash": "1c4e6d0030bae7670f170047aec5344f92b14830a8a5f215cbab01f02a3eefc5"}, "fec25271-d813-41b3-b484-99b53b8fccfb": {"doc_hash": "6d1273455ccbef88a6266475b6d5066b07b3eb3d0ac70320661028beb4fa0964"}, "dd0a9c1d-115f-466a-bf74-24eeb03a0ba3": {"doc_hash": "6e672954390577b454118d671d77585a85642d7d0e7a1ba7ef0f3e4dd758864e"}, "b6b592f8-7b24-4370-a06c-86013706fef3": {"doc_hash": "b5fbe9cff189031aa7a61b5883dcb91a35fd179cbbeb56bd5cdfff47ad79dcf9"}, "7b5d463d-d3de-4791-a2fe-4a4dff9bb6b7": {"doc_hash": "8f093cdb5c891ff7e56572b3751b40d100fcd4f677278b0b486b48bb3fdc4da2"}, "3c91e7e0-16a3-4ccd-b7ab-d0d8c4d7eb5e": {"doc_hash": "0747b76c809224a95f1e50cd6745e41e89dcb1f653251cc1892e2b0d1941553b"}, "a8d0ae09-ac89-4e73-8aef-8b45d3e55522": {"doc_hash": "83510d7fc4669041068da7917eca48e48f3e76c9c55838d38b153a7e707494d5"}, "0382de30-f2cc-4207-b40e-c03dd9526da7": {"doc_hash": "c1e93070056ae007c9576869da4fc3061b0ec2ac7369bd03b4765ef940a844c7"}, "68f337d1-3425-4e8c-b46e-e92da8276b9b": {"doc_hash": "cec95f7763c417cd394fcd731b12ded8444afede5b728ff0052b96e23e723970"}, "376f03af-7831-4263-944f-067a8a739610": {"doc_hash": "1a0958f4b16b9d54b29fc0e261cc4a6d3ce72975e0b33c9dad58d66f6596f5b7"}, "65963bed-bac0-49d6-a9de-d65a242db975": {"doc_hash": "8cd784aa4d48e655be915ccd3fba59998b2e17301bd029042a9c966046bc2b50"}, "b43b6e13-0f5a-425d-9275-2729a955c844": {"doc_hash": "c6c9bc3ee5d9f30cf1695a0fd22eab041c9618e6f331837b21fc5ef28bb20d04"}, "29c3b60a-bb82-4527-bde0-350a15fbae8f": {"doc_hash": "ca5418686c1e3d287b5a76af89ed8e68449fde8f9a34cf6c79c09ba8c2b09979"}, "3d053e94-cef1-4380-b5b1-e0b0d51c5222": {"doc_hash": "6a768b6a239b2a2002c157ba75ecc5064deb53590ce980171d0bdf5f9ff2f68b"}, "313d1cc0-c831-4786-a0da-932c1fc8bc88": {"doc_hash": "64722774738db271b53fc3429d9da7c2bdeb25e754a9605050ca5effef5e022c"}, "35a7a5d5-29d2-44dd-9aa5-27639f970e07": {"doc_hash": "da3a9c4f1501aad098b811d5f867bae796d759e508624282d2510b714fd31106"}, "14b6087f-7eb1-4559-b618-81303dba6bad": {"doc_hash": "3dc43d13c7342ff5e7d0ede427e23bdf18e9f2f8f345043c3e0ff38d18a0aa54"}, "9023d277-fae0-45f5-95a6-6469aed88c6b": {"doc_hash": "64c0f27a4094faa1ec28d6d05e113fec6171be77417065a27cb5765643c7f395"}, "b94e7616-e08f-459d-b18e-d9c8cccc5c04": {"doc_hash": "ad6ee40311646c1db056c9daba05f63c36d295f60408a957ce46eda5f97ac3a2"}, "f190840c-f1c7-4a6c-9501-64b2db54a31f": {"doc_hash": "9ad9aa86fb9e0e8c4b07e7e23806ff35b36024f51942b09e89299c8a7c63bfcc"}, "849394fc-644f-4569-8500-914171e26ecf": {"doc_hash": "a439bd5607e3850c422f5c02e8f92a4ff0e992ffa5183a001db5616f9b10798c"}, "b5c10dbe-54b3-4806-8983-d3a98129a858": {"doc_hash": "802a145ecec00c7d07d321229d0935f0052ee1c0213dee2dc123e26c0710045d"}, "e356ac61-993e-4364-a94e-f7b445b0a58b": {"doc_hash": "4100937331eb2c9122da8b033e2db2eaf2b7fa152cbff789b2d1d2a02c95119b"}, "73ea29ac-969b-4aeb-9022-a5bd0df59e05": {"doc_hash": "5e81ad0c3cbf834523d751e957f7d86b8fa5ad433a3c735dff620e2d360649e8"}, "eac1c32c-3264-4aa1-bf3b-5fc59fa1b043": {"doc_hash": "75dcc93cda9d98aac3b0e1f2baf46440aa1d211b0ea96d35008fffac7ff7728f"}, "9526bc96-2551-4757-9b96-b103199d49a8": {"doc_hash": "b26eb11960a2073aebcd43375c3e43255e381674b26ddb7bd03d111a54f2a522"}, "8ea0761b-9bdc-4d7a-9681-d8639b64bec9": {"doc_hash": "82b406e9396035a5e84e246387d0ae359e704c964dc426bd5474f3e9f3d72376"}, "32061c73-6c51-4127-9f5e-6bb73e1ea3da": {"doc_hash": "8311d7f8511ffa4ef6dd69df845a8300ba4ab6b4fa8b1a3b409e89b356046ff8"}, "af10af35-89d4-4899-8f12-81ec55b469f6": {"doc_hash": "99fa66c7ecd5f16c774cdca267b49bc165e022ddb3b121006438d45fb75c2e42"}, "c663017c-a0f0-46d9-8375-9598f20f5bf8": {"doc_hash": "e3ba5cdf5f2f9647e2cd432c3e650090dd7d432b9132aca94983d1a77e68dd64"}, "d1de82e4-a7a6-4543-9d6d-42a010f1f92f": {"doc_hash": "a9ac0b75a0d942b7e24506163ad055524e2cd354dd5468eb941c5460a1b7c11b"}, "b296c27a-953f-49b2-943c-493f33ba628b": {"doc_hash": "434b3176b1dd17431d1b38486ea43ac8c04e61710d93d5cb0aff163b653a8d5a"}, "b2cbc931-737c-4e43-82b5-4787d6ff0a47": {"doc_hash": "bfbf485e70505108d0c876e206c0950ccec8c1364e60ac18be1419e086b40193"}, "433ec58a-41ab-4f6e-baa3-5537eec5d764": {"doc_hash": "b5388199e75e150223b0eb32c0f7ad29b30fd5c789e3137a3ec3f08fe9295257"}, "d3469469-a7dc-48a1-8114-c6ad60289b02": {"doc_hash": "f05b5ee7c855f519dcbc841c4ec14ab86d3763223bbe3b69f5ebe8fef12ce2ad"}, "92901df1-6b57-4508-9883-c67975b880bf": {"doc_hash": "8c1f6f0cfe72c8284b69c62220b76d1b21c29e54a3a92f9b5d08b8188fae99a0"}, "9bf6d0f4-f6c7-47ff-ab18-11ad9a806eaf": {"doc_hash": "d868fc194ce712ee6b0284d0a206ea736bd23bd4fbf76c761e1415751749815c"}, "c553e89a-8eff-46e3-9bf6-baeba39fb35e": {"doc_hash": "3a8514919aa0a592158c2d30616b3d402195e29ed625d5c9f82762fb95a661a4"}, "477b0431-83eb-48bc-9e40-157830569fb8": {"doc_hash": "1040eb382af8fd68a129b6d7b47e9c057b26a8b1748ebf24dd3e606cf698cf27"}, "654b897d-5ce5-4d9e-a1d6-375372571733": {"doc_hash": "5b47a585ab08fb88fdabb187a4f6461031abc7d520f1157d10e4e6eb52119b3e"}, "edf49ec4-4d0b-4505-bff6-39e537e5d32e": {"doc_hash": "2a688530da7ba6c4617c3def82bcef4e382997f5aba9f500594b5ecdf2fe8e33"}, "8cdddba1-58cc-48ab-a868-f85419425888": {"doc_hash": "91cf43ff0a215b03fe935ee8d45ddc58f44a2f612323dc7918e2360de2af217a"}, "3b6e9bd9-77e5-41ce-84a2-340f4dc22022": {"doc_hash": "5cfd0d1a43424ba2c03e1201cd21eb7858e538a6572c9c77a8251cbad821027b"}, "5305a6bb-8838-4138-a781-5f865e2a288a": {"doc_hash": "7b46f669af6d8845843ed77ea87b2c46cc55e6ef1570b65b8d84b2f8f4447b45"}, "5d74f000-553f-4673-b3d0-28cbababecea": {"doc_hash": "c367a1b958cae64cc10f96d52e36c1055d187842ea2ef2bab2b4655b47949d81"}, "fdd79aa2-d716-484a-a5fb-b48c5db3d5aa": {"doc_hash": "d4b84c29b9234aecc3c1d2c6b4e95b2e326a720be6bcd1b002e67536532f84f3"}, "89380637-7b41-45f2-94b6-102faa2120cc": {"doc_hash": "b286edb63251748ad1787d2612a7beb3580f2542d58e60fd436ed01692d4e5c9"}, "f86f8db1-8f12-42ea-8488-e1c3f148d78e": {"doc_hash": "86c9dff3d0990c11977faac041398bcc298865a87565fe3c6f2fab7270e1cf93"}, "b03e76c6-5dbd-4cc4-86b9-0c41fbb6e934": {"doc_hash": "b3f5ead26424da479f07b851d8f7884a6579283a452ee11a729e316500e78630"}, "a44778b6-04dc-4c57-9d08-5713937c5fef": {"doc_hash": "da500ecdb822af00abaac8f6b67339c0e7a4926934f6e07ba0007861697498ec"}, "3b2847fa-3592-4070-aa79-ae706c9bea34": {"doc_hash": "d124debb6191a74feee7a5c411b7f9a15e32a4dda66b06c3beb360af09daa160"}, "f79cdcab-543f-48e2-bb71-863126c6495c": {"doc_hash": "020a6b2b711dca006482b7c7861d4fe6c53cafb4473afa783203ab8ea4d1ab13"}, "f721df7a-b66d-4897-9ea3-08df3e5b20ed": {"doc_hash": "dbe3c44f8c35570651b6599905d4fb8b57b9948b0b811d9ace6e49e6d672fcce"}, "bf341016-cc1e-424a-8872-7ea2560af094": {"doc_hash": "60d4d445c6003a411a33e68107a6903e4765121d6c23416dd94a2d012c8293ce"}, "07352b2c-813b-41b2-b7cb-cabd91963b87": {"doc_hash": "db55241a3c27a252a45613d4e71d570d7b6d3cc783ad7b23a26acd7380950b8f"}, "98ecebcf-8483-4dff-99de-733175d15d8d": {"doc_hash": "67cccb22c1e341441e4da6b9136fe161c67712b76433aaa60b246a54dd0c7fbe"}, "bf851eec-2363-4255-bfce-6e5a2ce887d6": {"doc_hash": "024625182c3d58aeba705a62910070e125b5bfb11593628e9d420ffb52c1bf21"}, "9482f7ce-699b-4e10-9e1c-330a59a1ac13": {"doc_hash": "b0a6a178dd5b5d92fa9129df1d3563c372d0452e95f611b74e7b08606ba823bf"}, "d333ef46-2cbe-44c7-8cd2-7d22ef295230": {"doc_hash": "77eb5080390d37f8c78e8f9b30c241a193b3871fde2a9b6754af8a2f9be5501b"}, "d5899192-847d-48b4-8348-1000d74a02e0": {"doc_hash": "14e11cecf9789e68a642f9ed790223dc6202f0db10aa094ad6e05fe56d662df4"}, "00dff377-29bc-4669-8075-bfab96c2ca66": {"doc_hash": "697b1b890496d59a69c52f4a808c5774c2a33e6b8b5ecb3bb90bc85a4e6cc58f"}, "bf4d503a-d04e-42cd-8153-0ab8786dba05": {"doc_hash": "b82793a3fe1c4ca420c69dfa18e7cad10ec7a0020921d45e82a305a97f45da48"}, "5332aef8-8ef3-4fa0-b8ca-cdfbd77c062e": {"doc_hash": "2b0bdad8d206165168c7646223520e2b1ae50f16069327ff052cda58691b7976"}, "979f47ee-e5bb-433d-a991-5b92cb40f992": {"doc_hash": "a5aea25000e3eb556f8433c9a52dcad985bac4062e07a5971ca60952ecc4d537"}, "4281f524-bc7b-4554-b8b9-a13b304bc605": {"doc_hash": "3e23934de083decc93b7e5713acb6a49276fb34099215caad2168417e6ed706d"}, "6a0515f2-807e-4b4b-ac9a-376f6efe938c": {"doc_hash": "06224eebd7ad2af11066fc5cb97a31eb151d7086712c913bfc0f93fd3d361d6d"}, "de4298f5-fbc9-41a6-a59d-7c5f671d60a6": {"doc_hash": "550fe6b4d78972ce9848ef5556d04beca28ffa9ba436a1c8be13bd25bd403da3"}, "0c36b890-20db-4625-88fe-dc89dd530421": {"doc_hash": "689036fa73dfa6e867df1454c8032dea1443accee6c2b6d7ff2e1fc4da1a132c"}, "8e43b393-8712-4bd4-90e5-4e9f272248b2": {"doc_hash": "b5d2025b10520a50c2a6531c0c247ff9bb3c0c8835ecc8d974464899cf66b977"}, "0a2cac94-e3ae-430e-853e-96e87c7c4076": {"doc_hash": "dc30bb108aef1e560a7be1860d0cda1f265dd254f10f8e4f4915a918f930ace9"}, "563600d9-22df-4913-9ee8-0d844699b933": {"doc_hash": "b546987de0fa89d692f467b6ab28ebf0df900e32d1b18050cfd75ce717a7f5bc"}, "18c99039-ee9f-4928-8f54-809ac322b639": {"doc_hash": "95a81b9e8ea6389d830731524c0f20aadcd072582337a4d6838564b58d5c2ac5"}, "f846fa69-fbba-4bc4-b518-1fce147a6f1e": {"doc_hash": "a5151ad9b12d6ccf90a5b147b2ee43b65b20f7ab6d0b8e6a4044822e299f29b4"}, "a38742a5-fa61-4ae4-8eb4-a33df82b70dc": {"doc_hash": "22322cfcff119cafefc974bb06f16a85b59e06659233d64121518a73db88d043"}, "23480e28-694a-410e-8c32-c1564b42eb4b": {"doc_hash": "ef223873d41edf800992fb806e84e62350b7b29fbc562101cb116353f7d9f08e"}, "904cc442-d779-4828-9fb7-2b83100b2806": {"doc_hash": "f5a742398a90932f81a00e5cf3d2c345d72e2856b2783d119d9fbe83a36a4271"}, "905c92b8-d357-4515-b79e-5bff0111919b": {"doc_hash": "1b6944291962aa8a889d2c5bc5c242af221ae74ee49e46389dd2211013831c59"}, "38cd58e3-b09e-44e0-94b1-3423dce4b9f8": {"doc_hash": "cdf1fd97ab65aeb50067f0aa89d781ede4a0685fafc25f76c5c301c2fe085e5a"}, "a795fad3-2212-4e02-9e00-514efac487c5": {"doc_hash": "79cdad4aee34ccd5e70c0630f42832e3e28d74e298e2b851db001bb3f14d3b87"}, "2e108bd3-c332-42da-98dd-21c0e7067bc3": {"doc_hash": "f6fee3f79b3378dfa594ba5d4f3fb8e1be81b93c9729db371f175df76d3d64ec"}, "44a4516f-48d8-42b6-bb6f-58a4abfdeb9d": {"doc_hash": "07a2bd7e2ef10d84ff7380e267deb7647a29a19b86afe041e549c16aa94e8ae7", "ref_doc_id": "e06d7e7e-a58b-461c-9f03-8b7a580fc463"}, "79fd0146-12d1-4ff1-8076-8f75c79acb1d": {"doc_hash": "6a43a8f02b5c6ffa823ba62af1b7fa5f7d8c3818184dd4a342c1ba5a295638b8", "ref_doc_id": "6422cd60-2321-4f9f-a31e-adf7b3c8e342"}, "0aa9bd7a-3e07-47d1-a24c-ad2461cf4652": {"doc_hash": "ff3925b68cff67ee84958a61fadd1219d8d62ddde352d591f689a912e92b0fd3", "ref_doc_id": "ccea239e-3278-4217-bcc7-0073fb4c1414"}, "404efbc0-6dbc-487a-9427-d3e70df83c98": {"doc_hash": "295f590381673bbbd11f4fc7c29b0034ccbdedbbb961ba3eeab58e383088e74e", "ref_doc_id": "792f02b9-7eb7-471d-aaa6-f6169baedd5d"}, "3f0421dc-ab65-4734-a71c-4dc7aa417ed4": {"doc_hash": "20bf381c5320382a6d274308d967e50d5abd0fe7e90ce698c55b461768b8bd41", "ref_doc_id": "2fc29119-41e0-4bbc-afb7-4ab7cf1e3246"}, "811e87e4-fa91-4575-8784-703dbf9d7e71": {"doc_hash": "0e1ac5f3956ffea26ee1ee0adf850f380841f76deac6fe8b0817b02370a3b678", "ref_doc_id": "09266a16-fa2a-4050-a53b-4a3b45e4ffe1"}, "9a2db097-d90e-43cf-abd6-c353f326e1b1": {"doc_hash": "ed06e8e4f98cfaf70b1520dd84c6b17472997d6f6ad0e05af922479228d6dd99", "ref_doc_id": "c9eacbf1-9acb-4280-baf9-e66191bd1537"}, "918db2c8-8ecd-4aa4-b8ea-cd5b2eade6c4": {"doc_hash": "8e8e785cdd1020e5c9aa5148ec64e9c4a9cd2ab63529aaa4c9d273f856f1cb92", "ref_doc_id": "896d0f91-b641-4b85-92e0-2cbb50067abb"}, "316ddb63-1bd0-4ae5-a43b-a146fdae8048": {"doc_hash": "42c8a936b4a09ea90a07a4981b614e5964aad8c064327df2d75f96ef779143ac", "ref_doc_id": "7fe48277-beda-4d44-8b8f-97dd5e58eba5"}, "606690fa-f540-43bc-a6c5-9189b00cd867": {"doc_hash": "8a7cb62e429868b21cd4759fd61330118e84b24b21be90d4a343193052041262", "ref_doc_id": "53dbe867-ff8e-4766-bec3-82ceb839b2ae"}, "747b4f88-e0a2-4b3d-83b1-a628af1df150": {"doc_hash": "2839c297db3dbef7b928bc250b015beed5fb9d8306fa7b836df584aa67d08733", "ref_doc_id": "fba38f01-4c6f-44a2-980c-196e7ca81b26"}, "158d60a9-2cb1-4bb7-ad16-fe7edaf6a03c": {"doc_hash": "c4d9d7a6475e9c0be0d6458f9f6343049ef08b93da861d03e1f753cf6a94e78d", "ref_doc_id": "418558c8-88f2-45b7-9d76-49d3c67ea76d"}, "7aa6e472-c355-4fb6-857f-c2f67d407d01": {"doc_hash": "3b7af8a2d1a94824e987670ab7e65b7bd6931f79757fabdffa7eef38e23a4b48", "ref_doc_id": "c587750e-9ec3-48b3-b9f2-b450db98e029"}, "dbbe38c3-bf2e-4108-bf15-c347dee401c4": {"doc_hash": "26546788f48102f9c31e4699bd7f4a7617fd3f7f3640857187fbebe58f4c6784", "ref_doc_id": "e881be5a-63d4-4f1b-a997-10fac13decea"}, "408c6a88-fd3f-48c9-9bd4-a59b52643002": {"doc_hash": "57aed1a20b5fc157b5d8cb801485c3b39e86914ca1d3474f4746f74c6e555ec9", "ref_doc_id": "d50c5b18-20d1-4d72-9666-c534ccfba462"}, "08e345af-cf1a-4376-bc95-e1ce041ffa59": {"doc_hash": "4ea422499b029101e20b28e3ed9be4443d64917d261bd3c7fe709febc9abe1ba", "ref_doc_id": "0cba35c9-da6c-48dd-b73c-684131dea98e"}, "8149ef63-c626-4ba9-8054-4a976acb6c70": {"doc_hash": "173b92997ba743e1b1e602149b2267fea04786822d36eb2f385b4c32ec92b0a5", "ref_doc_id": "f77de622-da90-4b79-bc65-9e201d49e4c9"}, "20632824-8363-4f70-8edf-a3eee67a88df": {"doc_hash": "ed04292cd915aee6bc0e1cbcc4c8423a111eaa65c7d26eff5017a2d054ad2e3d", "ref_doc_id": "863d7868-1ee3-4f05-9c72-7f1d46d6b063"}, "fab85794-b25e-42fd-80a1-12ff155a0e75": {"doc_hash": "41b351a15456eab65eaf17b816d66d3dc31436586d3762e6f7df2ad1b9b66426", "ref_doc_id": "1ebe5d60-f409-4869-abad-ae26365cdfbf"}, "37c9f66a-a80b-4682-bbd1-50387e9a6a77": {"doc_hash": "808437018c57e7921c625f9051d0da8f8c9a1985f722280e6ce9a47f11c532a5", "ref_doc_id": "ae3d3124-9227-44ba-8f9b-cecee8cc8e90"}, "15e06973-1d82-438d-b49e-f9de36ee61e2": {"doc_hash": "d4429c5d68f6efd806831d9f6835611a02350d5a5dda4f6901f269a6ae48eb5f", "ref_doc_id": "c9158297-daf8-44a4-9e31-13e2b745892f"}, "5312e1a3-76ba-4036-b69c-bf96300845e6": {"doc_hash": "0a9fbef9818aec38a2bfe9442189d6793f7f4419cc0141895dafa26c3ae85873", "ref_doc_id": "2e64b9d1-c1a2-41c4-9ceb-84f483cebdb0"}, "e80be110-19c2-42ba-b0cc-a1b73b00b842": {"doc_hash": "1d40aa007928fbbd4ace8eda841e64f800e131b84f592306e44bf50f4fb9a44a", "ref_doc_id": "e6b87de4-a158-4cd9-9322-300f432d0fe8"}, "9c54f287-5e66-40e8-9659-53c0b2d97e5a": {"doc_hash": "ac2b60951c7a891e019cec739731f35b325c27d80f9a3459cafaf5bed7b56fe6", "ref_doc_id": "ecfc2bb7-15c6-4952-a843-21830b4d4653"}, "b7ae6035-c87a-4955-821f-dc4a5d75a757": {"doc_hash": "cd0e1f2b2b51f6f97c0157a91c423a6482ad4d0354b2a1bf50c8c4a31d1c87d4", "ref_doc_id": "abd01412-a2a5-4888-ab54-d9db0e07d473"}, "14ec1988-cadc-4a9d-871e-e8ca9ef2a9c5": {"doc_hash": "eae9763a9150b579aec93662638350d930600286f0c530294305525dbc8b87b9", "ref_doc_id": "9c5efe40-56b8-488b-9dbc-d097c4258d68"}, "282bccf3-bb38-419b-b50f-ee9038aa356a": {"doc_hash": "d2722852d25a990d31b23112f14cee4e6bcac4e8b45067a26781aa71487b8e22", "ref_doc_id": "cc5aebbf-45ea-4b83-99f3-fff6be1134aa"}, "51c8feb3-82b1-42fd-abb6-0ccc4087b037": {"doc_hash": "ce471a0414fe044691fc2334d7a15786fcfb3f5dfd2abefbfbef2489ee7ed14c", "ref_doc_id": "e2e91905-2d15-4b55-99df-347d83fca3c3"}, "74e730ee-cd69-4dea-bca1-b54c34843a63": {"doc_hash": "b45c9b73458621e561205872e24130cf29114dcfb71b30605c68c083e1c1d314", "ref_doc_id": "fd7e1852-c001-4a86-9e09-d4121cee3ee4"}, "4243b66a-f986-49a0-b011-80bc8d4afb8e": {"doc_hash": "3273e85bd78febcd2fa2b9b1b89ca6bb8f66d99d221722618bb02b054f45d324", "ref_doc_id": "a94cf763-fe6d-4566-862a-410f8b003402"}, "13b1e20f-33e4-412e-a321-883f3ce20ed3": {"doc_hash": "cc2e6fd1b16fd031c19bca44f40ab3db691206307656705fc90c200c61c92fe8", "ref_doc_id": "09b608c2-3577-4bab-bf3e-3a03bb544e46"}, "907d84ae-2ee9-4d8d-8ee9-09be239c6cf1": {"doc_hash": "0a4878c85e8be4f514aec542d3fed321abc0d5f22c310a95c7db6d711da20c6a", "ref_doc_id": "5a6a7bc1-484f-4e11-a4a0-107029a66dab"}, "5503f188-0cae-411d-9af9-847ab0174b2f": {"doc_hash": "136a1a547282fd69903215f206618c58c744f02ff4545101ff475aa2371a4563", "ref_doc_id": "9ec3b70a-384a-4198-91a9-663c1bddfa62"}, "4d164f9c-d54b-483f-a407-f4fe77c1497e": {"doc_hash": "2c1c27cf6142ef316c23813d461f01342688da2b2d303a34945ade92b05cb7be", "ref_doc_id": "8ae4db16-e834-4b63-aec6-9011df4709ee"}, "5b151807-7f0f-4714-bcbc-2dddac11f51e": {"doc_hash": "a69d53d5f786deb9e1ad3a244ce4f99c21e9ded78c198223a890620fb581fcc3", "ref_doc_id": "663b1118-ae46-4bb4-b163-08946d6a6b1c"}, "8cfb7d45-d5a3-4bd9-bdef-6a0dc01a716a": {"doc_hash": "002a52e26e7b788eccbe206d3c4350d1c865c2102c36e7a32827d8d969d6e625", "ref_doc_id": "e7a0c189-4d0a-4efc-b233-349b6ab3c921"}, "e5cb788e-d634-4036-894b-bf41c5e5f0fb": {"doc_hash": "a16932a37ab7e9024f8c88c22af40da0caf56aadd76c28b91a9ae45c407260c1", "ref_doc_id": "e49e07c8-fa6d-43d7-bfe5-5ba466d699af"}, "4365179e-5f3f-413c-8298-c317e4f6b258": {"doc_hash": "2b54acb4267957251ed3caa48166799829c1f8322849fd8e0302f73d0dfe0121", "ref_doc_id": "6afb2918-29ff-45a0-a112-5c1e52ad55f8"}, "9c25c837-77f6-4484-ace7-83bcf13359b2": {"doc_hash": "5272018e7c28c2d7d57fbc43ad2fbc7399b2c31edf6ab6a2b1e9d1cf72332bfc", "ref_doc_id": "7e2cd070-64de-47c6-9c59-08abdadc6e09"}, "3a5e9ce1-f4bf-4d32-b294-55e1ca70dcea": {"doc_hash": "78509875209e6bc520dc8a80555a1f00712063ed3b445c5cee8bd819ca42aaba", "ref_doc_id": "466e5638-cb89-40c1-aae6-8b70d4e32850"}, "fe1eca56-8850-4f09-bd4b-025ccd7d7e7a": {"doc_hash": "12724aecadbb1892cf1e40299b9543c90c57b54cace1d2c4a0237b651c440864", "ref_doc_id": "92e08c50-d71b-465b-b044-385d76199562"}, "4f59d11a-e974-40bc-b0ce-92426e2931a5": {"doc_hash": "43ff6f070cd5215b40e7382b3717f2ed6f23b0901f7db1956283bdcbd476f953", "ref_doc_id": "d9a6cdc6-aa63-4e03-bfac-55f337cc53bd"}, "83c7e97e-5bf0-4fc1-89db-e9b58f9f631f": {"doc_hash": "df6afdcf22ed43c07b14642337b89ee2af12a5f51a8c062ddb1770e01b9a6875", "ref_doc_id": "02ceb922-196e-4b77-bd0c-ddc4fdff10f4"}, "3e5c864f-81ad-4b67-86b0-bbf441b39054": {"doc_hash": "0a9be2c5cb8a0352fc13f0e3e13903bd739c181748d6ac1ef58c8feb0409daf1", "ref_doc_id": "f1c8d298-ef17-431f-8f56-2836c26e0fe9"}, "bc9e6995-a6b4-4297-b953-826146df086b": {"doc_hash": "6cbb08918feae9bc0793f4d83fbcc7d1ed7b3648ccd335772e6d1827a6736f53", "ref_doc_id": "d5680555-aadb-4a8e-848f-561df3f363dd"}, "4bb432bb-0036-4fb8-b191-a93268da5a7b": {"doc_hash": "6a2b84d2639f46d732e8a518fab2f49013285fb4d731c43482d2cf3876e4f975", "ref_doc_id": "ec1bb5c9-11a4-4c14-a876-01b8e1173080"}, "27c87490-8903-4584-91e9-0b20309c8153": {"doc_hash": "4944d67ae5c42cf4ce030dbf7c386305cd850997ff73d81268920337ebf95e51", "ref_doc_id": "14924ae2-a3e0-4214-aff8-6d7ca98b05ec"}, "480243ec-e1e0-4398-9e00-d017797b6b28": {"doc_hash": "320696e3da9c64d19516416c167422505d807afb70f887e38dae6702b9ebcec8", "ref_doc_id": "52baa816-2fe8-40e5-8a39-b5f4cf652398"}, "4c5fd6e1-d7da-4f95-8906-68dbe58cab01": {"doc_hash": "1de2e06148098322c66ebfd9c69a8f6a74b420fd56c7246ee091a4c7796730b2", "ref_doc_id": "18804887-8c4a-4b35-ab3b-a9dfd1dc5514"}, "2600ac1f-ffb8-4399-a063-6f84fe276171": {"doc_hash": "a04d13cd028bc8817beb17be73ebf378df741a56fb98f989d74b347b5403247d", "ref_doc_id": "b1386fb6-85ad-4fab-93b0-ed37d18f9451"}, "b6c4ed74-24a8-46b8-ad0a-14801321d1ab": {"doc_hash": "b162f5f39f5b240719d8aa9b07cd0427dd5acdcf5d0cf30347231df2bada1a87", "ref_doc_id": "ce49c018-3db7-4d65-9830-422c565a4817"}, "6e08f00b-6b41-4dff-acfb-6ffb4b3ae436": {"doc_hash": "32e9f8c0c598e0899c5dfb27c90367ba0f8bfb69ff5a16d3035e81b843a100f0", "ref_doc_id": "00161289-efef-4d60-b690-5ff8816fae25"}, "56400739-3c26-44c0-8bd2-7142c261ba75": {"doc_hash": "f34fff614c20e000063094b83b525b64336e60207b4d64298b474887a8632ad3", "ref_doc_id": "88d5f645-9e47-4148-84c0-be27114c5d59"}, "2db5d772-2787-4f10-bc00-566545abef0a": {"doc_hash": "4a173ee368fbbc26adb1da7c18a5ba5fdebef3f53446863c68687fd1fda92d8d", "ref_doc_id": "7c78a765-cdcf-45c9-b74d-4cf52f493248"}, "879b5a55-51d6-4e52-9fd5-f0886a7c0dff": {"doc_hash": "5d1019ec2a649258dd8b7191a2884c5de0d2c175ebc143da1b96d4b749693adb", "ref_doc_id": "377e8077-b608-4dcb-a58e-d01210294205"}, "0911a226-1745-42da-8b71-ecd4c5a79d47": {"doc_hash": "9065b6c9349cb09454d7afb934d8e92127e96a8e9a5ff881660875bc6a30b5b7", "ref_doc_id": "90127588-2851-43ad-bfdc-7b4ee5ff6f31"}, "80b44619-c59c-4c0f-88b6-c3cfb1b041ea": {"doc_hash": "9af4ceae2c262db520776584cfa6958f09a943dfd05c9561555bc9090afb9d52", "ref_doc_id": "f888be40-ef31-4678-ada5-3f4e9ba312d4"}, "6695fdc7-383b-4e6a-816c-46ff4b5b994d": {"doc_hash": "1a80909ac56e98a897d669f6316dde4b21c255cbbc8c6ad9f9a28b2ea7e6327d", "ref_doc_id": "4a480917-fbdc-4394-b2f9-c10c69209118"}, "0a59c23a-2c1b-4806-835d-3a530b468048": {"doc_hash": "0fda27c24ba73fb82d8a9f1c85f6b8a3d4acdbd57ae2c0f50f1c7f2746cd9694", "ref_doc_id": "f4d4f92b-2a1d-4201-bfb2-eb009729cf89"}, "6eeb919d-3ee1-4967-98c1-ed8556a4d76e": {"doc_hash": "972c5e8a1a25833e176e914dbc56ee39f131fb8746d1a26d8e459951da56d8ad", "ref_doc_id": "425d87cc-2396-4503-8651-83b94db81b45"}, "ba2c4128-8dd1-4854-9011-e157887e0a9c": {"doc_hash": "f6f2ecf4a01a567cca8d533b41f21b9fc7aa3af4d5e8311e9ab5c842561346e0", "ref_doc_id": "4c48cbe9-d0ee-4a2a-85e8-51433af36bc5"}, "542af333-5cc0-46a8-a2e2-a4ce683caff8": {"doc_hash": "b031b662a16a9705d385a51dfb29090aee86451622d4efc99ce78da3eaabee3f", "ref_doc_id": "3a9f053a-b3ea-4cbb-8c2a-527a9290fff6"}, "b0f2ba1f-464d-4bea-b877-0c15413e1ff0": {"doc_hash": "05d70b675eee25070957a6b31f190d772e97dcbefa110ee5186abb2baf5fae99", "ref_doc_id": "162622bb-e6e3-4ea2-a206-05017df4dccf"}, "14ce5567-2462-4a6b-9ed2-6550067a22b0": {"doc_hash": "06ecb7f371c8c79bff9a271f1431ac1fa095bd2ee4a056e5cb566fd28d9d51ca", "ref_doc_id": "7ea18c94-16a4-433b-b258-afafb3325928"}, "91803b6d-c0fb-421b-b469-46557b520786": {"doc_hash": "e711bc5d1d09acfac091ed7d6f6c2dbb3503933b2cc8d2633d63c2802f4281c7", "ref_doc_id": "28116bfc-9dbd-4646-b790-3515969c56fa"}, "cb9e4f26-8949-4aae-b263-31624afd9754": {"doc_hash": "017fffd55a62fe76d2ac0080014e1afe49b7f289adfcbe182da3b06de2fa75cf", "ref_doc_id": "5b79bcd2-ef15-4a11-94f8-d60efa66e83f"}, "8469eb3d-384c-4412-9763-6ae57f3911c9": {"doc_hash": "a0ca342e2202067d0458a11e2de10d9a860cce6bc51be9b14cff8d0f8dd8373e", "ref_doc_id": "3e0e87d6-522a-46c4-93a6-541a6d01ffae"}, "b06faa2f-2108-4bea-b2a9-48a9f2d5b42e": {"doc_hash": "fa014610660c3a39096c76f5a60da943848b8e9b3bb67e7e589d594da94f74e1", "ref_doc_id": "620974e6-9c9c-45be-b6c5-5db4d79733ef"}, "786a6ff9-7b09-4514-b924-b95874f53c2b": {"doc_hash": "4f01e237545caa394449dfeb8d95ebe452158edd323b82e1c8ca9a515903689e", "ref_doc_id": "77a9814c-c35e-452d-974b-e5515c763f50"}, "4a0d0678-7365-41bc-97cf-bef5e5d5bf42": {"doc_hash": "d9547c8023587d88a829559e58f5b88940d116a7ab069df28988e84f839932fe", "ref_doc_id": "4d1f5928-bda4-4c0b-984f-f109d0da0903"}, "bf7bdd8d-f1a4-4747-b68a-d8ea0a6a3155": {"doc_hash": "b6857e6d2bc75c6efa158ac20a9ac594b85245a03933301a40753198eb1f9f02", "ref_doc_id": "00794d28-190b-4000-a8db-e4576a615c22"}, "01fe24b7-4d1d-476a-bae6-b47510460ece": {"doc_hash": "c43f2ab3b4209ecea41013dc58fe6f6a76e5e6c874ed1101594cc691cc836845", "ref_doc_id": "8217f657-4b06-4560-9387-9a9ea32eb7f6"}, "96071e48-6285-4eca-b7b7-6200394b6670": {"doc_hash": "e64084a1fc9da5cd76b2f795338a279e5e2ea2bf3cefa00e06306faf5491ab39", "ref_doc_id": "1201afc4-3036-4df6-bf35-e670a682b8f1"}, "a03c8cf9-47a9-4aaf-89c0-51176e780611": {"doc_hash": "64966a2972cd72bd5e05147896e47a9308ef3c1ac3799954231995a31522a59f", "ref_doc_id": "d60d05cf-c748-4bb6-853f-888add44bd73"}, "63bfe296-32d0-47b9-ae54-06b9084a44fb": {"doc_hash": "8e88383b3c4ab4e18af9795e30dfeed5d72123f4c78bfd632236659c4eb82b68", "ref_doc_id": "53ec7105-a5c5-497c-9bdf-510a748c9911"}, "3b72e02b-b704-4510-8b8f-c3fcfa00ddd2": {"doc_hash": "aa505c5a2df23209cb33ef3a60aa3d2505cdd972561049919efd58aaf62b607f", "ref_doc_id": "b1fc1513-a205-4f29-9d32-a431aa6be6b7"}, "22cc71d0-97d4-48f4-a111-423f3628af9b": {"doc_hash": "b2489b4b0d7f481af11d4592368d51625c21c0d71e56c278fa96752eee54b502", "ref_doc_id": "fc9653a0-fb91-484c-8945-f46af6b63c09"}, "5bb19f60-a4b3-45a3-9bf0-f2ae85b2ae72": {"doc_hash": "224b4fc466ad6ce94c52d39f3c37381d913f63617d3a1cf172b04ef53861bd6e", "ref_doc_id": "b9053f8d-0a5a-4446-9739-ab5072c96ad0"}, "6eb26b5b-09e5-4998-b563-d12ea60b6cc3": {"doc_hash": "c57d421743b53e8dd1d8e2b5dc7c857159c5e302973e35b84076c6fcb1fa9f91", "ref_doc_id": "56e57d9d-6b90-4e60-bc1b-cc1c605370c9"}, "6f3c6cb6-f870-4130-aaa4-3a9c69532492": {"doc_hash": "b6365a0dbc1ca3be1096adab6bc818a476c86cbae31e3e72f16a6a457ff25581", "ref_doc_id": "53fbc237-cfad-41fa-a81e-e4391be04eda"}, "135c0270-a941-4e15-b615-704cc24a99d7": {"doc_hash": "05b4476a8c8ab9d8971e2e7b1cfe6f9bae8dc727d866ead52037ea9e2e99e000", "ref_doc_id": "67846276-9d0f-4984-9f17-6c94abea1215"}, "4e6aec91-1f7d-4a50-8394-a523bc2154d0": {"doc_hash": "0ffb60a2fa3c1905d9e56da60df4580206fe0a00cabfb4cd2e858970a68fb4bb", "ref_doc_id": "7aa7e20e-6184-49b8-babd-79f086856f9a"}, "b52e53d7-6073-4744-a0b8-6ded95795e70": {"doc_hash": "2c8b9d30bd19edcc7c9c2168a4947638e2e094e9e2e167ad8cb27bd8320c8a27", "ref_doc_id": "651ef24f-fe22-4ef5-acfa-f7bdb8341b3d"}, "381f303a-acbb-4544-ab90-dd4f3a4663a8": {"doc_hash": "53cdac011c568922137a70eef8853b6346cf91a04bcbd960bd645b95e06721d6", "ref_doc_id": "70a96e39-d6f9-4fa3-a802-95cd305f4ff1"}, "e89873b8-26a2-43bf-a108-34c00eeea315": {"doc_hash": "8049e0592b9a6f7e3ed3a14e23d6d5e5a5f1ea8544ac6851ab9c535b7d7ec7b9", "ref_doc_id": "f497ee38-6c98-4e34-b262-3c9489a5a5e4"}, "d6215dcd-ad20-4e6b-b5c9-f96eca613e6c": {"doc_hash": "9cfd1f3b8fdc8a64e1b1cab60ace27cac3609b79103d8ac026918daccae54498", "ref_doc_id": "7c49de1e-9f22-47ad-926e-cc265a113ecc"}, "087227f5-a237-4266-bb56-0f25d2cc9018": {"doc_hash": "13563f4f65bed7e260d27b27d4a5fdcf7abb76ec4a3e72c48f01e4868eaf029c", "ref_doc_id": "a23060d3-7fc0-44c1-935f-bf717ab30ed6"}, "40b64948-51ce-44b7-8876-7b44d5152ffd": {"doc_hash": "af117981ed1b9c47599ec5531cd6261a4f8cf4a0a71f8459703d7016b3d96302", "ref_doc_id": "e72add08-a51c-4cc5-9399-9ce9efdd9b78"}, "ebed8870-e638-4290-bdef-302394fb5c98": {"doc_hash": "3f5ead183b82565100799d48ad873ea89639fb7678a56f21ca7dd2274e8bdd3f", "ref_doc_id": "a9ba1f44-d982-4669-9fca-ce7b7000beb3"}, "0aaccdbd-bb70-4c75-8044-6a4835b7d237": {"doc_hash": "d6e95cab39d92f9396008c9e51832db9bde5f2128f48975f5ef91f74c342a89f", "ref_doc_id": "aa136feb-6535-4523-88bd-e76550c00f9e"}, "27f5085f-cb67-4f53-9d85-82e0b952990e": {"doc_hash": "5d01789baf49038b86c98e508fa6e6cc10ad740664c313455662f3f178c507b0", "ref_doc_id": "75886ffe-9a16-4591-b4f7-5452f85b58df"}, "2a0a2b3c-b914-416f-88e0-92c83b08be43": {"doc_hash": "5c6c94b6449b5f997887d4e548d46fa571d93b12e7d651daeadfa73ab8bf4e2b", "ref_doc_id": "4f6d7880-bd44-4a73-ab9b-daeb57812aa1"}, "7dc7abe3-3450-456f-a4a0-75a585904414": {"doc_hash": "b56dc672e8eebecdd3fb2fc93e111fdac6aade6354d0ee634baee1679fc4daac", "ref_doc_id": "21809133-b190-4792-8c9f-632c9340f90c"}, "2a0452cd-194c-4dfd-9357-1e56b85665f9": {"doc_hash": "c9bf9a92ea043739a860e0ff799c60d4009d7eb5dec847a1c628ad3c83f2eccb", "ref_doc_id": "ffd3a7d7-069c-4ecf-a4b8-dbe55bb64b01"}, "5180a6c2-bc69-4b09-941b-42b8267d0bf3": {"doc_hash": "c85502518a18e6c7ef9df3d9aeb2f1062c916199203484961ad3cdd816c309a8", "ref_doc_id": "abfe0c50-9e30-4175-b51d-5f07b502f632"}, "e0a3b9aa-176a-449d-b2bc-6b96007f9cae": {"doc_hash": "a843dce92f82b2a1c18fa8a88c49478c7033f4508ac6e9f618b82d5d9583258e", "ref_doc_id": "43fac8c0-4b29-4cef-a6ac-7d1f35fce8c8"}, "26ba0906-e8cf-4cf8-abea-c7b2050930b7": {"doc_hash": "fb8274e7719ecd7b9664d7dee6e833fb1a32db13848bdaab8737bf8ce400e214", "ref_doc_id": "4fb978c0-d241-4981-aec2-ca2db0fcaeaf"}, "ce3f448c-0cae-491b-8a24-64fd97bae219": {"doc_hash": "87f3ed9fae98deae84949bbc9c40b06a9f438df442c78e52477d144c821e330a", "ref_doc_id": "29578f41-64e3-48e5-9024-8a54483e265b"}, "b98e5633-abfb-40e3-9cc7-f0c28f3fb9a4": {"doc_hash": "9de6c55ab22962929566706a888bf1130b6284b1d94ab406bd2f65fac5b06e68", "ref_doc_id": "4c979f28-6faf-45d1-bd31-3366faa35b11"}, "d6be9560-b049-4c4d-8633-4e4388933db8": {"doc_hash": "6ef0ffc7b58a88eefb993f763160955ff32171212f503f0f6b0b08300aa494df", "ref_doc_id": "e1cb3f9a-e7de-47fa-afb6-e01d58ccd4b9"}, "4d404ef2-14e2-4016-9160-ae1b12f2e9a9": {"doc_hash": "8c403954f963d5379f51c6fe5e05eee97f17ce8cf6294c3249bedf12d0b6a46c", "ref_doc_id": "c5266d44-a3d6-42cf-82dd-0836f0f7105e"}, "97ad144d-dd6f-4975-8f99-e204ddd97cd6": {"doc_hash": "bdfb341cbc6fff142f880415816b51c2b63f4d5df41b52fe76daa6620c1d4873", "ref_doc_id": "67766adf-526c-473f-b29d-bc8b38fa515a"}, "e0f220a3-71cb-437c-ba0c-a174b3668b84": {"doc_hash": "c7f12cb560844b5c9236b45d167e43ae422cc53e953a04c4ee2d2f7ce0f2f43f", "ref_doc_id": "1239ecc3-4088-499b-a4be-e881a437770f"}, "40cbf2fd-29e2-4ff0-b6dd-07c0060d9ea4": {"doc_hash": "7b71ecf092caed8dde49426607f1fe15232d89ae6123b200a01af7e17b282ae5", "ref_doc_id": "d7cbe54f-6253-4253-a605-c578eceabd98"}, "7b5ebe00-44fb-4f5b-9a01-66cf702fc1c2": {"doc_hash": "fc71b133574c2691f3632038ac3d2224acdecefa405fbd086bf23c6c672a53a5", "ref_doc_id": "1915f845-6e52-49d1-97d2-b62d0c552310"}, "bd0e6f61-5219-4b4f-8892-27bab60550eb": {"doc_hash": "dc01a9897f082a39446394eae7b4c807090aad60a050098bc2a1b5483d17de44", "ref_doc_id": "aeb70f03-ef30-43cb-8d7b-034826b0320f"}, "d2838f67-36f4-4831-a014-b857337be30b": {"doc_hash": "7392ac769d57ec551baab263fce5c9f10b69fb58d7554dceb09e9af24e55f21b", "ref_doc_id": "33bff7e8-f3c8-46ae-aca6-500cc2e861c0"}, "ed39f245-795a-4ec8-9158-da35347232c5": {"doc_hash": "83f8fd24a2174778ff9e682d39462e934ad51fddf1d15a0d684c05f8e142d626", "ref_doc_id": "33537690-b4d2-446c-b019-e412a21967ad"}, "2e0f219a-fbfc-4c6f-a38e-19e2889727c7": {"doc_hash": "be1e68f63c05deb3044e2bf19d1d7bca10f6c47e1b4b779a37b43d639e9ba4bc", "ref_doc_id": "268a753e-cd35-48fb-87f4-2e85619cdbfe"}, "54893ab6-15da-47c9-9580-cd8a73e0b774": {"doc_hash": "9392cae2b490388fe7dcfeef3c7863c40428a9e929d1551de1555ba2d9567de6", "ref_doc_id": "be119211-3583-4fc9-aa84-6f25bbe0590b"}, "9354e623-9464-430a-85c1-ed1a0a685825": {"doc_hash": "85193c4fd1bbd227cb27b3259c2bab435177a2778361eae4bdbb59a0e9ea30e9", "ref_doc_id": "b47aa7d7-b12d-4c11-8bee-de58e5f3cf99"}, "1d42ac74-e520-4691-8b0c-98c26f6390bf": {"doc_hash": "e6d78918a55c8bed6877bcf5087c02f4972cf0bf943cd16e5b6271390dc8dd2b", "ref_doc_id": "da03ca81-8f56-44a7-ad5a-4b3bc91da4ba"}, "08d1d904-bd85-476c-ba49-7549b52c143f": {"doc_hash": "0fca47d9397cbdfbec5acf9ddc319390848c8387d2993dad7559d8f2daa05f62", "ref_doc_id": "3416562b-b5c6-4c1f-a58c-645041792890"}, "a355cba3-44bc-4b3a-83cc-7e65eb817512": {"doc_hash": "cd5e01d6dad4ffa943091293eb4fb66d0ed607c8b060b4d1b06eaeadeee141a3", "ref_doc_id": "0e1c4cce-b403-4faa-a41d-13d9dee922d5"}, "bf5ff473-f3bd-45ec-9e7a-0eeca807cf7e": {"doc_hash": "79c8fd1338987b8fcf1c0c6c8f217e69f9e46a90b862e106fe825bcc092f4fe3", "ref_doc_id": "2ee7c1f1-08ad-466c-a7a8-5a529b8e6ee6"}, "8cd5aa21-0241-4f9f-b8ca-cc2f8ef438f8": {"doc_hash": "645f89051d2803a2a35351901462382e0c6d53ede152951571a76e3e76d8237b", "ref_doc_id": "49118fc0-c987-4507-addb-73640285d570"}, "69dae294-3216-4119-a10a-c7bb69dd35f1": {"doc_hash": "97aeb78b639ae9bb26ec0cb1745ac56197b7539e7d3e87e062f82be1431a7694", "ref_doc_id": "02d0ce3f-56e9-4966-bc7b-fd1d2589d295"}, "90d939d0-f4a0-41b4-a27a-4c47a0f636ef": {"doc_hash": "62ff22b96d3893f2f79679601406d5af227b801f276642e2d664d7dcf4df016a", "ref_doc_id": "275bed04-9789-4330-92b4-64cc8e7d3a29"}, "18f7c5e8-a326-43fa-9320-7f64b85b3a91": {"doc_hash": "8eea92a00afdc14b00a862ac3ae4fcbee65b54e38008bf3e60d6e6f457041899", "ref_doc_id": "b9b439b9-66bc-47ad-b55c-efeb8d18490c"}, "6e93af0b-1548-4d2a-ab0d-1543a6e22af9": {"doc_hash": "745fbf76c78d022d9727dbc7448966c86a9a544f316ccee9bddee5df579f3e6d", "ref_doc_id": "f0703d5c-6799-4917-90a1-103fad71995c"}, "e8013bd5-990e-4d6c-af0b-41662875b89e": {"doc_hash": "aac52c0b3bf56020e61acd63d99f2d6e963521a9018203ba2101aa3c7c49a606", "ref_doc_id": "fb90d954-52f2-440d-bf2a-3d472c8126b5"}, "2335c1bd-979a-4955-a866-19da3c341988": {"doc_hash": "948db6354db70ec246c402466eecac685c19064158368adad03b0e73630ec18b", "ref_doc_id": "42522ea5-c891-4f9c-b164-fd0c950ddac0"}, "ae3dbe2a-c5e2-4c6d-b147-a384b340e9e8": {"doc_hash": "81018267d94199300f052aed34f2315b633cc5de0de08763021da6033eb64ed1", "ref_doc_id": "e27e0b80-9c95-4db7-a28f-d1bad7cf1e4a"}, "10ad9e4e-1e48-4b92-b804-d134f671fc21": {"doc_hash": "c0048c89f39df20e97cb225592dee7121a779266a0269b255b790e1a0dd20409", "ref_doc_id": "02dedd44-c93f-451f-90c8-c93c4619bcee"}, "64c67597-ebd6-494d-8dc9-4b3ac4a18833": {"doc_hash": "4d6e7a1ce192f3f6f1517c6daeedd58030d1e71862df5b829ebcb9489975760a", "ref_doc_id": "2004be53-d697-4701-b9e9-4e860e877b1b"}, "874c2b98-79a1-48a7-bcea-cde96aa66863": {"doc_hash": "74f571c6036c5de76ae05779ca082ac9c9e4c0be45abdfeb4711da6c1ea93b39", "ref_doc_id": "90e56275-c3e3-40a1-9482-8550ba5323f0"}, "62f33d6a-d279-4ba8-98cc-89a9c3fd415f": {"doc_hash": "6a99e4e9887fd773efb6d110468d8e36998c47fad984891ed78f73adeac7cb87", "ref_doc_id": "e1692368-fbc4-4cce-8e92-31446be6d163"}, "f0095c55-0c0d-430f-8445-dcfe95b820b9": {"doc_hash": "ec86fe759e5d1db089d11ae8b5b7547b16146f8b0b941f74a5996a1e27f8c438", "ref_doc_id": "f5d499ab-869a-40d6-94ae-93acf0a76d5f"}, "12441627-7081-4502-aa8c-a48eb0f873c3": {"doc_hash": "ecadd4f507f8c9212dd379fce3d30bd73f418f85c53732ec672952e72599d7b0", "ref_doc_id": "66271a71-762d-41d1-a48a-b64ecccc8575"}, "b281dca1-cd39-4065-a83b-8a211768ca28": {"doc_hash": "ca8122e6dc4bd2b651e8cba778cd984c2282259b37c79c72f45a2cf929342eec", "ref_doc_id": "bb822432-da73-4cb8-aa49-791fdade5749"}, "32028989-b629-4e4e-ab5c-c5551c1ac592": {"doc_hash": "501b503baffc9aa7d9c09bc0e1d950b143cbda2259a2705850c8e714875fe557", "ref_doc_id": "f5741d7c-21a6-41f5-9738-575ca347de0c"}, "e49ddd5d-01f3-48f1-9ac6-c9dc783179a3": {"doc_hash": "2ae66723b8ba341ddc5f36c545add470b588c7426e4b90216889042387c52444", "ref_doc_id": "c7de38fd-d9aa-4c33-88ec-a44be9ff7b9d"}, "4dc4830f-ff65-450e-b281-feb4d5e76249": {"doc_hash": "4e2420898f0e61dfb5d675ffcd773a938fc0abccaabf3f6fd7eece58325af806", "ref_doc_id": "fcd0446e-c5a4-4381-9364-3d1156892065"}, "b1e59573-5fad-48ae-9ddd-3c070c6f789a": {"doc_hash": "ae5643d1d03d95ce91abcbd41203e4382776120fd9c86cd671f542d93c4aeb69", "ref_doc_id": "d859ca18-b279-4b2c-9da1-f2f307c69980"}, "1c277a74-fc74-4126-bf3b-05ba93e183fc": {"doc_hash": "44f83bbcfa827eb836dfc029ea9bf2fb995a67512fb62c5d55d14b862d13b1d0", "ref_doc_id": "68f97990-1b07-476b-b1aa-dcde472bf156"}, "473e6e07-1bb8-4d52-bb09-3f90a64fdfd5": {"doc_hash": "c45d5b85be2c051a9914507f8997f63bbc9ee8e1eddcb77a917feee23a7c41cf", "ref_doc_id": "8715f287-f413-404e-89b7-7d16ac6ff86f"}, "0b025cc9-77e7-44f5-9cd3-de54d0a6aad4": {"doc_hash": "196662a680e7bbedf0cdf5345a2d99ffa0e91c5e2feb59c476dc742710d43437", "ref_doc_id": "ff6839ec-42bd-4037-96c8-bafd3557384e"}, "1118c353-18fb-483a-8671-6a195dfa9e0f": {"doc_hash": "354f9629bf46c2b1b0ac89507cb23e8bcb496b4d85812fe141f5c8e394d98a54", "ref_doc_id": "826ce114-e57e-492d-9d36-db999b785c38"}, "1022f269-ec9e-43d7-9430-c959108fbf5b": {"doc_hash": "5aa3fe36ffee25045c25a1bc238d3da8265cf8b6f35528d31954666de9ef4329", "ref_doc_id": "34562b9e-41b0-4c55-b91c-a8e68e78c5de"}, "64a55c16-2ca8-46f2-9df6-f0446a1f8a4d": {"doc_hash": "9cd1a3501fbaa3dd33013e35527b0a585dc62cea84d469ba65c8539145397804", "ref_doc_id": "652b823a-51d6-4dd5-8a32-a9439ec86d14"}, "ec1ea724-9db0-4b4c-bc81-3033ca2aa3a9": {"doc_hash": "12e33871f3d89408fc5f90cad79aae76be29f9e6622344fb33b6ca3a4e589b4e", "ref_doc_id": "5c97d1bd-fb04-4323-85fc-1cb5de8a908e"}, "16ccf850-39d9-468a-a6c7-e101b61a4fa7": {"doc_hash": "10638e286424f22504980b064f1da1e58204a8266ba6dcc04816a99bcc7dd9bc", "ref_doc_id": "f2b5f1a1-6867-41fc-8227-8ec99b6cea22"}, "0511dd64-02e5-435d-8358-a45954132916": {"doc_hash": "38bd353adac905e63f5b4e7cdb310821b007299bc21d17a34e0d1f29f1697080", "ref_doc_id": "177e0539-83a6-4ee6-b85b-8120da8f2bcd"}, "4eb73dd6-245f-4699-be61-33c5dcad8f6d": {"doc_hash": "c2cb65c8c5aa59cc53c657cafda06abf666ec665e3dcf2acfe153e87019547cc", "ref_doc_id": "5d4ffcbd-0aa5-4ecc-8f27-26f90df73d2d"}, "be86bcee-6fd6-45f8-a723-7136f6d86f33": {"doc_hash": "58fbbf688ec7058ac72aedc1f9208823aca7f89a153c8ab757acb640d0794525", "ref_doc_id": "14b3ded6-2db4-4f6a-8be6-d6092bcfce2a"}, "d5bdcc19-7352-42fe-bb3f-6515f67612f8": {"doc_hash": "bcf1ddc7ce7948b93df1395d286dd860075f80568b8f055a6c81aeaea0b115d3", "ref_doc_id": "d224812f-ed2c-48b6-8b0d-4b85b6056a6d"}, "13ab6c13-c02c-4a99-9110-5dfafca14a4b": {"doc_hash": "80107343295659623ec521a1c5dd2a51c44bf9c374a378e948efb39c97f95fbe", "ref_doc_id": "65ffad4d-a233-48b3-a13e-ecf477ded187"}, "251c8e79-c925-4387-9cad-7462c94f0383": {"doc_hash": "2f0563e22d557241d8ce24965e3400ec8f698e1ecd5ed14d013d396f0586fb4a", "ref_doc_id": "19341d89-e6ff-4743-940c-b22f9a3293e5"}, "878b61fa-d1d7-4c4e-936c-ec9995cc92d7": {"doc_hash": "42fe1c497009b174512f563df758f5f493163bb7e867bb857923482b08045065", "ref_doc_id": "e8c640c8-7e65-4cca-9734-1bd2a956f7e7"}, "a6ba10e8-ee3c-4199-98f2-a3406d8f17a6": {"doc_hash": "1020a880cb2ead61e7bc37c5fc26e061f686390a7ae004d68b516065010e630d", "ref_doc_id": "e614d752-bcf5-49a5-9fc9-7883c532d2d9"}, "c0b8b459-ef0b-4173-b93d-cfa855c0d6e9": {"doc_hash": "363576ea515060358c2183bb77a3f4f0b09aa7ad1d1ab1c64d7661fa71ba49c3", "ref_doc_id": "dc2a682f-573e-40c2-9bcf-343269d2a6dc"}, "9d03caec-492b-42c8-a666-597aed8a1ff6": {"doc_hash": "f5256c641e2aec37b9d41f12d5d5707fb45b2d24ce40be88a7380020cec031ee", "ref_doc_id": "94174a27-1550-49dd-bc2e-f888f9496523"}, "024d6068-4e46-43d9-8a3b-7c1598e98d50": {"doc_hash": "683e646502042e1e60dd5229d056d65d1320b9f0d2b2d249e81ae712f7deda3a", "ref_doc_id": "6db89246-18d0-47d7-85af-16b2dc31cd15"}, "6c5e7bcc-e38e-47c6-b36b-cbb890ca402f": {"doc_hash": "d0299aef3b5e1e1463ecd86e0c05c1b9f87a6187fb270661c9df97e49d23b28c", "ref_doc_id": "d84d45e6-be5a-42db-a647-b6cc84755468"}, "ebed2dc9-9faf-4ec0-97b7-917c0f01cfda": {"doc_hash": "76dff55ab78b3dc03d1c7e55ef78c855b9b07adbd27e020ce438318b3d2a97cd", "ref_doc_id": "5eb418ed-3041-4ad6-8bd9-b8129cae2861"}, "6f40f275-021e-4f4a-a7ef-8c12671097f0": {"doc_hash": "39889e05a8fe4f4d5897230bafb94df3e0f6ce9504a5dbfaf65205aceaea1b7a", "ref_doc_id": "d01b286d-3cce-46f2-a9ae-f0708d27e75d"}, "e445d215-3d9f-4f88-8b66-b54af187dbfb": {"doc_hash": "fe518149d087af501cc37e42b858ad16839d4edd033588a7df8506a5fed50611", "ref_doc_id": "bf16fd0c-21c0-41d5-93fe-5b78e601078a"}, "86d1181b-979c-456a-ad72-4c6db3942256": {"doc_hash": "b5ab5b9cd361da237a19286a82df232d405592d2f7b939552e323c7b0722c300", "ref_doc_id": "a37f829a-0fd3-494b-b314-c279ba3c2d65"}, "e06064ef-047e-4e1e-bf8e-47ed84133f39": {"doc_hash": "99f9d59a4ab4e21495fe582bec8a227247bce94bc506b5ce5af9df7efab3ebac", "ref_doc_id": "b9d7d631-e605-4c87-91b3-8f92585b11f5"}, "62861af4-7d71-4d9a-9a3b-a03f2506e9ae": {"doc_hash": "869467da3de70adb62ad8101b04b13b7676cffbc4ad4653b0cc5aedf53aeb303", "ref_doc_id": "1d8e5a67-9ec0-4f33-afd8-5a97a8e192c9"}, "7b42f4d8-434d-4f8f-a038-86e5566150d0": {"doc_hash": "b013fad6c94a724c1bfaa7bc3e5793ec441ff5d32ce666d25e5c3dff47d1c116", "ref_doc_id": "bb591a49-da5c-4f82-9898-0d2a0d9ae501"}, "3b894284-4fab-4e8e-bb3d-3b9d35e1b2b0": {"doc_hash": "45bf301f4a0140360ff10622f66ef91ba037d722c773e411c72adb190a9788ae", "ref_doc_id": "d4f282e5-53b9-4e70-9933-c9dbe963e10b"}, "9c693b31-9619-4fe7-aefd-3fdf2228f520": {"doc_hash": "14c7db23581669c51a0120921b143ae8af2d5cb9b04035bb5973c2c5b152c9f5", "ref_doc_id": "d25d7bf1-7339-488a-8b46-bb0749a5166f"}, "c0ec1376-4987-438a-a9a4-177dad514475": {"doc_hash": "d6269087ff3468e0fd8b08cd0a056e6829d73f7c17610bec97e8dcc4eea9787a", "ref_doc_id": "58e2f8d2-0842-4902-8e5a-b73208e12a9e"}, "dc8e23af-ecc1-41b4-adad-ef806f7725d3": {"doc_hash": "cfda344e9742817ba507a56939d364fcc2aff2a86d63777458ef1791f8300ecc", "ref_doc_id": "8ac57253-6f5f-4cfa-a9ec-2ea74903388e"}, "cadb9337-db01-4690-859d-636e48de1412": {"doc_hash": "5e686ee22727658b56208dac141863729d7f5cd96615a59679bda642309c601f", "ref_doc_id": "57a131dd-3f13-475a-9428-926232d89fb6"}, "56c22d83-d5bf-4bae-a42b-88e30e05a718": {"doc_hash": "dd65e0382d7be2a50bfd6fa26f1fe695c744b452ebb44310c93e363838124bd2", "ref_doc_id": "dd01422e-34d1-47ca-a0f3-c80b3ff6d0fe"}, "d849bfcb-e3c9-4ea3-9353-5bcee8f6ee11": {"doc_hash": "686944b0039fe67ec27e3b305596f66d366db532568d0c3c9df19a46d3dd0fb2", "ref_doc_id": "6a6baab4-2547-4cbe-b1fe-465c0d949762"}, "f148cc4e-f8d4-466e-823d-fa133585c6fd": {"doc_hash": "0661917923f1fd426181784fa02dc736dfcbea233c8b89ee06b673889dc888ea", "ref_doc_id": "2bae00d6-f4c5-4561-84c3-5307560822fd"}, "3ac097ec-9d99-44ff-b398-253cd94d58ae": {"doc_hash": "5975c208d9f207c43a1acc9f9637dc1c589de56aa1c8bd1866fdab5355261865", "ref_doc_id": "0ab8f1e7-1fb0-4774-9f93-2894a8287369"}, "53f6fb90-0138-4383-9dc5-2fe86404337e": {"doc_hash": "6d8379d08553b1d755ec6f64fafccdd29f292265319ed69dd5ab59c10610f85f", "ref_doc_id": "f839c0d4-a929-4b35-93db-418d7729f6bf"}, "85f80be4-2340-4355-a9ea-39edaf419b00": {"doc_hash": "c3f46c4cac3bc1727c9e38a1a5ec4e5551857d286c27edee6aeb6ce137d92600", "ref_doc_id": "010435cb-5b2e-4b28-b5e8-54c284e1a5e3"}, "8b484003-2a3b-4c7f-9e7d-8ff656f5d12f": {"doc_hash": "f15b531c4a01d6e3343e6a1847e3fcf52f73cbd8411fd6fa50a68e8d8a0dfce4", "ref_doc_id": "80490ea4-ef44-4b7a-bf3f-5dbb4800cd23"}, "517dd0e2-62dd-43eb-9626-26fd6ebff32e": {"doc_hash": "346638d67eb7a6539cc5edb7f685c851fcdf1625e96661c5eb9f5d1f35967a53", "ref_doc_id": "e6f6b118-d604-46b6-bb81-dd86f1c4adb2"}, "18d0ebe2-2ed2-4c55-9156-c7725997e9bd": {"doc_hash": "23f0a967148b869aea28014ab21a15ecc3ba7fd95edb29f9b13ec876ee792b63", "ref_doc_id": "3a11fae2-a59c-4767-9fa0-186aee0f6b3f"}, "ff45e917-6a6f-4e6c-9984-56af5f016d18": {"doc_hash": "1eace2e58744810d623332d4a171621d7e12c1e9be3d5b82cd023b3d55f82142", "ref_doc_id": "8606e7a6-1ab0-405e-8b62-e0fc6586d593"}, "aab1507b-06bc-4478-bf03-7caa448ebf84": {"doc_hash": "3d31f563169d0ce0af7a0fc774e5fdf80fa0c3d33f972ac71048eddf48a50fe6", "ref_doc_id": "76196a68-7981-4c7d-945c-a04499e66762"}, "66fac2da-c6fb-4393-b8ad-f46a29563380": {"doc_hash": "38d3751e23479e42b12d838a0e78fbae278c67e27f9001d112d3b48586fd6497", "ref_doc_id": "d02f9b46-091b-4c7b-aae2-fd39ccae1af6"}, "b321d392-42e9-44a5-a351-9d695a62bd1e": {"doc_hash": "e08601d5ec42faec86d4a3e042fb6ab646dccb44b18a30e10acf618708f13395", "ref_doc_id": "2f203be7-76b2-46a3-8f4e-3444a0b499a2"}, "559f7ea0-9b39-422c-8dfd-e8b4ee970962": {"doc_hash": "9e7b5423c665252f6c8f29214dc7958ff7ad270dd82f9baa2c01341fe14ebfd4", "ref_doc_id": "daed4d87-e851-41f4-98a6-f0653081d48b"}, "2d8abc21-9c87-4ca7-bea9-1a92153d3060": {"doc_hash": "ec676b815c217223b1e0278fe8b0462445e3c1aa0b5bd9f61a07eb052a2a6b93", "ref_doc_id": "665a0a77-502b-4c27-9467-9d5874b27483"}, "5c9d901b-9fa1-48e1-b569-6b714e9545cd": {"doc_hash": "fb522b1de80927c59ac72e3405738967a6d7c92402d6455520ea77ce9961c59c", "ref_doc_id": "ecc51507-0ff9-4e49-a19f-5af643f641ac"}, "ab1f283c-43ec-40bc-ad7c-d82404678886": {"doc_hash": "052dccfceb1af3def2747b63e79398dfa5787db9700dc786aa30458d65de93d8", "ref_doc_id": "636b8d85-8dcc-48f6-acbe-d300c630e506"}, "4dde2cd1-a05d-445d-9aa7-d4354549166d": {"doc_hash": "ce0d341855717ea0fe8b24af5ec7c125c631ee0837c744578cdaf9e609e0ef6b", "ref_doc_id": "ab0fbfe6-9386-4a48-90e1-730abead36de"}, "56d2de3b-929d-478b-a3e7-59240cf8a2c2": {"doc_hash": "ef27de1e3b6580d22ccb6948be729fdd6f187ace94ad60566adfbdfb9be5bd42", "ref_doc_id": "33c4be35-9853-4469-8d78-c9ab83e01723"}, "03050609-6a20-4dde-881e-6297414e5970": {"doc_hash": "6d2934b421c0a31acc080a2bad8a06ccbcf16f785c8cac4d652023769eebccbf", "ref_doc_id": "78bdb8dd-4de2-43a5-b2a3-d860c7695619"}, "4e1937f5-e3ab-4d63-93e4-fd0b94677198": {"doc_hash": "dbe00efb8bc95bfadceed0b0179a029ecc5e3da8fec9ba36a1ed482bdc3bd249", "ref_doc_id": "f744805b-9538-4ab1-a894-c961027efb75"}, "2699b800-cda3-489c-a834-9a8efd56d419": {"doc_hash": "43bc0e39686fb28d1ca3b8d933ca4336753652fa01551b30967108d93b9893b3", "ref_doc_id": "ce9169a6-62a6-4cec-94d0-508cac215a6b"}, "5d0d1fb4-423d-49c4-835d-91c15be1a38b": {"doc_hash": "1ad06eaccc0be7a6a9134b78720735fd50ab61d8539e9ea1cd7e1f33945e1fb2", "ref_doc_id": "78548f55-5957-4fe2-83aa-ec57754083a8"}, "15f4e7e6-1912-4d52-a2a4-375c25cdf137": {"doc_hash": "26041ed3c1853604cebd111c061716f4eadfca93e3fda7a304c201cbe3551ed7", "ref_doc_id": "5771ff67-72bf-4251-930b-833d1764632b"}, "72b44502-e75f-4b73-ab8b-07667bcfd5a5": {"doc_hash": "4e3b4b09652a0a6826d05b02164bad359c207852f7880268ec1d35a7d96f4fac", "ref_doc_id": "bca8fedc-c8f0-422d-a4b8-65ae810bce59"}, "b1b920ab-3a0b-462a-9076-88709bc3b42b": {"doc_hash": "f5669f55f78607cbd1e6a80b36b728dfb6aac057f25e7a6ef386f959e77ceb7a", "ref_doc_id": "f4bd7278-bc46-4029-a1f9-914ffd8a4b2f"}, "61d06b67-33f4-4d8c-a89d-34ee655714ab": {"doc_hash": "eb4b1560035d66835084193f84a7ac701b832d7b3d9783fadf71be18b4bb0bda", "ref_doc_id": "02c96afc-6870-4d9f-90f4-a3ae2e6820cc"}, "d3bfdd2b-27c9-4125-b1c7-6213fcb87e2d": {"doc_hash": "09d59bfac1b2028c9c603860e01696ba47668b76cb85fe7ef303a2d72bbfbb64", "ref_doc_id": "a373aa68-e184-4dab-85df-867937dcdb98"}, "d4a85794-44ea-46dd-aee5-0382241a20ac": {"doc_hash": "151dfbd59de5ddfd4006d628f450d108750a65180b36c3828f02d694c8ad1f6e", "ref_doc_id": "319afecd-f575-4d19-8c70-94ef80042c83"}, "394f9e67-46a2-406c-a455-accb5443e4b5": {"doc_hash": "03b1f11dd08eb1e6348476e94f64ce91548a9eebe16c2c3ea76f17fdcc321630", "ref_doc_id": "1b085ac9-c481-4f39-bb59-45942753f3d1"}, "44459b47-9047-4395-853a-6e36b2b1e41b": {"doc_hash": "f7d6ff97c32982735c35fb3f0c26a0c8c13c9384d8a9b7c886b1a16302842b99", "ref_doc_id": "3f412286-2258-4001-a60d-c422d6a67fcd"}, "55909789-5a47-427a-999c-93cdc3b2b209": {"doc_hash": "4b8a9a4ee416209d86258d62196090efe5688c7042f2ce2b726fc3e249ea280e", "ref_doc_id": "f7d6531d-80dc-46c7-8574-0931175abba8"}, "9ad11277-0150-498a-bd2f-ceba9d200658": {"doc_hash": "d86b0b6dcc164587fb6f1e0b113f3d22758542ff3afd01d4635bef81ab3e7e1c", "ref_doc_id": "233401e6-f50b-47ac-a580-ec26f54046c1"}, "07981ea9-a543-4553-ad56-832cdbcc5071": {"doc_hash": "7e41845e80e18cee4c61adacbdce91b1a03e42a5356070ecd2a41cb873085991", "ref_doc_id": "b72b3a82-e2da-481a-869c-45dab9c4acf2"}, "fdea6b30-d46b-4b51-9f21-09c7f4b5d78f": {"doc_hash": "60b5c0a6dde5b6bb3d1a03c2b4ae3329608c6c5097422aef56ac1816871a4347", "ref_doc_id": "c289301e-a55b-477f-808c-d2e7a332b617"}, "eb5c20d5-e5ee-4c2b-a06e-350899557cc7": {"doc_hash": "714c586700836c7956dc2342e6fe8069fdb058ece450c54e105c3dba327ad447", "ref_doc_id": "fe91f5e5-47d9-4946-8247-4381d7af140f"}, "93ba9d86-f512-409b-aa4f-97ea0841f726": {"doc_hash": "f0d8961c3709f750455af93afe0776629a09a0a068e10d01ef26e325e275db04", "ref_doc_id": "1bd6ad7c-57a5-47e3-848c-5eff3697a2dd"}, "66367a1a-ef01-402d-aca3-aa13825f4ebb": {"doc_hash": "aa15f4651fcb02c20f436760f4c996d5c26bcdd0368cf4d8990aca1523e46476", "ref_doc_id": "ab69c291-5e76-470c-ae69-41db01d955a9"}, "4da3fd16-b28b-4468-a2b5-6bad720fb220": {"doc_hash": "b37219d7a0f802a4258449190cf027d9c0ef08b5aa608999171f87ec3d6de9dd", "ref_doc_id": "6de3ff5c-dedd-43b3-8993-8f911cad9136"}, "8a8e9d24-b160-4885-8ce0-ddb32f41cffb": {"doc_hash": "a0eaa091d015011c98608457616aca164dbe9c4784f4889bd09092245d3ca3c2", "ref_doc_id": "36fece7e-765a-40e7-afc6-a0c271429538"}, "8e533577-1f58-4510-a775-1a3d3aab5f54": {"doc_hash": "c7fb9f560f0d64120bea24708e872b5ba1a9eafd9da2eba1902616dfc5fec4a4", "ref_doc_id": "51620b85-d294-4618-bc89-3360b5d96844"}, "acfd7d91-933f-4983-8f9a-6125b45c8bbf": {"doc_hash": "ceb97987fa55a26fa51d4dc1d64d3ad85e2df199c32b43f07ce5a51fd34ae80c", "ref_doc_id": "bfed46f7-e04f-4383-b56c-5bbc6b261074"}, "051652dc-47a0-4ce0-83b9-8b57321a1fd7": {"doc_hash": "900bdc460fe7f20aa5aa02221d4fdf2d0726d20f4d07341c5784b2d2ba619fd9", "ref_doc_id": "0cd0464b-2426-4762-a58f-49c3a35215e1"}, "0bc19176-b3c5-4d76-9931-28e2c5824b65": {"doc_hash": "27dbb806473596d196404519ae93adeca67a9c1c1e1e6a8eb88fffd1d3ceb3b1", "ref_doc_id": "931792e3-1793-4ba4-9d25-a5928d5be837"}, "562fb4f1-b811-4904-b989-38b54fe38cb0": {"doc_hash": "b181429d870ecb86ee73a9156e605de63ebb9cb258d44b86919f7b9ae44274aa", "ref_doc_id": "a4bd9921-3209-4389-a9a9-965f4f880848"}, "56d09198-2b4a-40b9-8132-d7972e4e39b5": {"doc_hash": "132d4fc278f0d2d6d7581656a5778d8cc4a20eb17d3f160466860411b41a34b2", "ref_doc_id": "9af38552-175d-47f3-a805-7633c6cf22d8"}, "c61cf55d-77fc-43ca-b28f-3bde05f6eb13": {"doc_hash": "e36a01c6a5b8c5f52275a11cdcd2bea336b8cff346d5cab5cac41b61a26f0724", "ref_doc_id": "e74a7022-c0cd-4f44-9372-e7f14ab9b4ef"}, "5a338ade-d4f6-4e45-bc97-eae2f3119da0": {"doc_hash": "796eb876a06ae5d5ca4c2891307c6d7278a81cc17981ad776852c1078a0e3a08", "ref_doc_id": "ad3f9dde-9beb-4e79-bbed-9df2a49c3517"}, "54cd775e-692f-4c7f-95ec-6d4e8b504067": {"doc_hash": "8cad327946342aeb509a29ff2531c4c45b4b5f607c2ceb3e2ce144b828761a4d", "ref_doc_id": "82927522-c49d-4a56-b7fa-5c7e73f63991"}, "ba628075-6751-4052-8b1a-73c6489d90f8": {"doc_hash": "a04eb89e5d7db677f71540410ddb35a6241ec34a871f7210ed16a83fda884e96", "ref_doc_id": "dce37b19-836a-4c32-ac38-be196aca2032"}, "6f27d851-b93d-4854-9b50-608647b18752": {"doc_hash": "07857ba10b293e695335c5149a87728d9464506f72aafc348ffb01ccb012a410", "ref_doc_id": "ebd8a5ff-9822-4ebb-b087-f770afb0fac4"}, "38576720-f7de-46e7-8d6f-3b32821b6452": {"doc_hash": "45103d3066f5dc777da3270bcbb93b9b6c679cfa2239477f499142d3b316477d", "ref_doc_id": "a3a56610-650b-47be-9ff1-dbaf14af3873"}, "42e1512a-3c57-4c17-a462-3a8e95a3f4e3": {"doc_hash": "ede127e79a9c6857b4fa4a9f44e8d23f57ed4ad9e8acbc647b3a2c07c3be7afd", "ref_doc_id": "c5f7eca6-1fd2-4df4-b35e-274d93e653b8"}, "3b4f099e-c867-4e60-aa97-28895a0b89c0": {"doc_hash": "94c69a7f0f3c74602b7f31c9b7a138d9a4e966dd19079a63ca7e7ae9d5a4e8a8", "ref_doc_id": "21a904c2-1e46-453b-b879-d25ada42b096"}, "b79dec40-0d50-4804-b873-aea79f5a7261": {"doc_hash": "d741f094cef3c84947c3c630570d75f0b4af9b115f984f65785ebfc106e0dd87", "ref_doc_id": "028e5875-bc18-4263-8cdb-ae58b3482c2d"}, "4c68e75b-b5bb-427f-a2d3-b625bc1118b2": {"doc_hash": "8aea284a2dbe0c1b1810c9086ad5b85786adeef8c304a73f8ae7300c8202bfda", "ref_doc_id": "a0321963-8ff2-4ab5-8fde-6e17f4525236"}, "03c8e27d-d856-4990-a6b6-276f4a095684": {"doc_hash": "ac38cfcef118800e7b8492ee9a13aad19b265fa0952c6a46544a28e737c4cd62", "ref_doc_id": "2dd8238f-b5c9-44cc-83ae-7c10f4f43b3f"}, "4c00521c-6644-4cb4-b861-a82415284568": {"doc_hash": "0e05d4a89e058b764837d647fdc93b28fb229e1113fdc5360f4125b4be7bd78a", "ref_doc_id": "636fdb76-0a49-4e1a-9423-0b0c8eb670de"}, "5af2408d-91dc-454d-b1c7-6be79e171657": {"doc_hash": "a73a3353bab80da25a752f37cab31faae75dce1fe4c2336724bb77dd88eac6fa", "ref_doc_id": "b82ac977-b61f-48dd-9704-799fd90d58c3"}, "da9aa4c3-be4e-40f1-8ac0-2849f6615b27": {"doc_hash": "60fac7be81057aa1af362b62ffe45c2386e9a0671724181fea63e404ab88373d", "ref_doc_id": "531afd3a-2533-4db9-9fb7-3b101ce460ed"}, "79833edd-7f38-4578-871a-ec5c2977af40": {"doc_hash": "5719b1ad1cd26854db27c40d2a5f7bf21035345dd3eb8394bbf508d00b635e2d", "ref_doc_id": "c178e692-3bc8-45cf-b811-ae4b941afedf"}, "23a868d5-94ea-4364-b2e2-dad0e0ffd90e": {"doc_hash": "ada411eeaeb9342d049a6d5677b336202f9dd88feb011a6632880d73c66a0112", "ref_doc_id": "de92c691-5b1f-4be9-b182-ae35ad06a0af"}, "b6b55b96-a7b8-4112-9e40-424c224e9543": {"doc_hash": "03174fe6a0824e66b3546f7b69aabc7af14e0a9ebc589efccf35c5bb61b0a09f", "ref_doc_id": "07528021-ec45-453b-a31c-64b1153a5c7e"}, "e936f96b-a97c-4a9a-b258-880ab4a9ce69": {"doc_hash": "96efac80f45d33c501fd40478ce072cd3d4e40eb7ca13854ec8855a2f4f79d7e", "ref_doc_id": "2db1ef4f-ce24-45a1-ae1d-dcb103d839b2"}, "fa9a01ca-8177-42df-861c-6eab9431dc4a": {"doc_hash": "21baf1eb4922d35e8271fadae07e7104f9432f56490e4bee2a7fcacdc8cc78f1", "ref_doc_id": "67967a6b-5d6a-4cbb-82a6-3b0d00479d89"}, "8f734291-67c8-454e-a6b7-842d005e4f81": {"doc_hash": "42b0f5d980d7ad4556d05081ad28cf2004ff3d369dc3a847261ba43bd22e54d1", "ref_doc_id": "73469d13-ed85-4f0b-b88e-785dccd018c1"}, "10c63e07-62db-42d1-9277-ab5fe72f4d92": {"doc_hash": "c616008fc8f351efee63a6f0119b0322f11bafc088d419055d0893e95401ad41", "ref_doc_id": "9d23310a-def1-4b7a-8114-8751cd93b046"}, "e7c77766-e764-441a-bfd8-7cde60d718bb": {"doc_hash": "31e83e56ab74f234ff2a6c50fcfd35034a028662172163a881cefd8dcf10b193", "ref_doc_id": "8a816488-4bd1-430d-9407-e4d437b06582"}, "f1fe9bc4-d170-44d5-b12d-b28d06924c5d": {"doc_hash": "5a8cf1df90be7aa7fd9c4d5d42425a7cedb797e273e3ad67e703ccd2bf3320e0", "ref_doc_id": "31ef71f7-b42d-4df0-921c-fe65f7d441d1"}, "e8f88aac-40a7-4e32-b8b5-6eca80c43ef6": {"doc_hash": "ff6a22cdca4243d7429ba32425c6976ba50dc9b712950bbb3171481bf15ea8c2", "ref_doc_id": "bb034993-4e86-428a-9636-2c111a10847d"}, "4f68964d-745b-496b-8ba9-5d2a55f86b2c": {"doc_hash": "400cb344498e5c5322ff1c4557e320ec7ca362dde5728f7128913887bc0b80e8", "ref_doc_id": "2e94eac8-3942-47d0-8582-eddd303b488d"}, "05757e2a-afc0-4c3b-ab26-5d72f8442d0c": {"doc_hash": "690051d23abf34a5f996ebe4e00a9053544af8a8ed200d551c47ae91983e4de1", "ref_doc_id": "d7460287-2399-4db1-b08a-297053c179fe"}, "8f46aa61-3cd9-423d-870a-ee0049ba506d": {"doc_hash": "ff09174c9792c5ba8738d947f5f8e8df261028e43328949127bc43cead612036", "ref_doc_id": "5d358f44-9364-4eba-9b06-2ffbdb4db936"}, "13dc0332-446c-454a-8d66-7c8f2940ef6a": {"doc_hash": "ef3f8b9ae90238aa8bace34e7a64bacb0d3b2f890ad190eaec3ab77a43b88dd5", "ref_doc_id": "2974e4fc-aa26-4792-a3c0-634dbaee5c8b"}, "4e1ff16f-88dd-4732-bcfb-b4e24a668348": {"doc_hash": "27e3701ae987ce4e5cc47679b8c6245fab5e6eeb20e794c945162b3d0637d688", "ref_doc_id": "c718d7dc-0091-418c-ba49-268c0e532bc9"}, "a3c57bf1-7a1e-4b4f-a295-20d652be88ee": {"doc_hash": "2c25d886ab5712c7a6e94780819ccb5ce96c554004c1724ba3d88da2e783c346", "ref_doc_id": "efbc3004-ecb9-4354-bcdd-749a3d8cf57e"}, "2f8c9461-f4c1-4bc4-b086-b52837e9dde5": {"doc_hash": "7caedc5eb1e0b101dbcd724451335454af21f750c8c410b89bd0b5ad72744911", "ref_doc_id": "776c473c-2b18-47aa-8353-f9750d03e31a"}, "dbadd120-e10b-4298-9306-83ac98642d4e": {"doc_hash": "a31c356f8fe0e3099b0ce63ebf191d6e7ec3d80a807928ec07ff7323f798c4ad", "ref_doc_id": "87df2992-a843-4dec-a768-3b5e0d3e0257"}, "dac7922d-aba1-4ff2-942a-05dc43b1ba99": {"doc_hash": "e966941b4db2c361dd3dabae4c09e9a8028e4287bcf9d446745aebe25fabfb48", "ref_doc_id": "90b55eb8-e599-47f4-b7f7-f63a12a7a2ea"}, "adc8666e-fad8-425a-83c6-5461da464bd0": {"doc_hash": "48c446baf565a17e6e11332fd402d01e4eec5c6c43230e3109f1b3c4e139bd0e", "ref_doc_id": "57cfb6a9-1246-4ea0-b824-e43d77405411"}, "0e1cff9e-34f9-465c-84da-7bfdf53811ef": {"doc_hash": "44fcaa6e3df268d790b622950c774fc70bca1550617706baed9e84330af74b86", "ref_doc_id": "9da8e4e2-0e74-4996-8e3d-ee3c184080d5"}, "f7a2b0f2-081b-4af5-a504-c22b7219a113": {"doc_hash": "bd31d3c8d7424b1f0340d4cbde8adf2932ba29bb2b7b62ff7d8ee7ca047a433b", "ref_doc_id": "3fb6a6d7-8047-4129-9f16-c234707eed4f"}, "ca4f43e5-6590-41c1-95a6-d781981cb427": {"doc_hash": "b58cfffaa7841bbdc756cb3458314cf37b0227d0468a9c961aa985a88e5cace4", "ref_doc_id": "c17cf19a-c752-4743-81ba-ab582098c608"}, "8dd957f7-830a-4d9a-b399-52f58d480773": {"doc_hash": "20b428e1540ebcee5196f740227a817a2d2e8affb6afdede3f72e58dc10259ab", "ref_doc_id": "4d1f38c9-90c6-456f-bad8-0d543be10876"}, "8394def2-28e7-466d-9aac-fa6ae3d81566": {"doc_hash": "8f73b073b70840a0ec5244cebcadc142268eb51a01ec095f47ed0ae60652424d", "ref_doc_id": "7f31de39-1a67-4001-bf9c-d25ed478162a"}, "8618a457-caf5-47f8-bc2e-8b6962354f18": {"doc_hash": "ed9d195e0ba171c85357f484feda56634021b6f5bd086c9341069c69409df85d", "ref_doc_id": "0030bf3b-db5b-4058-9373-d719107e4a1e"}, "43d95cf6-b1f8-4dfb-a56d-ad100076aa3b": {"doc_hash": "9b293df300602dd3a429ae0bf117f30312103e6ad9e3e86872869d7205bbd696", "ref_doc_id": "688dcb2c-bea4-44b7-8d74-4b05fc49dd55"}, "d7653125-7280-42e6-901b-cde7d067128b": {"doc_hash": "5ee190148fa7ab3e8a1c9a234c4bf98f61fe82694739753934185346567c8e55", "ref_doc_id": "01758b2e-50b8-4ece-a556-02d4caaed0c6"}, "f94b4de4-a4fb-4936-a34f-90b403228a94": {"doc_hash": "0830cd26f4b45294ac1d8e0d16f646fa829656e450ff997bb2c4ecc52f7f9fbb", "ref_doc_id": "ff6a04ac-047e-4fa0-9042-7c43009a93ad"}, "692bcea9-4254-474c-94c0-4bff1269fc61": {"doc_hash": "3d6d207cf21de9f76938cb26593085eca78ebf2eb3013836b47c98fcf673866c", "ref_doc_id": "fbb126ec-4aaf-417d-bd62-c98629920739"}, "5103e669-870f-422c-839e-cd1ebfd28525": {"doc_hash": "779efdda04555547a7e3109665267738f6590ca76b2d7228ca9b7b188dc369df", "ref_doc_id": "889ad586-729b-4006-af89-d3dbc943ed0f"}, "b0d34335-09a9-458a-a361-4427cea1e486": {"doc_hash": "39508874782ed4f53dc767c9b49d0b166e534a13df02b15e0fe9f0a9c258b208", "ref_doc_id": "fbaedddd-79ce-4928-8c01-39baa059cb13"}, "323acb72-7aed-4c69-b3c6-ac3b34cba582": {"doc_hash": "d5030da263477f37637525872864c701b1f34bca0ef50b446f4bb574a38c0e33", "ref_doc_id": "ec21280e-7d21-41cb-b5bb-f4cf36cb22ec"}, "4db24cba-5f30-4ab3-86fb-578fc4b809c4": {"doc_hash": "7c99c7735ba07723549cd66478b4eedfbb9612d77d96a126489136480c01b408", "ref_doc_id": "6a47b973-52a1-4b78-b3e8-ff953f489119"}, "93f7415a-356f-4c18-b4a8-d6389ce30b1d": {"doc_hash": "3632bee0c055d33b0bee0b45cff79aea168bf8a67979de4058a4e297193166a7", "ref_doc_id": "ff0339ca-286f-4a9d-82f7-c47792fbf62c"}, "88b3991f-da6e-4e56-87f5-451ae9af8424": {"doc_hash": "20d4d54bd41651530cec13f3db10fab3f95887d53316efaa9554d23526f01e08", "ref_doc_id": "4a0b7b56-7b0e-4bdc-abbc-eebb14a0ca75"}, "d1f511b2-7489-4f75-977a-5795cae771e3": {"doc_hash": "ea76ad34e6b9f52cea09dbe30ed4d467c67ea08242f1b523135a64278fca5748", "ref_doc_id": "b53aafcd-ee6f-409c-8581-fec15b4a55a1"}, "152a654e-06c8-4a2b-8d09-1cb30fe3309e": {"doc_hash": "2345bd0b7861d5b396c1b141ac33a048294d76720ba634241ea6e5c8170d0e80", "ref_doc_id": "5dc10584-eec8-4de1-9275-ad1e2ae6e431"}, "bf5f9498-0cca-421d-9e3f-f82a04207e49": {"doc_hash": "9065d2cf1e96eb4eda3914d1201951d887af2d195c380d0573e9e1b4f346e1bc", "ref_doc_id": "672de12f-2ec7-4a58-9f37-a258e7ae85d2"}, "14f5c552-802d-429c-8f49-0aeebbcaf3a7": {"doc_hash": "b0a5a506c3a754ff5a9930e14409f0277d36984b43037492a2ee3213a3534689", "ref_doc_id": "f1f92b47-4413-4f49-b916-cb98809531c0"}, "f34d38dd-fdfd-4fd9-ba6f-016993c2048a": {"doc_hash": "902f05847356511641ba3db95849d9599bd40c0ab6d7e754a7e641539102a432", "ref_doc_id": "0f386667-5cff-4b58-b914-2f74fabe2441"}, "3a69c807-0a54-4def-a8e0-4f99d9b441fa": {"doc_hash": "495298ffcf3a27f968b1279bb265e5708cc54aa1b246826b315a5502b1122f67", "ref_doc_id": "d7280c29-b6ad-41cd-9208-94d6691bec18"}, "5db1e728-b007-487a-a732-3f49814eebc6": {"doc_hash": "6933f03aa923c4c9db7eb1b9d4f271c7f5ceaa7bbd0b5e04f41a83a1c97d5b10", "ref_doc_id": "2caaec2a-322a-4442-9c62-78ac5612d765"}, "e6bbb69a-6c5b-4771-8710-f73ee02e2a23": {"doc_hash": "61d5e6eeecb9a504a0388a30d3a2010d1ba83ce06005981c5b546f1bde5cd2c7", "ref_doc_id": "1d660d84-22f1-4371-b24d-85b784bbb36c"}, "fc672d91-48ea-402d-a69a-c0b87ecbf10c": {"doc_hash": "e4631bca4aff68f05ad9546b8f98e6a0b261b0605ed11ae6511e383d1f60de06", "ref_doc_id": "d7f0be94-137e-4112-a261-9f8507bd790b"}, "5f695016-2c03-4d27-9dac-2a86ab41123d": {"doc_hash": "95d5cf74a66831c89694e922362f91800f6102f4a400e09c615263c8eb9d8f6d", "ref_doc_id": "68c92e9e-2494-4d0d-9384-8fe4c432d4a7"}, "4a25c285-c1ee-4bd1-a708-111be55fb824": {"doc_hash": "c246ff540bfd1cb8c9f608aca8d2815c655ce9b151a2e2383837f4f94612bf5a", "ref_doc_id": "c7f0756b-4cdb-4f2f-a4b7-b4abf7281db1"}, "392d409c-7e05-46cd-89c4-cdc868cb3672": {"doc_hash": "0cfee8dd04220a2f004a0b12529389d546e341e3ad15b0c7bca13a277ea22aad", "ref_doc_id": "d71f7ef8-7f3f-4d3b-a80c-2b6fc5142f38"}, "ef2d2129-d0d0-427b-8b34-21701e4fbcee": {"doc_hash": "60853bd61f695136c99056669801ff1a960fed446c732b0a8d4e6ad491ca5ef3", "ref_doc_id": "2aee9b13-97e7-4c9e-b861-db680b45a462"}, "ebf1440b-ff15-4178-b2ba-5665c029ecc6": {"doc_hash": "4167051588dd7fd65c167b5fe4495bae48de73186e3a009bbe2a5f738f94c275", "ref_doc_id": "499b5452-7778-4177-937f-e34ad66ac19c"}, "c87d2585-cb98-4028-9a0d-d8fe9bb6f029": {"doc_hash": "0320d92c500df0a10fbfe10adb4a7d0ce02bc07b3bf54159819258b6d193a981", "ref_doc_id": "f890d30b-4495-4093-b798-8e8648293dd4"}, "c23dafb1-27d9-479c-8aa6-994cc3287e32": {"doc_hash": "72a3a53a92bf5085ad8427dcaa3f58939a061b0e661617edac753b5a3b0de24e", "ref_doc_id": "86610747-b21d-4b54-9e63-bcb1620938d2"}, "cdd7fb14-0087-4b1b-b69b-e9f2c1521a80": {"doc_hash": "bb7442a8da3f529a0e6e517378e4e428a4c1310ef78c565120910f04a562c0c4", "ref_doc_id": "19271a26-4e3f-4d73-8254-4ccd2404a2c5"}, "6bc45aae-cf30-4a63-8d64-ff0071847e36": {"doc_hash": "0bac64da1b77ef6227aeb5e23bc4ebb2de6d8f593b6ab373c7d8bc9e82217ef6", "ref_doc_id": "e863e51f-03de-4693-be1a-e1427d95dbae"}, "fb1ec487-0fdd-4a4c-a2e7-9e01d8c8b1ef": {"doc_hash": "d7039d6284c3b308cdec9f167f2ed9f2320f6ef85e7edc4a29db1ba09dc65c7b", "ref_doc_id": "e327193d-0c0d-47cb-886f-0aa5b2de44ba"}, "afdd485c-5e15-42e2-a06b-c633f5e3e212": {"doc_hash": "86251e84c1605eb48dbf2b477dc9379db7b6997c4769438c2f14fc18ba1cbc51", "ref_doc_id": "86cb79a1-8dea-4096-87c4-5fdee9068470"}, "c30a26d7-d5ba-42e0-930b-14289cb7c8d4": {"doc_hash": "eb41b8774b092db50a6b4f955cad1de0c402c2ff05f1461eabd983cbeea29b07", "ref_doc_id": "a6ecf36b-beda-4120-9c2d-f510fd43c48c"}, "8e289ad4-07f4-4973-8c5d-72048f23d697": {"doc_hash": "ce145e6b410ca5a03becebcccec53c27d9bb774d2dbcfb4026b6583db30cda6b", "ref_doc_id": "44fd8e5e-b2be-48fd-a409-dac7e8ca8b17"}, "d27cb8df-6669-46ca-b314-e4166d755777": {"doc_hash": "55fe5844501ba09f17946f253e54c37b7786bb3c0a3ad37877c913e0e0ffc483", "ref_doc_id": "f2c10cae-5d9a-4acb-a45b-2c5dba2400af"}, "bf729cc3-3c4c-4b19-b546-fc0836c708c7": {"doc_hash": "061d6bf83e39fd113ba575241d8c02b5d423d3a4cc3370c0224d0f2217e2d231", "ref_doc_id": "b7818993-ede8-4367-9f6a-5fdf5943bece"}, "ab903cf6-123b-4ee6-a739-5bf2cbc95604": {"doc_hash": "0a78ba0ee8d3b6c4ef6423dc7a7dd1c4a59260516547dc363520e5721da099a5", "ref_doc_id": "578155f4-0e4a-4271-b8ad-f63ebd9a5668"}, "a6e66fdc-cbdd-4a51-8189-04d967b93dc1": {"doc_hash": "1a0839a170a2bf772cc7fb298035201df9017da7c8aedb38017bd1501b2c14db", "ref_doc_id": "95109bdb-511c-449b-8ede-afb99ef70043"}, "daddf21a-e626-4978-92a2-56a21ef3573f": {"doc_hash": "eb7307bcac22e2274d98c30a96ed69a2efb23bf4d5941ea2bb4856a08dc21271", "ref_doc_id": "f6802080-3da1-4a2f-83d0-b26707f55200"}, "43ddd6e6-e136-4646-9ab2-858a6ecd7a0a": {"doc_hash": "eb5d9476dd04abdc16e5549c37948a548a9a69f64fd8010d2184d227cd0e767e", "ref_doc_id": "5caa264a-f7dc-4afa-8a67-5cb72b1655eb"}, "ed0c24d6-e82f-47dc-b4c7-c8033da8546b": {"doc_hash": "2527fa2cba60f4027e7d1a897cc389b2e76441a691ec97e54f3701836140abca", "ref_doc_id": "72e0c9aa-b71c-40be-9f5a-da9e7b8be455"}, "03a75a77-cacc-4427-b53e-7ba8ac45caa8": {"doc_hash": "8d4d83da4446c7fbfbd16cbf895668fc7d2d48da5918b8e33ca3ba6f54465312", "ref_doc_id": "ca41b5f2-bb87-4ee6-bcb1-fa8a1e39cbc9"}, "f53f3554-6084-45bf-a812-98586246d2c4": {"doc_hash": "63595a4147dd446a0ce8dcfd33f87a81736e7cb72a4449ec609c4a99992e32ec", "ref_doc_id": "ed12e29d-0130-4d50-995c-6ae2d5a867ab"}, "b01fc261-a5d3-4163-a612-2f36538be0d5": {"doc_hash": "6e9bacdefb87a1e01c2cd9209ee4d1f70dd6460761816484a183875aa8cb9054", "ref_doc_id": "8a49f89a-1c56-477e-9548-00a47562f51f"}, "9450bfec-28b1-49e8-b246-4a8942f0878f": {"doc_hash": "ea86d3d22c5677749f72a1f73e733136ee55ef8bd7e6f3a49da90ebc5bc90b34", "ref_doc_id": "e0e49a7b-27c9-4e33-b0dd-9bd77aab93b8"}, "dc242849-0c98-4b80-9e98-eecb0a817143": {"doc_hash": "fdf5f954454e0fcdc89a0134116daf152a9823f6f816104bd396073311fcfb9e", "ref_doc_id": "58aeed7e-b50c-453d-97e6-fe4567615909"}, "04292cb1-81e0-4884-9b0d-284c45e38eda": {"doc_hash": "c28a0540a8c1b44d68d2368dc6cd3e66c15f44ec9f793077d8bddda1f2fa2307", "ref_doc_id": "ee3ecdfe-e123-4a78-a143-4b090300b9d7"}, "e853d4e3-0788-4418-9bb0-c888dff27d87": {"doc_hash": "bd457cb50f3c3f7a239c79a9cf887c2c8bd89e71d773c2b6bf8e239bd28f6775", "ref_doc_id": "c5611fde-0b06-4f39-8ee5-1462926e6a7e"}, "64fcb065-be75-47df-8f2a-6caff36d6968": {"doc_hash": "72904ebcc0ec8fd3289424815aa4d74d5e7701bdf87b19dbdb82a2a785e94961", "ref_doc_id": "83a5d65a-7b0e-4811-8350-d54c95af23c9"}, "34e62bc5-13a7-4f3c-9429-53b3220dc0d7": {"doc_hash": "3ed49d0af64274edecebff82c02a7b568a32f9bf4711f2616be6a457946acffb", "ref_doc_id": "e9a4d9ae-b033-4d29-a20b-5b85b896a8fe"}, "a52e31d7-c3b9-4095-9012-be76909d9d0a": {"doc_hash": "7487a2f12c58613ab92b79f7e2dfe2ae4fc486adc5f0c5d2b174dad084444d08", "ref_doc_id": "09997602-71df-4827-b08b-ddcceb2fa6b7"}, "32908c3d-5262-40c6-9a1d-74a1e9940f33": {"doc_hash": "6f7c794df69b726a5c3a86fb2fee106b7d817dafa59b4438c4f48d9565fd604e", "ref_doc_id": "8c007612-ceca-4859-821e-e8f949699739"}, "fe300689-09d4-405c-8cd7-2537c8332550": {"doc_hash": "90de3f2bb45021021eb071813c6a9862dde4d2957d5b733cf023edaffd93be2e", "ref_doc_id": "41dd2289-fdb2-416e-9928-6616a6dd832c"}, "426b88ed-5aca-470c-ac1c-1e2e826647ef": {"doc_hash": "77260226e7482bc2e3151565455c51028e34aabfdc28db95b2c54d27ec385bfb", "ref_doc_id": "52419c57-ae65-4ff0-a76f-38809201ac13"}, "9f6ce613-fdc4-4928-bf65-5eec78e35b5d": {"doc_hash": "058b1092b2f0351f5613161af607d57894dc05b1a2c86a40ef6fe542f77119eb", "ref_doc_id": "3e847f41-4220-4f5d-a9b8-cb9175f29709"}, "7fea9b02-7b80-487d-a6cd-8bd114f4a7d0": {"doc_hash": "59d80fa4908737e62ce3d1c1099a8e8ad164b989842b5c34640423bb967ff02b", "ref_doc_id": "6c6fc445-b4e2-4744-88d5-f8655ce5af18"}, "6b719978-e2d4-4f26-9d8f-f015c453e809": {"doc_hash": "26ddda10071a9361b62c1ded5879b6942ffa07cec932a1bc9090d48fea48abd1", "ref_doc_id": "e3e67105-1b12-45ef-b2e1-cd6ddbb3cf1a"}, "c0a0102b-0c21-44b9-bb38-f3a2ac82cc6c": {"doc_hash": "5e0eee16376136d866b8887871bab57187a18c436dcf3145e8c13b5d86c8f328", "ref_doc_id": "f2a5d9cd-caf9-450f-8331-5df48fd3c94c"}, "49c0c3b3-02a8-48ba-b6a2-9fc4058a6482": {"doc_hash": "90d1e1f42588f5ec6934f5bb647f871b83a6ccf766bd15a37abccb7e8e1285b3", "ref_doc_id": "dbb85775-0ff3-42aa-958c-1ac3a78e034e"}, "b09e303c-2795-49e0-ab69-8e528cdb3264": {"doc_hash": "e3c5ba187f99b97f5f47438c343dc3b47a41ab446c3b582aa7438eac96e44a34", "ref_doc_id": "4daf4552-2b4d-43c9-ae2c-03ab77e60d9f"}, "1370dfd8-f624-4027-a9e9-35a6d2568faf": {"doc_hash": "0511db334ea9d332ad223359e7013b0d136e4d4a63ded179045d8b329976c9b9", "ref_doc_id": "4ca8f838-44c1-45ae-ac33-4755f2714aac"}, "b81c6e71-dec6-42eb-bf97-5723d0baf4e9": {"doc_hash": "94f2b4a1edf2aa9a1e657d5669c2d75011b851dc29f22821f985106fd22cf58e", "ref_doc_id": "b4497ab9-2afd-4d8b-b3d5-9176986b0fdc"}, "41db2b71-aeca-47b4-9b84-9d96abd1dc56": {"doc_hash": "44191baff6c86b15a1bc7748ed429f13b87c5ebdf070cdd7bcd31ea2bbd09903", "ref_doc_id": "b4497ab9-2afd-4d8b-b3d5-9176986b0fdc"}, "48c148e0-c9d7-49ad-a775-b12b790d5061": {"doc_hash": "123edad9bbb70c2908e34b15a686d5978ece18c006535ba33f291c4312b33b2d", "ref_doc_id": "a3cebf60-6223-453e-927f-4b8cc1c5b5b5"}, "42976374-c8fe-4c5a-aba3-6335dedf0e32": {"doc_hash": "200bab8eef2c2c6a9c19eba414873fee95682bb2c22d329c254720006230093c", "ref_doc_id": "f55b9170-8cce-49e7-9198-f8f694e61808"}, "1c0586b3-8392-42a1-b290-3230baef34e4": {"doc_hash": "6b4465622f0c9bc8c5aa52a5bb487102df072d0db64e321ef8e01cb87729442d", "ref_doc_id": "d55b425f-2c7c-456f-a76e-d4defd093678"}, "6a762ca5-b07a-4a50-b67f-5514ee40908b": {"doc_hash": "0d7ff29fd527392b33ea38ac7d13af029bc28962d00f7b4b170a84a4c88eb9aa", "ref_doc_id": "ca5afee3-0cde-4e4f-8f91-a9cbc4d3b6d2"}, "ebcea148-b348-4072-9352-2f34241f75e4": {"doc_hash": "57f4d9f76fcd7382b177834ccb042bfdbc0239ec0e89ad6eb8d99fbf6e798fea", "ref_doc_id": "539f8591-5953-4660-a181-96febc6ed5c0"}, "4197c6a8-f6c7-454c-b180-02651d16321a": {"doc_hash": "dc8f74159aa4b731286b8db01a49763260b6c3ed5abdf1c12ce55b0a7d3194d2", "ref_doc_id": "c0f98458-c31c-4ef4-a41b-9ec99e614d67"}, "f0c174bc-9014-4222-a316-38c0604558ed": {"doc_hash": "136115c71d3cc4eb344473f860dd282e6f8cb575a749e43ce8711690f896c1c7", "ref_doc_id": "2290dc41-4dcc-4716-b972-ea85bcad2128"}, "9ad7cfc6-2841-4bb2-866b-9540b92e53be": {"doc_hash": "3dd4b9360bccf97125143b25fb3fd81ea59c16b07c803dab617407e7de81de51", "ref_doc_id": "a86fce18-9a32-4ceb-b5ac-b84c4db13b04"}, "b5e16504-735e-4b45-b852-832513fa2677": {"doc_hash": "fc1bd4103b8fda0e44d525abe910446c19f0d488731911be023e707de21aeeab", "ref_doc_id": "6cbf7941-acc2-401b-83c9-5cf6055c5418"}, "d02c5e4c-c17c-4f3e-a0ba-425064ff2655": {"doc_hash": "b20d4ef20cbe34f5911cd61f8776c71802cf069970a38a124d0c9968b961f97e", "ref_doc_id": "ec83aa2d-60cc-454b-98b4-f14ed817cd2a"}, "908c5982-cda3-468e-aefb-215af949be13": {"doc_hash": "0c0cbeabb58ea2f98f574a7d3798fbf37fe0158d6854a7cd3efa882168f0a78d", "ref_doc_id": "a6c539a4-563c-4469-818b-0af7e85abe18"}, "2e290ea3-891a-4e80-a1c3-941be45b3029": {"doc_hash": "243769e78680268fc36734be95b1d5dbc9211806ca9359b7fac597af07c9caae", "ref_doc_id": "2ff26c0e-6a5d-4217-bf2f-ad58ff69e47b"}, "c47d994c-a4e5-4dbd-938f-abdb52be9263": {"doc_hash": "32665230efbaf6ca4374fb2d0311b5d07a1d24d889dbe515589671f00a452246", "ref_doc_id": "9b11cfb2-944f-4ee3-93f6-48af277ad8ae"}, "6ce72a0a-d954-4c06-8ea4-ef08d62f32b1": {"doc_hash": "eb3577af11705996897b39019f02a2b0d84c10eee881641d410bff635d54df7f", "ref_doc_id": "6a860b3d-0380-4b04-b29a-cf435a112968"}, "9664f6cf-08ba-4659-8324-33be2c04c5ad": {"doc_hash": "b9581288936fbd4724ada1c95b4e5df09a63d42fda4a7ac8dad3046d58722e3f", "ref_doc_id": "3f234a7d-a8c8-4c0c-b6ab-8098854a1e6e"}, "dc2e3edb-c8bf-4c0d-8ec5-f8810277a6fc": {"doc_hash": "e1b438db39a869bbbb8769b35df559bb7594c7803c730b946b151af0adced404", "ref_doc_id": "4af3f9ce-37cf-4e2a-957f-e0bae849a1a3"}, "5c9a208e-9d67-4541-a2e9-80f328d3099d": {"doc_hash": "a9e7e2455dd58567200718dbd3cfb2181262045264ef8591d8f3219185328d40", "ref_doc_id": "2eb8ae5b-bda3-4f8e-80ce-4952786f603c"}, "2785e8eb-cb22-4d25-a612-409558dc2f49": {"doc_hash": "c84bb09c96ad6022785caf55608019892e317538943d390d32c608065f0b3026", "ref_doc_id": "f94bcf04-9a54-4790-a1c8-7a8d22e987c5"}, "4c206349-a8fe-4f87-9aa1-d87203b87282": {"doc_hash": "aae97dceb7b2668a11476faa694d55871ce30dacf66a0f2406e8379065c43bf9", "ref_doc_id": "ea81f8c1-6216-493b-aad2-6f14fbdb22a1"}, "8eaed070-28e9-4dbe-88c2-76f80f6cef9c": {"doc_hash": "79f1049a8b677c2a4c1c93c675af7079c0fa12fd90797c1e8127226e7cc52165", "ref_doc_id": "71f3c27f-ae98-4dea-a337-dd07ccc819a1"}, "858bc6bb-03a7-48f1-9a1c-334681b036b5": {"doc_hash": "ae6b1dc247bf10b9c088662689b54b1069cbe6027b934250791e4ab90121f330", "ref_doc_id": "1c3e8b1c-1dcd-45b1-8664-3ad34bccc770"}, "cff8c484-2dde-447f-b5b0-89451db3b8c4": {"doc_hash": "4fb6f5434e80e79bf9b78238b36713250b05f7a8e8080f8773deb84d16f2a50f", "ref_doc_id": "803f4178-7f87-4f8f-891d-cb59fddb0f0a"}, "7adf0459-2c47-48f5-ab55-4f0d5b1950bf": {"doc_hash": "d6bca7486db9128a21fcb51f5768fca96cac0141b6c258ad4310d5895c0daa9b", "ref_doc_id": "7b710131-364e-4bc5-b2e9-e7f4b5fcfa2a"}, "779d4626-b38a-4783-861b-5e8f6544bfd0": {"doc_hash": "5ac9421d8774dee30c7cc899397820ebaeabba7ad017ea2672255bce93e8a6f0", "ref_doc_id": "e3abc501-edbf-4607-a901-88279381cc2c"}, "8d705065-30b3-401e-be16-dd9e194a81ed": {"doc_hash": "ea036ea95abf07d93dce8756c08ffc3fdbe451dda25e19fb0b5d54df98f0cdc4", "ref_doc_id": "027c61ed-ec7c-4476-8731-74c8571cee84"}, "597bf18a-85fb-460f-920c-55891cf72679": {"doc_hash": "a4b63d87f6e520221f1e063911e6b494b83de693097d45c1ae5f3f68f40b566b", "ref_doc_id": "2f75c810-f18c-4067-9252-4d09d1d18b2f"}, "9ecd20bb-8452-4e74-8efc-c13a894491c0": {"doc_hash": "381ee448e2e4001f190161019e54e074c061476d92e063abcd978b39027d3ec3", "ref_doc_id": "e2c78923-1204-4f05-b887-99a6bff120ab"}, "78dcd2df-213a-4088-b4ee-6fb5b28216ec": {"doc_hash": "ab6eebe3a9720296c90c237ca557d5354eebbf8f0b5a7f7a23e8639b3b6067ce", "ref_doc_id": "0d7fab36-2c6f-4e23-b90f-2bc6730da0a0"}, "42573e27-8a0e-42a1-8944-db1877d0f848": {"doc_hash": "eb76e2ce16cdbce66dcd3a5c3a014e1f0afea623239455a7c8c5f5dda7e147e8", "ref_doc_id": "10dbccf2-1a8e-4b8a-b256-7d9568b285fe"}, "e0e83651-c7fc-4c99-8ec7-38f068e77c2c": {"doc_hash": "01edc6d24d40f30472f5f09989813145719cff82e904edc219c62ea4eacfc8f5", "ref_doc_id": "33fdc0a1-6561-48c3-998e-89c0333c7e9f"}, "d39325d7-1383-4bf9-9610-fa7bcaf1a753": {"doc_hash": "a82eddd76051f90bca2b75bfd19ffae7e35fa7279c48bafd48802176f2f4593e", "ref_doc_id": "4731bd9c-3858-4789-8f98-7cf1866689f5"}, "5718c26a-17c5-4971-b398-7d33bad5d82e": {"doc_hash": "d914c8be3fb6ae8a67c650970d5cdf31a6b938ade67ec6ab2ba668410d779aab", "ref_doc_id": "f3ce54f5-9b69-4b0f-86b7-ba5bc66d7085"}, "cc03cb4a-6299-4a8c-8651-b2910d7560f2": {"doc_hash": "fc4772031067094d5a7c012d26490f16567660eb04b69b401672e1b5363e3ec6", "ref_doc_id": "2e6140c2-6bb9-4cee-aa40-0ceba53a44b1"}, "8dd02411-dc47-43cd-b0bd-2a35f5cf09b0": {"doc_hash": "20b0a385666665a55e92f8d171519846d341c7268652bff5290dd3e6abb5bc49", "ref_doc_id": "c3304f9a-595a-4dfc-96ba-bbd19e6f4f57"}, "a1c2a556-9dfc-49df-b54d-14d54aca1096": {"doc_hash": "ce29fc8e85e000e0f55374ded4905f3bc122cf8eabbcc8230956b6055e4b0ebb", "ref_doc_id": "fa627162-bb28-438d-b7a8-5456eb82fb3c"}, "2d034c71-061b-4cb0-bbd0-bfffb2baf3b8": {"doc_hash": "6ee0eb41e77c3d947d97f0968f841b452374e27622a769cb37205a4ee0fce2ba", "ref_doc_id": "e05b56a2-c7c5-4c49-ba44-39e60e89b1c1"}, "8ed6ddf9-c718-419c-b010-bae367075e17": {"doc_hash": "edfde845388467d6fd07528ca53d808cf3fb3dd3784d7a1de7ddc3de6a05f9b3", "ref_doc_id": "c41e11d9-ebaa-48dc-8284-7ed5367bf332"}, "f5fd928e-9e4b-43cc-941b-1fcb648478c8": {"doc_hash": "1bf182b0a272573a87956cb0de9968f4e0005a95dd51b323d2586467fa0fec1a", "ref_doc_id": "0177558b-9d0d-49a6-9644-fc9d74730c0f"}, "a8a2eca6-d2fb-4e86-85c0-e24609c8c2de": {"doc_hash": "a332d811e44729cc02cc475891271ab6c633f937a39e0cafec6af4a6de991487", "ref_doc_id": "b7e2b995-a7fc-418b-8078-25620a255b71"}, "72a8566f-ed41-40eb-9279-8c358eed6bbd": {"doc_hash": "c4f559d0dd742c7ed4d40e563decb0d578977d0ff560f723ed5439f1920cdd6d", "ref_doc_id": "169bbaad-84ad-4eda-acfc-26415a5e5f88"}, "be4536e5-1cac-4089-a8b5-50876374fd2a": {"doc_hash": "d268f32d873487ccc132e906fed3a07914ba67e5bf6acc82125e7e5295ed447b", "ref_doc_id": "a4c1fb0e-2a75-4b9c-adb4-a439757ced40"}, "029479cd-ccb8-45aa-84e0-02032ed0d94a": {"doc_hash": "31687ec8d50fe625deacb4bd08e5d5b6a3557e4ab26fea79f26b56df29bd0433", "ref_doc_id": "15e6d703-6715-4e5b-a989-4a4b14446bdd"}, "ac0906f4-73f0-4d90-9304-1ae39cfd48fa": {"doc_hash": "915b3e2508dd070ead6e0130fbf86a1a94c394e8d2a4b3ab9caaf7f154719a5e", "ref_doc_id": "04a26b1e-a807-4772-bce8-c0081849eb08"}, "43a4e60c-4f18-4094-aab7-bf7a64211336": {"doc_hash": "42bc5609fb86587b846145d4a36c08fa5c9371845c77b5ac8e5cc2ecf14bc32b", "ref_doc_id": "d9da3902-bdef-4d17-ab94-bdd46cf6fcb0"}, "77bce36b-8ad8-476f-82db-ae0732a8c309": {"doc_hash": "6e60eb8044939efbc20b73b2f0edd012506ac584de6fc9fe31f4c8f0f8d6792a", "ref_doc_id": "5851eca3-df58-4608-9748-65667ef53334"}, "e6e7873b-2f75-4530-bd92-8a587469342f": {"doc_hash": "5f8458f559d202404a712d5546a43d4a73ede3cc180c3ac15da71c09301b2b81", "ref_doc_id": "b40c98d9-c3b7-4bd2-bf36-3a0ba25d05e5"}, "b18dc1b6-5d0a-490d-8b78-701dec761945": {"doc_hash": "1aea7864692a2ac3844a5672df4e36d86c5c3811a55b4aa18566695c8ee38a48", "ref_doc_id": "efa53c04-3fa9-41df-83d5-fbacbfba05e1"}, "ba2cf730-235f-48c8-8499-a11271d769f3": {"doc_hash": "1cbf30ecf8581801f3564ce1155fdd4f8f8d94847e2e031f56d925b3ea6887eb", "ref_doc_id": "04f3b053-992a-4ad4-97cd-9def0e9667cd"}, "f1132bd4-f2c3-4c87-aaaf-89d6adc3e674": {"doc_hash": "b95f9763850d3b42cc11383255ce596ecaf495b53342ea37de4ff9758f301e1f", "ref_doc_id": "fed0817b-0036-47d5-ab89-964ac95af8a4"}, "5baa32cb-d5f4-42ed-aeda-58dd11f2fbfb": {"doc_hash": "21dee05c687159d909041a455517082a425c753a9e2b2339063276c66dc6e347", "ref_doc_id": "bf3551bb-a69b-4786-8b97-9e1991779b25"}, "fa139241-552f-443c-9c90-64fee4377610": {"doc_hash": "db4043f9a4e5ad110af8edb8c0c3bc93c1250512afca32b7ba0b8336b8e03fd5", "ref_doc_id": "dd4802ad-d90b-4097-b027-0c9063d87a6b"}, "26325910-8f1d-45ba-a499-6be1cf11e2de": {"doc_hash": "1814745c0360a454298145e0b92116d5cdff0b260ab6c1c6d395c07ea139385a", "ref_doc_id": "e1dbcc9b-86f2-4156-989c-97a5793dd227"}, "444ca371-63f5-4bc7-87d5-af528c7eea75": {"doc_hash": "b548312c3777d05855dc04ea27b6c75b108179e1e76867d02904ea9b20c34ca5", "ref_doc_id": "afbb6827-a175-4052-8938-0a65fa569958"}, "cdd168c2-9c88-449b-8bf7-020c5a9a094f": {"doc_hash": "725069acd7583221b21d1d61246d3bd21a9333f07a9ac9e95a8ab344dd949329", "ref_doc_id": "d3f89eb8-9591-4eb8-90f5-78862abd97ef"}, "24fc1550-be07-42f3-9188-2c53766041a7": {"doc_hash": "79ba8cc16ebf245c409ad57f486e4515dcf7d7539defa41e720a3c24035fdf06", "ref_doc_id": "80239979-c162-4be3-a87b-d736b75d6d86"}, "58670055-e2c8-412b-bf7a-931a857941e6": {"doc_hash": "716c665a4ab8cfc891d834d1c1a575d36c588bb77ec04672db5c1c3974ff1055", "ref_doc_id": "b632da1c-a299-45b5-af0a-c02d87d51ab0"}, "fb59083c-69c3-4755-a769-4cd8b99041bf": {"doc_hash": "bd5d82cadf0371356b1c656120e3aa92858ce82915a770b7a1ef84a45f60676b", "ref_doc_id": "5e01de27-ac07-485f-8ec8-aaa8727920fc"}, "d34643fb-423f-4160-8127-37ba20bf905b": {"doc_hash": "f0009f88f7bc06c2b9f2672cb09b94877456acdba118f3a80a2595ed42c9416b", "ref_doc_id": "1054260f-7162-43e1-87e2-4adc704520aa"}, "22e59c78-09f1-4246-84b7-6fbbefbb6138": {"doc_hash": "98344fccc6af1a309bc105083ad92f00c11f93ff14ddb6aecfdf64ef502f41a6", "ref_doc_id": "8f275a63-b889-4200-9f19-6b5e79099395"}, "e7cf1409-e420-4b5d-8d5a-1fe3b6f93e8d": {"doc_hash": "78925584fc6918cd7fe6e55f721b791b2fc933d4b282c2b4e94dee8972129732", "ref_doc_id": "f849f020-c8b2-47ef-a5ad-8a712f14a243"}, "69ce28e1-6a0d-40a2-80a4-53bec8d6878a": {"doc_hash": "52d878a04d18cf29c43ed140c830ff6e4dff06811e79655d402ac1c97707adf0", "ref_doc_id": "51a40464-b60a-4af5-8ed7-0aeac71e3790"}, "408fe7dc-92b5-4f10-a3bc-bc2989373c24": {"doc_hash": "cb3d79c52c1baf9188e63e16c2747f7cf4a1161821ca63281a79996c56f78303", "ref_doc_id": "50ac2efc-012c-4509-834a-ed09ae8f63de"}, "1cb034ee-b1f4-4619-84d5-9dbbcdde5a9d": {"doc_hash": "988df5c14147ee5aa853d1251de020be8b867479af5816134695624279567c22", "ref_doc_id": "d866a6a8-3bd0-464d-848c-abe58043d188"}, "0b1f4a46-922e-4d55-9d4d-c5e0b0211409": {"doc_hash": "51f27ffe1573ec2f1ee6279784c4c0a4620cc9f8fee5cce7c5440e5eefe95a8a", "ref_doc_id": "87b2b43c-0df0-4eb3-9aea-59147a753c60"}, "80ab7cc7-5d4a-4438-9f55-306b0b8c1038": {"doc_hash": "4e12417cfec7c2c59928ad4e191501ab9b8d97479011830c4775c36d3d7458a3", "ref_doc_id": "f2405322-6a69-49ab-9945-70f2c4a4c31c"}, "d45ed6a6-1de5-429c-8e27-b88b43011766": {"doc_hash": "2afff41dc7426278cd5ef5b0b65ed20149c18ad570cf711aa8a425d039c5cb1d", "ref_doc_id": "f287c9f4-8311-4f48-8743-675111602dd0"}, "b3e6608b-393c-4629-91f8-ebc8cf32d140": {"doc_hash": "463d608a65a2985954edb732090fdc6fe4153e387375a795561a37b86f0aed5d", "ref_doc_id": "a56deb37-fdb5-4992-8631-cc26f94c6811"}, "148f4746-0472-4818-b762-cf8419471311": {"doc_hash": "3bb3dd3f4c879ddec2ebeed894808655c9341e18432141d0f934579ce2953db8", "ref_doc_id": "c9269bbc-a5c0-4847-871e-c48413c459f5"}, "f4035c4f-dd38-4eaf-95d6-8bbaaec46ffe": {"doc_hash": "2e5f903ecedbc93724a7ed66cb4d0f625150e8775679dbde4084f8b5b93c97e5", "ref_doc_id": "a688981c-5fdd-4b87-90f9-4e5a7c7b9f2a"}, "7e4b2efc-b005-4b28-9303-39a1a3e7c40c": {"doc_hash": "3d310798f4141dddf681b5fcbef6d7fe9c7a9a12e67ef99ccdb29596b52f8553", "ref_doc_id": "6ce55b5e-e69b-4764-91b4-0bf267aefb9c"}, "6967bae5-313b-4026-a70f-7c49d38ff1e6": {"doc_hash": "47d39b4d7895dd86fbe3a64a98e1c643bc58a30c3fceb6a829d9925809f3be88", "ref_doc_id": "dce7d637-fa63-4b5a-a7e3-a173d79e4d55"}, "e05e2cda-ea97-4ec3-b289-f3c25ed78210": {"doc_hash": "6da38be6e4c47f193c80f735c3fd42a454d55b75b957ed734b69a36ea0333117", "ref_doc_id": "88fdec93-e525-4504-a951-124a7b7fb27d"}, "3d911852-496c-41c8-9b0e-d0e947f76d3e": {"doc_hash": "48f622eb58c1bacefa5e12141c666a1c12a614b1ecdb6de633c3ab58867a18b4", "ref_doc_id": "0372323a-6121-416a-9281-85ba8271185f"}, "dd5dd3dc-9e12-4008-96c0-0512503f36d8": {"doc_hash": "c55bb182b9c6d90a1f21d78e7f8000f79c6502e9544119e3c44746554ce66921", "ref_doc_id": "8613a745-e3ad-428f-a3f4-f46d707a3be6"}, "613c648c-620d-42f5-948f-8866b19892ce": {"doc_hash": "d1cb11c1249ef868660faf242df26d76fc3413f7f3b495c324f413e11dec49a7", "ref_doc_id": "d67d9b9d-a347-4ebd-8c68-eab5e57d6a15"}, "9e3dbff5-ebd7-4dac-be74-1111171328cc": {"doc_hash": "ba989c06bd7b919cf85ba22cc670b38d4bf15101cb9923415a266d4c80b005e9", "ref_doc_id": "d4bc8f5d-66d9-4d67-80df-5a54f94d49eb"}, "ce6351d7-0ac9-4266-ade0-e06225721be1": {"doc_hash": "f63648b6a2f42db0cd7cb9df1385309b50d23b0d93190e5f8d7f952e07f2ce36", "ref_doc_id": "e94de2b8-a1c9-401e-b46b-55842d2b42c8"}, "838f6c59-bf15-4887-84f1-3593bcbb5af6": {"doc_hash": "2490a6388669553be65d078b26bfe0370aa43b5e2d8d9673ff20b87e74497015", "ref_doc_id": "07a578e6-45e9-42ab-a845-4e10000dfdbd"}, "5df98e36-fc29-4a6e-8947-a644905fd532": {"doc_hash": "8e1f602083a940ff3cb961cb64508b84477c766d449a32f22ac84db73d53cc6a", "ref_doc_id": "223a0db6-4f51-4623-9c88-c6f1e3e57f3e"}, "05dd4dcf-3b28-46a1-8b4f-60a08bc0639d": {"doc_hash": "5444663f7c2afd23e56e7118de6180d627116a10bf7cc4082219f73dad8ebae5", "ref_doc_id": "290cf564-ff5f-4e14-aab0-e2daab98f2d8"}, "019979f0-13a5-4bc5-9fc4-3267d007e25f": {"doc_hash": "82f3f117b5710599db48a618d057bbeeb1602afdd425c5cac97481cfb9759d58", "ref_doc_id": "ffe8d2c3-f7b0-4546-a0b6-62af01debd44"}, "2905d948-3972-4c07-a434-30536c23caf3": {"doc_hash": "c84f4f313d3d747edbd5f114a9aecc96e42b04e63cd1eb761eb1634fd5bb7817", "ref_doc_id": "744d61ac-3c3f-4bcd-a02a-75cd6e617007"}, "e67904c6-050b-4b49-8266-577114e62da7": {"doc_hash": "2438d979f8b97576d1310682e6cfc404475eee0be4601c9717aaefcf4461fba4", "ref_doc_id": "f0ec5205-b0be-4aed-82df-6d032d3d95be"}, "263fa9d3-b7d7-4835-880b-8b61605e29e9": {"doc_hash": "a474812b77eabf2e8d29c8b1a2d3eaef8c66dc214ae2cff4b6f9cf62edec51f9", "ref_doc_id": "a43a5582-b664-4232-8cbd-e1a698c76529"}, "174119db-f271-44f2-b1a5-cb9c309ef103": {"doc_hash": "36333653bb17d4a2979f7a8d629ab57dc0e8e529d02c6c8a282378df747aabea", "ref_doc_id": "7dddbbb6-98c9-40b3-9aa4-ee6d51fb5a10"}, "f1eb7004-5e6e-4969-9537-5405184494df": {"doc_hash": "ebeadab6fd852ae4a403cf2b64520d174ae8a858c8e2d983a9fc44b7ef37870b", "ref_doc_id": "d4d49f27-79ad-4678-a77c-2e4773879061"}, "3df43b51-6aab-406b-9ebc-4f521cf1618b": {"doc_hash": "219fb8cb579ad3883bdf648453bae61153e9bdbc90164dc9922ebd3a36691a18", "ref_doc_id": "35e396a6-b1b3-4ba3-b8da-3e78d25e7c11"}, "31584f26-5cf2-4a82-bdf1-884b1d66f78e": {"doc_hash": "eb6b089c4b03f979bba9e326def174013331e5950f2a428bcb2b3fc0955a0b73", "ref_doc_id": "5bf9f36f-1ffc-450e-ad32-5aa4ec0b074e"}, "17a9411d-5b20-4b2b-b595-c710ed69773f": {"doc_hash": "e5413c829c8cadcd3069f0ea4e136c02f30cb4e976a5ef82980f8592745db133", "ref_doc_id": "799365a7-246d-4db8-9743-423571ba73d4"}, "4be4f840-841a-4a3f-8628-7e0c2ca1c2ca": {"doc_hash": "1a4818246a3a7761b30cacf62593d564c5a472a7c4f53372f474eeea1b9157a3", "ref_doc_id": "d0422eba-a342-4da4-a900-10f22e1af418"}, "aa1f6aab-19dd-46e5-ba87-6dcf880a75e1": {"doc_hash": "d7b1680274986ef3f6aba459a52b21d047f4ca165a291b54a839fd40be3d20d3", "ref_doc_id": "1886b990-6e64-458b-a499-b0788432dc1b"}, "d3a05920-199c-4102-927c-3b9129e2c475": {"doc_hash": "41a44dc0a24da1c9b6d5b6fcfc33d5b77778d6bc1ed4513ae50305aa514ec641", "ref_doc_id": "8b750aba-9a8d-44cd-a6de-5bd835fe7668"}, "d5c91e31-68dc-4b65-8d54-83e83cb0a283": {"doc_hash": "110a18f3b13409cfe894ee866831449a6d1aa62f3bb735d11c9edc15f12c4294", "ref_doc_id": "c8dd567f-3b26-42ba-a364-e1a6cc1aea91"}, "30188c2a-405e-4df6-aed8-a27c80572983": {"doc_hash": "763dd858f64c5ef07bed035577b5a04c3de4d58c50778041d80ae9a796e5a4d0", "ref_doc_id": "13989220-a054-4245-a93e-d6888b340135"}, "54b3843d-c918-46aa-81c7-2d3a5d722bc5": {"doc_hash": "8e1fc5610487e066decb49c726885558e689025dbc9fe8daf9f4bf740637c9f4", "ref_doc_id": "697cfd63-29e2-4306-be1f-256208ad1dd6"}, "67ecc16d-d2e1-40eb-b131-1937eb90bab2": {"doc_hash": "e6d4931b009c161461afb88e7a4fb43b12c6bf610f4d80a0dfd4045596ca90a8", "ref_doc_id": "5da6453a-0764-4d06-bf7d-57dcc8aa8ffe"}, "3cbf3fe0-7e29-42f5-95bb-3428ee9bde41": {"doc_hash": "dadc38c27d3556e8ae08a1899e48857cae8dbd2d9a1f244278f4972d4dce28ee", "ref_doc_id": "726dd4aa-a665-4d0f-88a8-14d896a7ffb3"}, "430b4321-1113-45e0-a4a1-1af224b6fd4b": {"doc_hash": "4ce1b250185c122eeaa8dc5695b0df1d00dca7134d65c82327778940f4d78010", "ref_doc_id": "e616ef71-4a0b-4cab-b1e3-11e4414e2198"}, "64d8ac29-2b6d-41c3-add3-57d597854303": {"doc_hash": "2982c1e86e0d389c842d705cb8ec5c93f67cc17a6e64b2d38c6b8d93e4578bdc", "ref_doc_id": "04f11f87-b9d7-4add-93cd-fddd8ea9c421"}, "5f19ccd3-1aac-4728-9c49-874e3d58447a": {"doc_hash": "660945e0a46ebb1489e8966312105812b027cf28675a20e39939b733274d1263", "ref_doc_id": "84fce7b1-c416-420e-8163-895208ff3738"}, "db5e19e5-f624-45ee-bbce-840acaf4ea40": {"doc_hash": "8496f3242a5075b5c7af3990c94e9f312f0a775e743924d3b8d9fa548f77f459", "ref_doc_id": "f905dd96-3364-41de-b8d9-9b52b790479c"}, "f3743615-5342-4734-93a1-58f5dc45fcef": {"doc_hash": "9df394d0afc8fd0e9f5e79c2d7dfc40f68dcf92ad0624818d1e44222a3daa0e5", "ref_doc_id": "32d90b03-e4d9-4c78-a68b-9f2757d3c282"}, "035ec694-4c56-447d-9d81-445ca6ddf586": {"doc_hash": "e6e46f9833f587f5c763831a8b68b2662c6ebbec0db7b8ef32580ae53c76fbf1", "ref_doc_id": "d4e3cdfd-5afd-4465-b1b6-297275b2075b"}, "775d3e70-ba3e-4ee9-a4a3-937c85ca2944": {"doc_hash": "5e3596e29f94c0103a20cb7d17ffe9bd8a62e61959cc4ded80716a93ebbe6f61", "ref_doc_id": "c926d539-2327-463d-9e6e-e70ffe3abd2f"}, "02218cea-5376-426a-99e9-93ec0e45bd3f": {"doc_hash": "fd119c6f352d68c6a6fbb4b1026904a6fdcd820e33cba9ae865ec28426868fce", "ref_doc_id": "cccca899-8ab8-4615-81b0-1dac5d48ed99"}, "94183481-7d55-4cc2-a5ce-fbed7497cf69": {"doc_hash": "3e9970e0291e52c438aac7d11c5aeac573e98e9c29c7d1c85731872f1e7f7a38", "ref_doc_id": "c0e197b3-ba58-4e4b-8214-20ea6bb78a63"}, "1469041f-0eb7-4286-90ea-e28a153a1b8e": {"doc_hash": "fe44313678cdf04827c6acb963ad6911ea0cbd2a57828fb48ec30d5eee69d38f", "ref_doc_id": "dc1dc521-9838-4b9a-ad8d-70416b301089"}, "a4df2723-367d-4aa4-9fb8-2f4b3037985c": {"doc_hash": "b6bbb7a7b5a3b257396c5368bb79694d60a3a409d73d44c970e30bab88844128", "ref_doc_id": "19b71fcd-15d8-4271-a2a3-125f386bbc21"}, "68e68022-8735-4f93-83ce-df521ef92a1d": {"doc_hash": "998a94d72b18d47ea9016c3136f5baa69e4060648305c1908ddc218dad898ea9", "ref_doc_id": "e09f0a03-a02d-4663-9d48-1bf00d5fdc4e"}, "ecf2bc3c-4b78-4d2f-9e84-523d290b5f19": {"doc_hash": "e1bb3e2145233f17e1190d09bf6a212f02d865883e42b3dd3a0227f84b177330", "ref_doc_id": "25e03c5c-4106-46c5-819b-5da441c12aa8"}, "d1d6223e-d11a-4aa4-900b-f883b02c8126": {"doc_hash": "51c7deb01f3ae35ffb7162ea4f86164be3c137c437075096fe434b7df2cd14b7", "ref_doc_id": "99428655-c2f8-4f80-89ee-416f5a73c506"}, "e36500f0-5eb1-480f-a09c-cebe16a60844": {"doc_hash": "484c77fa98bb198c258787a7d030f4b293b5aa36204a10f5b24808165d831369", "ref_doc_id": "a8b8a16d-03a1-417c-abae-fa999fefa8b9"}, "5f13b708-06f7-4a63-af40-c35b59334a79": {"doc_hash": "108ae0faa6e9e2e6a1c1f6a52c294cf1cab7955298c90e59f799b350a80e0660", "ref_doc_id": "620c0c64-71af-4f84-9bea-9cb655339ebf"}, "bbc010b8-4a0d-4e97-b739-f966e45ff91d": {"doc_hash": "df793e5c2541b3dd7ae01ae4ad4764d314d6ac51b44a6abd504008166032b125", "ref_doc_id": "c4708dd5-68d4-4aae-8ccf-78ba5b0bb2e4"}, "e3c2fe52-ad60-4196-969d-fbe856fd3520": {"doc_hash": "3a99d2b92e48b05dbc52fc4456a4bfd165bfbc433fa9c5973f52ca9528753890", "ref_doc_id": "c2588257-46a5-4107-aab9-e30dfc2f039d"}, "0fadaa87-845b-440a-9256-af5304735ecf": {"doc_hash": "100d9a5ab0763725a3a9776c037d2b845bb843f60e09c25b79b1a2e794088170", "ref_doc_id": "ba7a052b-e731-4020-822a-b834a9201dcd"}, "7ffde410-532e-43fb-8e2a-b52629a7b4cc": {"doc_hash": "30ae5e0ffd3df9a8dba31fea18c65fca50de0b100b10719a8c351f5131b3142b", "ref_doc_id": "c7475fab-c6f8-4a13-956a-ee42b4597bb6"}, "37da0edb-cea7-4c0a-baa2-9c3e00c30027": {"doc_hash": "e0141d08c1e80f42aaf4f8a8ad1a9662480478a250cd877213933f256f393978", "ref_doc_id": "4f9fc753-4917-4a02-87a9-e3a23c6a9764"}, "74916d55-4321-4e62-878f-fd732b83b0dd": {"doc_hash": "a39e34fcaab8c603e0bc51a86770c59cd5a6abb5ff0b37ff746a8ccc8d9aeed6", "ref_doc_id": "c85615fe-eab1-4b76-8657-f4b59ca1cdf0"}, "df3f39db-af4b-4003-a2f5-37b8606f399a": {"doc_hash": "54b9f25ec831044ad9f3312dabc201f7db221db98984b67e949619a189d414f5", "ref_doc_id": "f047a5c3-91c6-410f-8802-1a7a518cd5be"}, "509f4580-14bc-46c7-b6f7-b51f99f08ab9": {"doc_hash": "6861aad22f5d8340ca07748f0a817b871a8316d2b44a3b5be1e0ef8e283942d6", "ref_doc_id": "a8f5e1c0-1477-4982-8b0f-eb310384510e"}, "779d0987-a343-4e99-a569-9f0e2cd6a793": {"doc_hash": "fff8d519a6a5d92b5092b5553ccb5f5df7dd808c591993c74b5711dbaa5f2b69", "ref_doc_id": "a148c81f-57e5-4ebb-8f75-a9338a4f350a"}, "ead8c55b-772d-41ef-bdfe-82354f1f8e9c": {"doc_hash": "47461fd83ae59de8f91b324b26c941c72f1933a7c22d5de934086e381b966dd5", "ref_doc_id": "ccbdd146-08da-4e5e-bee7-c08456289b09"}, "49a9b64c-675a-4ef8-864a-11b91ac76fb0": {"doc_hash": "f19a444de51690d30fec4278b99a05547f755f6b233aa21fba011f5e8faa3282", "ref_doc_id": "575f2d11-d731-47d2-ac53-6fb66fcfba4f"}, "87bd4044-c308-4483-acc5-75aa1ed6b0d2": {"doc_hash": "bce945f7de1bdf43d66be5b92e519f3857ab91ea587bedbafe99385555b71f41", "ref_doc_id": "fc76e065-cd9a-477d-bdbc-8b4ee513fbb1"}, "2cd9ff24-6171-4849-ad82-89eb228db8ad": {"doc_hash": "c8480d3e2f8d13e0e448d7df18c7d60b8c261f85666791fbfd2db54ff2f8a086", "ref_doc_id": "e9fee1c7-0f03-454e-8c49-4aa4c54980fe"}, "ce13a010-200c-44bc-bcf9-7c9aa5ff13bf": {"doc_hash": "a91771af94c769a949028d6799b035b17825e3c673870ca7d8889d23dc47fa4d", "ref_doc_id": "4bd5360e-180f-4515-af78-3351033db5cd"}, "7f3bae4b-d9bf-4146-9a9d-97aec35c22a4": {"doc_hash": "f0629edd3603f785132e143a3dccc1b9e2b3ef33f8561a1f3662b7ed0e9e5b50", "ref_doc_id": "b562eff1-8611-4a50-9cae-734517aaaba6"}, "4894c612-4f4b-44ef-b446-5ad895e0057c": {"doc_hash": "863a8dec6126efbc8948bd24174bb08455d7666b1fea8eacd9d120cf0730af25", "ref_doc_id": "cd1debd8-c3aa-4c88-a574-047a013dada4"}, "a24daadd-e48d-48da-8f25-e666ab587b6e": {"doc_hash": "4eaa10739396082b432eb718fbc230fe24e1d6f6599e64c2b633b4228af6bc67", "ref_doc_id": "92a40f89-2155-455d-b05a-89b585944884"}, "9cc3475c-5c68-4340-8bae-5c9059167510": {"doc_hash": "60f3e07087cae45c472949334a48e5cb86a084994571bb3fd75810f4845e355d", "ref_doc_id": "a08a4887-bebe-4910-a559-29469701d3bd"}, "bb1f9b28-0d9d-4ec6-a573-d388758012fa": {"doc_hash": "1aa753d87da2b4f2dbca4fdcf115410a720665886cb034e3de8a71713ef1cda4", "ref_doc_id": "ae4786c2-b8c6-4b78-b1ce-4bc15a04f6cb"}, "5f479c12-1239-46ae-bfb0-2f0aaf4de1c6": {"doc_hash": "9277f7f7058b266c516c9784c4d68f2e2b424ca731091a40055ad44b5c9d98af", "ref_doc_id": "23fa9e9f-f346-4c66-a40a-6ebaac43783a"}, "32e57dc5-01cd-4151-a9fd-a5e3cdf34d99": {"doc_hash": "6ebd4bb234a3d9314fdc23e8168c1a8d0ddefe959efcbe06181115993e046b60", "ref_doc_id": "2d91f457-af7b-482c-87c2-bb6c5951eeb6"}, "11fed973-8cb7-4715-b804-2eae5a034d4f": {"doc_hash": "c8580f3cb0dc608aee2d1bbd7701f96837ad138183a2601a855dffb3f9f883e1", "ref_doc_id": "4fdd7801-f42e-4314-a8bf-54ab7349d058"}, "30053f6f-ce96-4f66-9c43-b42aa00e65da": {"doc_hash": "9c6b7de2ce3570ec82adbe7a01dd7c52bcef5f138def995f1a114a6a3b72768c", "ref_doc_id": "562d8c23-f0de-4efa-bb19-3f8dbfc4e739"}, "ccac079e-86ed-4539-b564-d1652a576d38": {"doc_hash": "a7d12ab88cbd9ee93f54a63e09217d8d073a2bb7aab06b77daebcc10827a3cc3", "ref_doc_id": "329513eb-9027-4f77-a34d-9691b4b55308"}, "f07195ae-53b0-43c7-a0b3-76b435a8879a": {"doc_hash": "266fbb934d7aae58b82935dccc52a762e8aa45584ac0b794091322cab4de0a0c", "ref_doc_id": "ecae360b-ffea-4275-9cf2-c9348f9912d1"}, "64fad90e-236d-415a-979b-20b9861e98b0": {"doc_hash": "f74eea4d1022fd5fe103b499ca419c84a674cee5c11523ed07f19541082ee86f", "ref_doc_id": "ba46548f-c0e3-42b1-91bd-1edcfdb78f64"}, "12a2437d-8cc5-47d2-82f0-e48af71d2762": {"doc_hash": "cf8f70e7d2e5219dd67859ffdd088d5533d429a37f7c8e2a09758983626733ab", "ref_doc_id": "ea686be8-b317-47f8-bce2-f5f58a9ff1b5"}, "3a9c156b-870c-4ffd-afa1-9f00d1604024": {"doc_hash": "32b470b75c255adf2f9a1f67257e097258dabcd9378c9cf83458fba6c3440238", "ref_doc_id": "118f7e01-ba0b-4828-ae19-5afe6c94367a"}, "8c151c8e-d7e3-486b-9231-1518589aa755": {"doc_hash": "cb36d1eeae9dd2fbf14435434c3aa2f01778dbd47c57aeb453356a8a556e3395", "ref_doc_id": "22b30988-4276-4847-a318-d41456d456a5"}, "c2e416c5-4cdd-46b2-8336-2faa9387332e": {"doc_hash": "f33898d339fd46c946ab30fc1527c9106aefcfe11438ceb2f712a3ca56128b19", "ref_doc_id": "689e2465-c0e9-46d9-b7d0-9c7cab6543dd"}, "83ef3da2-6102-4e08-9b77-a835f3d2612a": {"doc_hash": "0b6c6afe7090a513492ddcc066876fb7c2315bae51136bee01064a9acf5d4936", "ref_doc_id": "ca7589bb-9b3e-4601-804d-28498152a7ad"}, "9ec91f4b-74db-481d-a982-0ac0afece875": {"doc_hash": "4dd4c943e8563e8bc03abff0ed329819d5c0c6835d38b25e7ddff4ac5b1569da", "ref_doc_id": "89e98d9b-081a-42da-9d8b-91abcd90bf1f"}, "0da49feb-0ae9-4576-adfc-a377ffbcb18c": {"doc_hash": "540f3d135a279ecaab468dfdbbaa00b4f408df9ac7c34c05c3bcc3a342913941", "ref_doc_id": "fd17eb08-fc20-4a90-a4a1-c3b4cf6b89bd"}, "c2fd5c17-3cc3-4c56-b21d-2c71276d38ac": {"doc_hash": "0c66c67eb2ff726c6236aa5eac15001385cf2d9e70a77a4375b92c330cc26c68", "ref_doc_id": "4d98d23d-c42f-444b-9323-1fe97baca94e"}, "b65d9d3f-b955-4f40-a185-1691256386fc": {"doc_hash": "4c1f8dc5973ad975d7b20d144a0c2cf644c311290d33a378de8491e14c23ac83", "ref_doc_id": "8ec72078-d96d-4747-a4e2-a7daacc332a8"}, "0173a25f-3887-49f8-b8ed-cd83682fcf81": {"doc_hash": "63fe284c2dbda352a992b516ab4ce5aa84002e0e4e5141bf766e4fa7fcb25b00", "ref_doc_id": "794ad272-a4d7-44e7-a22f-46892474b952"}, "06958429-3c4d-4593-aaf7-0e5462b645e8": {"doc_hash": "7d6fa3bea90dd3f14869c1420847adf8b81741c507db93b414e63b72d610dd9c", "ref_doc_id": "a32121c2-7242-410d-98fe-f2d81d8e58c7"}, "21f821af-52f4-403a-8f5d-afad4e403009": {"doc_hash": "458ef566c2aa1541a83affed8935ca8c0335fdaf38ac7d5fd7bc0ff3dcd058de", "ref_doc_id": "429c284f-4fe9-480e-ab19-d64267de40ec"}, "f4e80a2e-2667-473d-aa02-45c1d88d566c": {"doc_hash": "b80214895805228a59ef19e1f6afe19291563f73ab8ef55196eed099062d919e", "ref_doc_id": "9d36db84-fefe-4e6d-8034-9eb0e37c55fd"}, "d8a5dd12-6cd0-49cb-b8d0-442672752690": {"doc_hash": "879ee1b394091944f976aed9aece9d027376656d3f7c1333ea2d9cc95908146b", "ref_doc_id": "42781a21-7024-426e-83ba-4af0bb4387b4"}, "7ecc1b24-59ed-4d3f-a551-0cea5992dfc0": {"doc_hash": "d71b210fb74105ec157fba53437710e757a2ee13b57701f322e49377d6ff68be", "ref_doc_id": "c9587028-18dc-4835-b0ca-e2efcf7e12a9"}, "33f6c40d-c4f2-495f-8c2f-845c693b5ad4": {"doc_hash": "0ab0d4c39770d745900b4980e1abff57650ae85fd4664a7d3499006539508069", "ref_doc_id": "5200c3ed-ecad-48ae-a6fc-9e49e59a386d"}, "150a6315-59c7-4fa7-b43d-7324a3584f1e": {"doc_hash": "5d250468187cf487e8e34f7a09cc8357da33a95575ec24afd5e0d05d817930da", "ref_doc_id": "8ab592e8-7178-4b82-ab4e-e27508a21501"}, "0e93c412-e25d-4d00-9211-4cb84eb05d47": {"doc_hash": "93e88b2bff69ba40146321c8b0468c7d58592762654fcf108f4ff0890346f6f2", "ref_doc_id": "fc139323-ae7e-4f71-a7d9-089bb416b7d2"}, "8311fd1f-a666-4272-bcee-cc6e1c1d8ea0": {"doc_hash": "e86500bb0c50692244070f38e779bbd4f7bc6953a1be968479ae4879285c20f3", "ref_doc_id": "880463eb-8565-4a9f-9410-927a8e0084eb"}, "1f08ceaf-c39f-4fcd-b80d-e6c9c5f32cc4": {"doc_hash": "b2da53fc760fc2dd97cbac660f481b056a3de4b628517a7a525e75d9f5d31337", "ref_doc_id": "650aaba2-9ff6-49ca-9da9-5b6941e2e460"}, "728d4e1e-0912-474d-a13c-3dfec6840006": {"doc_hash": "09227e036caafe0c74fdaf7e9f87b622b3b18a80410987d3c77236a7bb03f18a", "ref_doc_id": "65067d81-e80a-49d0-be37-bdbeb86477c3"}, "21c4e6f2-ea29-4288-ab32-78ef5e9c4283": {"doc_hash": "5c123ec5475470b69baf8e9c8a4ff1a014b0a5737bdfb54b2d6b31441e9ec194", "ref_doc_id": "1c3dbc12-03a8-4b38-8cfe-d3260f3aead2"}, "0246f201-6f15-41dd-9ba3-e7c495e55454": {"doc_hash": "e69440b2b205fc64fd44e5e8ca4fdfc7b62a7ea0ec5e29b7599ae8c30d37c817", "ref_doc_id": "5f6e090d-e6ab-44ea-b030-63a0b81e5890"}, "30acbbb4-283c-40e9-8aa4-7276852e265e": {"doc_hash": "49ce857af44b63aaf206dee72f43b1a3cc7d1bc64fe70111dc148f32d3957e02", "ref_doc_id": "3c25db0f-0efe-4641-85b8-41f37d34f11a"}, "aca39985-4dcc-4026-a08f-81cccc60b0fc": {"doc_hash": "bd164ed23d77a9e0d91ca949dd6c4ce6a23a072fd30c08824de5538727c0b7e6", "ref_doc_id": "80a26ef5-2152-438d-93f2-e99d0ff385e8"}, "141316cd-14d2-4c33-ac98-10eebb3881bd": {"doc_hash": "59ec4c1e2d88fcf01fd8282154b83019ba065a4ba28f505e35fddf921102d8bc", "ref_doc_id": "f6f0a271-e590-4481-bbda-1673f8911af6"}, "993b1b15-d413-417b-80b4-bca6b3102572": {"doc_hash": "c4839b65ac664669d48285a00cf57521d74b515014d2edaf518fa06b197fdf19", "ref_doc_id": "c92c3ba1-c02f-415f-bacf-a21086a8ca30"}, "f21b0a3a-dccc-4c2a-9272-21368cae552e": {"doc_hash": "f47776e832ed297ffa8a81db49213b3c1c6d4ae3406b2322109c21da3b9032e9", "ref_doc_id": "82817cec-6ca7-41d4-b42f-2dae2f0b112a"}, "871ae3b0-de62-45ec-8d41-b378016a2bf7": {"doc_hash": "f777a27b1e763e4811772de597a7d5d88c486855bf6ad7bc2060667bf6abfa9f", "ref_doc_id": "25e80a7a-ab4e-4d67-801b-ed1dd66320d5"}, "35ea75f3-c13e-4018-945f-872f6251d0b1": {"doc_hash": "07fc9309908262497d5b2cb88e8cbdcc455d100749da70cc174401af30865fe9", "ref_doc_id": "e9acb4f4-88b6-4ea0-bc71-4e926e70a931"}, "d655f37f-761e-493f-91b7-eadfa023b346": {"doc_hash": "6c65a91a4649c0d2bbc126458c277f9aa89b2a6e49dba8a58217e4f1f228e74b", "ref_doc_id": "d80eceb6-ebb8-4704-84e2-c4e31aea85cc"}, "d247f619-fde8-40e2-8b3e-5fd1259ae8fe": {"doc_hash": "fd6833ec71471e708be5b7aef8909441a577786feb0634f5b615fb802005e436", "ref_doc_id": "3bd05c2a-98f0-43bb-9c18-068045afbd73"}, "81bf18d2-00c6-4ddc-a842-5f55ccc7a982": {"doc_hash": "f7c4f7839ed9d8e27b64182b7f71b5475c8b13545f64413d8e5fd7bc64909b2a", "ref_doc_id": "a2824579-7f5c-4154-ad0c-5f4a8497bb6f"}, "467558c3-e094-43dc-b88e-d59b2009928c": {"doc_hash": "415d235a21783b53fc2688fd5d6d1c70333c4a46ca4f257d204788775cfe7943", "ref_doc_id": "06c7b0d7-c250-47a7-b208-4988b241d811"}, "497e79e3-be9e-40b2-8edb-a5996c71a4c2": {"doc_hash": "838a4f993bba21403d1f01c40246b21810dc5f43793cbf22803150443915e637", "ref_doc_id": "b0e5baa2-f02b-4bfc-9d28-1b2505e3f73e"}, "6a9babf7-2595-4eaf-a5f2-6791b4523678": {"doc_hash": "a27ef95477554e0ed23b007fc004727789999331daa03a15837b9e18e981f2a5", "ref_doc_id": "2d97bbc7-d34d-4676-9c49-2bebce8cde61"}, "ddc3920e-1495-4f90-a987-3e4e03b4094a": {"doc_hash": "f903b6dbe0c39676e905492dfddb278aee23d7752de312b08bf3ccd71bcd3f78", "ref_doc_id": "c96dd937-7ac2-4451-ad25-f023d0883c0a"}, "347f96c7-eaf6-47b0-8418-e85e3b6ba4f4": {"doc_hash": "aadd49cc0079d847ae51f8cbcbca7a6c12e5cb834876a6738176d52b6f657059", "ref_doc_id": "830305c3-609b-4801-9adc-005c67d22cc6"}, "8aad0ff2-ae77-4639-9fea-67d0bb34374e": {"doc_hash": "075650aa06d1403f5e2f28a5f882c0d5c457d8385f7b8843fad71b8d823e1690", "ref_doc_id": "f9abceb8-bdf5-4600-a217-efd48276f962"}, "a2c1c819-1ab6-4eb8-a613-69663a3453fc": {"doc_hash": "9fdbf964fff1f7776bb40c1a86899595b52226a2d5850272738c4b8b5926b532", "ref_doc_id": "dbc6a8ca-6079-4a3f-9f79-ef586620a4ab"}, "c2863b92-e1f7-4b40-9088-ed90b8087a05": {"doc_hash": "be8184335b2fc2c11e0e14fac4de517f94fb18aba987ebdb9c08a99fa763c233", "ref_doc_id": "471e4d15-b9dd-4fc2-a696-b406755c55df"}, "49cb22d8-d0c8-475b-b601-b153020a5f74": {"doc_hash": "fb523bd814f69d0e4341a9b748559a2e1e5058cfdbb27252325e8fc50a9217e3", "ref_doc_id": "acffaf91-caa0-4d73-a07d-c749c5bcda6f"}, "f9b24bb6-fdc3-45ee-97ca-36ae4e970830": {"doc_hash": "f022445317e606e784721d15fbcaee3acca49cae15eea0b2e38cbb27c404eae5", "ref_doc_id": "6f2844c6-fd21-482c-b18c-3dbb1b3d3520"}, "fe17e153-46df-46b9-86eb-0008f84b9722": {"doc_hash": "0976bc91c554a8f7cb428c424bec409b47a600b569ca922d9c35a8317b88d1c3", "ref_doc_id": "fab66206-335d-4130-bf81-df3daaacbd2a"}, "217bf5e2-c5b9-4b63-802d-556058a0085f": {"doc_hash": "ca63a5020e762a8462eef751ec26539ea5ebee61ca77b2e918008ddd94674594", "ref_doc_id": "91a0e099-9352-43c9-be28-b097c6948ccd"}, "3eba1c17-a17e-4c47-822c-e928c296572b": {"doc_hash": "717a3a60045887d89b1337bfe86d6039329a39829220929966ba8a31d9ede433", "ref_doc_id": "e373490c-63ab-4a0a-9468-52bb59feb4eb"}, "59ca93af-7d14-40e9-9abf-4f523f3967ae": {"doc_hash": "2d6a1e6ee9604ede8e6816629ba3e0ecc39c1bcf2546b02ba494584ad5c13e4a", "ref_doc_id": "ffa06323-0f28-4158-858e-420adb2b52ee"}, "e30b55d8-0065-46bc-8a62-87fa60eb5bb1": {"doc_hash": "5290db40b6164159ae84f209f051f4333fd77406deecee15067c3f12c061d4e6", "ref_doc_id": "18cb1284-786a-4c85-b1d9-3be29b41e3d8"}, "609613be-622c-4399-9520-972093ac0af3": {"doc_hash": "ef79b0905f818b143dd705ff53afafc3ec4557bb00d0e4c2826c1ac6197a69f2", "ref_doc_id": "895ce90e-7271-45ca-99a1-6b64e506194e"}, "1f19df44-bb56-4512-b6a1-07277aa48dd5": {"doc_hash": "44e23e4cf665302a3b8628f09b5198c75f07cfce77c1c9c75688904dc06c86c8", "ref_doc_id": "983665e5-b3c8-4f2c-9cf5-642420dca2fb"}, "a20991bc-8767-4e8a-aa1f-5755a297db79": {"doc_hash": "7dccc8a80cc0f19ca5e1ee7b61b0390a106281ba7308742342ada5071a65cc9d", "ref_doc_id": "574ad8ba-e6f0-46f6-aa1c-b3540f8ef1d5"}, "165085db-1f95-44b6-940b-c5cca6842b1e": {"doc_hash": "75176fa6b3c3251d91d6af24057893b0ef35ce15a9dc4e68913d6fe0327c4e65", "ref_doc_id": "47712a70-0e42-4e57-b314-df6893743083"}, "4fb53d4a-1cfc-4d48-abc3-26017f53a822": {"doc_hash": "1929738c8f0cecbd539c9f4a8b81a36999f318e3d47445bb1e266c1bbbaea6fa", "ref_doc_id": "67fb5e22-830d-4357-b7b1-24aa423c671c"}, "2f52a19d-fbc1-45af-b617-b1a0a5bb5442": {"doc_hash": "d394f82be8e6892ed36d5d18dfec609b2f6f75f879ff81c54fe0baabd4ef348e", "ref_doc_id": "31286cb6-e92b-459b-8a12-1b78d8a964a5"}, "7b527787-96da-4226-9382-d6940ff03097": {"doc_hash": "54998756b7f10cd63b4e92343b7678ba68eb94ae74b9092c9dc28773a99cf49e", "ref_doc_id": "9cfe2d17-5416-4b9f-aa4f-9d99f68bca8c"}, "73d8a3f4-aac1-4760-839c-d9f35314c71f": {"doc_hash": "09a113ea477bfc080bfac0ec48fa3b382b98487ea15de25f34d4a35dff770b18", "ref_doc_id": "020699a9-b701-46b2-a642-b577f16ab28c"}, "52fc16cd-9438-4db7-b20e-6ba898d1a3d7": {"doc_hash": "4368513e0408c85e13bfa06dcfe8378e27e5a8e53dabd472d0f1d8bb70c79f28", "ref_doc_id": "7a9e7e27-00b3-4beb-9aef-3d1b001d4be4"}, "5a07a60d-8e79-4a7b-a081-3cb40cd8c90c": {"doc_hash": "a14b0f6c2fbcb7f6e22e7efdfabe3eb73705146b5e04f610ee9bc080586ceecf", "ref_doc_id": "a546c90b-f54a-4ead-a910-873dcbcf3679"}, "8d6e60ab-5079-411a-b140-74b407662a38": {"doc_hash": "2a0136ed32e1278aafc8836e37f4e81e8dfd900d5bd8b2056854e3b388374964", "ref_doc_id": "4f42f07a-0612-4806-b7f7-d8340894b052"}, "5127b3b6-0396-4ecd-a2ab-0d4eb61fe826": {"doc_hash": "7fbf9d9f84e345345b42b392c81bd15b771aaa3f8a9b7ac9038fe04f776bf022", "ref_doc_id": "4a4c7a86-55ca-4fea-86b4-31b073c4c7a4"}, "181101e7-b7f0-4a5c-8f26-2c4e0a926e02": {"doc_hash": "901dcd3cddba0ae7d82ff1fe99b487c0d01cd87c0afabc63715f54c34c5649a8", "ref_doc_id": "c732afba-4e52-4c28-b884-4898cbbf8cdd"}, "7ae099af-2305-4fc1-a0c0-c81b9fb112d4": {"doc_hash": "2fe1848cd5e7f0c9e958271f239ae3fb56ebc0622bfe0dec019a2d37131efec3", "ref_doc_id": "2c5c2ddf-7e81-4453-bd3c-1820ccf464fe"}, "a5ba9817-a5d2-488f-b85a-0d1a52593071": {"doc_hash": "9d1916c3ed897fa98a4d1f7c9c0091ae90b8015b9110d0180ba13d2d5eac8332", "ref_doc_id": "c92d81c9-a929-45c3-a048-9a6079e2325c"}, "365743a5-9d9f-4233-a559-198392666f13": {"doc_hash": "586685ef1771aede00c0ae31426e889b71eca5a584014839c312ae3a2334edb3", "ref_doc_id": "d5489249-da51-4c41-99b0-7272b2fd55db"}, "7c7e803c-b7cc-4098-bf47-14a970fed3cc": {"doc_hash": "5351eb2e6c3cc5666968f90f1cc50682a1a5d158a4b35ae81010b96e498c65ac", "ref_doc_id": "45d2774f-fd5e-422f-889e-9b49ebe8aabb"}, "a872cb37-41f0-4edf-9734-b48da18fb4ab": {"doc_hash": "3c469f9bc54c688151f08e4769e5b9c0938e45b36197e96229b56fa17e1aac76", "ref_doc_id": "f0b615a9-16af-4b1e-88b9-7851aff8a6bf"}, "e7cbff7d-1181-479f-a570-edbc3e78e753": {"doc_hash": "79a8a46acf2696920f51a7b9427f65dc7012b830743c09687420bf5b048d62aa", "ref_doc_id": "782dd48e-91d1-4ac3-8964-5c039488bebe"}, "588ec552-d024-40cb-8227-661219987a07": {"doc_hash": "3943d144bafd4818b5ecec6d5463772d2630c968cc1a18f652950a1d39c3299e", "ref_doc_id": "13f9a580-e911-46b8-942f-a573c653285e"}, "e5ccf591-1040-41ae-be1d-a8346f207f33": {"doc_hash": "bebee8ca93c4836ccb598bb3aa566df0cf7e492d84bd16c8054643f2d4fca1bd", "ref_doc_id": "91261279-84e1-4e31-8385-422fc05bf691"}, "e5ace444-4f8a-4d6f-b321-ed511d2dfa22": {"doc_hash": "ffb06d852ba9dc7544971c65ac422a85a11f692e640797007178346816963542", "ref_doc_id": "baeede9e-dd88-42be-8318-e867b5f18e1b"}, "4e496608-68d4-4426-8289-00aaec8c5a1c": {"doc_hash": "85d38cc275f6b19f433dcf7789698dc32ddb83cb590e30a529c888eaf599d5da", "ref_doc_id": "4a61b464-204b-4c5d-a1cd-4a2e8d2ec383"}, "71a928b2-dd65-4147-ae36-a611b24ec474": {"doc_hash": "9ddef5dc13cc07eb1d35bd2acc35db85529f8bc4e827d7dbb5ed242d2471f6dd", "ref_doc_id": "a59bee68-7978-4dea-b538-21f517b45231"}, "223d108d-3a96-4fc3-86af-cd7ad0f869a9": {"doc_hash": "698997369d96e0210d0e859a478d53c142971a81a8fe666f9b0720bc54603778", "ref_doc_id": "6e7782fa-7c64-4be6-b1a8-b775384c6045"}, "d9e92c63-6c38-44e8-84e8-ecbc7a945bb1": {"doc_hash": "d8a3473315bc5e2432077b11b1562369f105b3fc7b6fae7bd5b3f0be31a505f3", "ref_doc_id": "cf46b441-f121-4ceb-b962-533de2ab09ef"}, "dba849df-4ab3-48c1-a42a-681574bf5874": {"doc_hash": "553a6502f099e3a4ff21462772b7caaa18f0010e7223706b2a3f68ffb8065750", "ref_doc_id": "b7c22205-d09c-4c1b-8769-27187f8f8f3c"}, "18892d8c-f772-4afe-9a4c-7e3248c913f7": {"doc_hash": "5c80c168c00720279d9e6e97243154deed4d6e1f5ebcd0919f5ae3b04e0a246e", "ref_doc_id": "1b5246dc-12b7-4622-adbb-65c56b283528"}, "c575b97f-68ff-4e6e-8893-abba43e9882c": {"doc_hash": "81fb70ebafe20626b9548be4c7c10f71e43b1468099dcca7002de86cb332139a", "ref_doc_id": "0f09bfc6-d04a-40da-ae1c-216cd687c2a8"}, "dfe1af4c-e6f7-4e72-976d-cd544f46d6ca": {"doc_hash": "73efd6f66c58112caf13e220f4999d3de4577cee2bf32f1826be13cb89fd59b8", "ref_doc_id": "301b59e1-7bfd-424e-bbea-c78435a4e74f"}, "b331adce-78c4-4106-aec0-e265f3c93550": {"doc_hash": "1fbcd54e98192ca1874d6648ed4d559896c538f3af454cdc9109725a8fdf4148", "ref_doc_id": "4c3acf80-a37c-4608-b91f-7d138698cc39"}, "e79562a0-d816-49ba-b5d7-6e22b2262755": {"doc_hash": "8d0989801243437eda99307423ddaa0369d2398d098f4d8356f2bc4443c4e5d6", "ref_doc_id": "6a94ba21-36ed-4666-b23d-68c960f0e51f"}, "cc9f9c4b-da7b-4308-8a2e-d16ce5da2549": {"doc_hash": "be75fb1052f594d9c27bf9a5be5a8438733937efd0ec4381a3ed6e18f365efd8", "ref_doc_id": "a796ce72-4b56-4e6b-9153-af284fec00ff"}, "2af20fc5-f229-4a96-8b32-21d8d206296b": {"doc_hash": "8efb0fcb0f23e2cdef1323d435816603664847a6f41a0143042c8359d0eb9c56", "ref_doc_id": "e415bf5b-c8df-4d49-8f9e-929870e90d82"}, "f2a62183-e832-4709-9a26-36e803bffe7e": {"doc_hash": "f7e4c80ccf340d26b7728339a5c4b6b1768534e436faf359dd903aa5a04d680b", "ref_doc_id": "26d95543-2609-44ca-a060-642c622650a6"}, "db0bef2b-e52c-4e6f-839b-8e551556273b": {"doc_hash": "e3ebd99b0da79d4e3915d16e0bd4092e1daf312e2a23c9477c191c6310058055", "ref_doc_id": "9f131792-ce60-4bd0-9d09-76c9faf87792"}, "31b5046c-98a9-4b23-a6b7-5a8c6ae14d2f": {"doc_hash": "e67dbca86b9ad9beea27b5277a576ab31ec158f3cbe18da9a760b4e13154e378", "ref_doc_id": "3233a8d8-e958-4023-9cd3-e31a1fe713cc"}, "1c04a149-9edc-42f4-b82f-4ac9dad20fc4": {"doc_hash": "ae392b22446902d8b826e816e8000e2368c4e537f7a110045b93c213b3b7fabb", "ref_doc_id": "fcc46606-2a7c-4b00-8e9c-02ef0088ec48"}, "6810bf0b-5de0-4a95-a4e0-59cafa0b0549": {"doc_hash": "4f5764f6da3923b995caca6b459142feff890480b42239aab53834f93b2f1221", "ref_doc_id": "9a689495-cd44-40f8-8713-1e688b3fea5a"}, "dc857518-0890-4de9-9bcd-73fa9c03cf9e": {"doc_hash": "2ebb416f49a870446d9c99a9d959640f59f8e5d46406ba75faa4c905ca1c1c12", "ref_doc_id": "23a4e7cf-847d-4167-887a-9503eebeb38c"}, "552ce3fd-f6be-44e8-8cfc-1ecd642c9e34": {"doc_hash": "d27fd1b860ae07155a8b8ad59e0b1ae049346cc67324c5c6180d2557adeb3b83", "ref_doc_id": "073d7554-2822-495a-88c3-8181a0d96057"}, "d0cb3c00-ce6f-4e68-8801-b59965fd9f50": {"doc_hash": "568f21ebfb1924e90c85120ae208017b8a2b9c7dd13f9b66bb2cf4c317b3c2f9", "ref_doc_id": "0861b705-526f-4ec5-8512-5a223a554697"}, "100e256c-b31c-4980-8b18-66bb26e5658e": {"doc_hash": "941e09bf7861b1fb624723762801d9598743c85afc14a52014c47a28c6f856c5", "ref_doc_id": "299bdafd-87c1-43ad-ab20-1e15cea35998"}, "6194bf94-85ef-478f-8032-9777db67d686": {"doc_hash": "b22ae41129adf18b3138688fa319c7fc8fa11bbc46069a54133bd2d39427e36a", "ref_doc_id": "86419b13-fe0b-4ebf-b289-7a76d092426f"}, "748d2d9e-d021-473f-85d0-4dc7dbd466af": {"doc_hash": "91bfb6f3309e61e0dc0e240002f353d1aec13e49b7853d9cfed670394a4ef8a8", "ref_doc_id": "a0b3d243-a1be-478e-af7f-5cb685263367"}, "417bb18f-2806-4d2b-9105-5c8ab590d81f": {"doc_hash": "ecf918d490dd0b9391aa8262a0c89960cd4bcb5221597bf9a9ab61eb42f732b9", "ref_doc_id": "fd270dac-04c1-4540-bad7-be889e6f13b6"}, "1e7df8b9-7dde-4853-b068-94bef3c1cce6": {"doc_hash": "6a0c191953a6310d353c0ee36421c21013cd7b2d2ab5e91025d12dc4383579d3", "ref_doc_id": "79cdcea3-4106-4852-af23-05376dc62149"}, "ac42d99f-c337-4120-81da-21d4ec5f3994": {"doc_hash": "b27c98b8bc7a83f4d822228c83e433f814e1f0d1dba6d3e55d7ecee67e6c5ea5", "ref_doc_id": "14d5a4f1-97d4-4afa-b7e2-ce34b22ee040"}, "db8dcb55-38f3-4529-8cea-a2251d43ca78": {"doc_hash": "066ba3037319726a6c054ef7040a8b5f6c64f848a4628df382d947ab54654e9e", "ref_doc_id": "c8c1849e-79b1-4ea8-9416-eadcf372d06d"}, "80bd1f7e-f5aa-4f48-80ce-3ec2020d2ec6": {"doc_hash": "1bb07b02a7634e9c3cdc294d8162fe3f8e8d156fe12594c946a0124956e8e671", "ref_doc_id": "c38b6e84-c14e-4c89-a98c-203da93122f2"}, "a1274bf9-7155-408d-964c-6a26033a2418": {"doc_hash": "ada2b4bb5f5a480e3fd90981b4e87d656efd1d0110d2a2cb0463231f3d3ea651", "ref_doc_id": "24c147ae-2bd1-4716-89b2-a4ccd9964cfe"}, "ad1fa5bd-9807-4b34-8c3b-306b626c2ab5": {"doc_hash": "e3b27055f62760f12d4f438e0ffbb4d80b5395082af287a88c3f78b2c63da3ea", "ref_doc_id": "cf158de9-7c38-42aa-a93f-23d893e79d03"}, "cc53da89-a4e8-44fc-b199-757185d1aa6a": {"doc_hash": "1206bf76b34e8b4bc89ee77628588423ac4fc6f3a2cea17c4a1b9906708956ab", "ref_doc_id": "1afb2557-03af-4d8c-9e3f-91403f1e7a0f"}, "1824ef33-3ae1-4007-990e-2a38a329eee1": {"doc_hash": "26dca47da33df24aeea391f9abf209133f38d141fb1cbbe06cd9f85998d3b246", "ref_doc_id": "aa8a5db0-1399-4397-9812-efe1d991257f"}, "edad2037-5822-4d1d-841d-66ded241e10b": {"doc_hash": "14ed24266ac9531bbcf8b1bf7b7992b9b1d454ff27a625dbba5aab84f379a4bb", "ref_doc_id": "96bc6cf5-071b-40f2-a18e-7228b28f954b"}, "fbae79a1-b97a-49e7-b325-491294704e07": {"doc_hash": "bdace48c683940da81ad2ca41c4dcc2da7bdcf434c18e48a82dd9bb274b6862f", "ref_doc_id": "e682343e-cde9-4486-b456-e475edfcbdfb"}, "8fa28574-ef92-4c6c-b836-a486fc0311c3": {"doc_hash": "fcbec1288ef4c3746f5459725bffef22d7485f2d33e8840e10c8f8ea2475885a", "ref_doc_id": "2c0df155-53aa-42c6-a41c-1f606533b23d"}, "72677465-31f5-4878-bbb7-93947e22b346": {"doc_hash": "aefc9e7be759e3517f05e220bdf086ec3521cd32e94af4306428c5c6dae5a4a9", "ref_doc_id": "9090fba3-be99-400b-a1da-530771880f18"}, "74e65e2d-e14f-4cc5-8016-e3766e4319a8": {"doc_hash": "e84b0dd379eeccbc5c0d9123fa7b2728f2ce7d97a372777c9bbfc11a4f4d87ca", "ref_doc_id": "c702bfd8-9800-49c7-92fb-b693c6145849"}, "9a6ef3ac-b79a-4356-b902-35ed95df741d": {"doc_hash": "34d7d66d2281f02a6a264d0360a44ffb25753c8d3b18c383a1bb191c42ca6b49", "ref_doc_id": "b0c6553b-33ee-4108-96ee-62f106037168"}, "696ba37e-8197-4a87-8c57-69869db5cbd3": {"doc_hash": "b6121268bd8baa532511dc76e3448c6523e6ba560753c8f7c1b4b6ac24988816", "ref_doc_id": "26481353-f152-4f38-9411-b83984780735"}, "5fadc877-5586-4b9e-a555-77bdd03dfae4": {"doc_hash": "6b888d86f83eef722cc992e7c9c62d7ffaf6f9be9e91b4bcf5c4e3481a23cfb3", "ref_doc_id": "02d62435-c5fa-48cc-9f0e-fb7aeb8c728e"}, "f93cbaa7-56e2-443a-8c05-f4a2f768520c": {"doc_hash": "2c7dcbd8a8f14403d5dc7b0cc36cc723f067c6190a42392ef5e2bd932aea4db9", "ref_doc_id": "e64df88d-e942-40b8-ab22-c5364989388f"}, "72a7ec13-75f2-4f7b-9315-bf2ab8e1bcec": {"doc_hash": "c3e28675a064066a98cb5179b2ab2669cee105eaa6c3648f17dd4f2260e6bf79", "ref_doc_id": "6092dddd-47de-4263-b7fc-a3ecfecdb2cf"}, "b0024046-c605-412d-a67d-c4feb989ee23": {"doc_hash": "1be0a1790aab4ca2891aaf35fd3f12c3a7cb62a537626a5c3c1e260ab2594177", "ref_doc_id": "6284aa5a-d57b-40b1-86ca-1dc2ddb4f77e"}, "f461ffe1-3e70-4beb-8e4e-2fb4513d940a": {"doc_hash": "c3e52acee3fe9541fb25274578c53a072196580f98c42c62fa9c4bee0914f584", "ref_doc_id": "b62617e8-5b2e-4ecb-8f1f-43e6137f9488"}, "786fd7c3-f6c0-4853-9e02-18d51ec84468": {"doc_hash": "348641542629c8b9f1e684c35a628b1b52d196d2ec43c5571618c1856d576fa7", "ref_doc_id": "c867a2ae-a7d9-425a-a1de-196b65d9b431"}, "c3eead52-fc52-4935-8e0c-17c3e66a0d49": {"doc_hash": "f952e774ba3d39bceb2eacedebb8485b33bc67ae5e704c5120361a590248e54b", "ref_doc_id": "a05b4cb2-113f-4bf3-be3c-04b7d84b88da"}, "68257f21-2395-453e-b427-e449a71cf1e5": {"doc_hash": "073ccd0313d64ff56f37d7517aef11b87a93f5f3788324b5d0ea737c82972766", "ref_doc_id": "12209d31-5909-44ad-841d-8d24c207b7fb"}, "61d73bee-5e2d-489d-823d-0563b5462d6b": {"doc_hash": "88e62b1ead36e742b67fdc06ac8e3fb21a8e197befc5ec0e8e040c3c4238b942", "ref_doc_id": "7df62fdd-2eaa-4daa-94b5-eb47e66a77d0"}, "79afa0b5-9289-4e77-97a6-77fedcf62191": {"doc_hash": "17570a5ade0f733b75f1d72aad77d7af170343a8eccd3617c5831258e07a00b3", "ref_doc_id": "ad712aa0-cfb6-477a-b7a8-f688e69bc2a6"}, "6105b810-1abb-40a3-b00a-ac84c03b4110": {"doc_hash": "9d953ab9a561f78c84d553a6cb415693fe7353f8b0b4b520b776356dbf680680", "ref_doc_id": "9424c67c-0023-4cbb-a07b-55ddb2e96746"}, "bd07802f-a077-4fbc-ab10-9d0b766136a3": {"doc_hash": "c4fc4b6bb0e342b992ea5cd895ec7964ce1746c3796bce287c1916cc3e7c145b", "ref_doc_id": "a59eff89-d205-408b-9480-3ac62d20ac25"}, "87f41955-fa21-472e-8dc0-cd4711c3a796": {"doc_hash": "3712c71ee581339f688a09282a4cf995dab1dd8db09d4485da1be91dd4752d67", "ref_doc_id": "1052f264-49dd-47d2-a3d6-8443a6955451"}, "f3ada881-f366-49e2-974f-fac699dcc276": {"doc_hash": "ea5ef4e59322eb1322c0eefe5d2a71c2a924743584ce94bc3fbca8b325466c90", "ref_doc_id": "f46a460e-58b5-46bd-a6b4-347d8650a1f3"}, "8e85461e-56c6-4a43-a9c2-1460615792dd": {"doc_hash": "de681e8039df77e04c8943c9ff5ba520872fb248226437cdfb612579d0213437", "ref_doc_id": "ff3189ee-6cee-4ea0-af55-214386c4311e"}, "87452903-5997-468c-892a-4d4233a18f1c": {"doc_hash": "4c64c99ed3dc1c8aaebff3d22ef95a139053bd3bfea73151bdcff46be2416575", "ref_doc_id": "9f775235-b052-436e-9a44-029203885d7e"}, "b8035955-6e30-47bc-a4e1-611048db7055": {"doc_hash": "bb62a5abd691b0d47cb7ee2aa0011e7552ac784fe893e14cf47b59f0759faa5b", "ref_doc_id": "f9196c41-455c-440a-9fbd-4c48c23b1073"}, "95a6c872-151d-4014-aa31-2437d61168f4": {"doc_hash": "96e054ecab6400d16be1bf35fbd6bcad66e3adfc40c294080af01b3dee37b81b", "ref_doc_id": "140c7a6d-d3b2-4654-94da-9c360bd4924a"}, "dab178e8-44d6-4ed4-8d29-b250367ee35a": {"doc_hash": "ae1de3035587ddec5f534f933b28b94fc927cdc555b449ff9b37e6ca3fc4fd0c", "ref_doc_id": "3fd70f57-777c-4642-8892-0ffefdcd50e6"}, "232f7354-00ee-4af3-b01d-62e2a6cf1a21": {"doc_hash": "0f26ce9c7fe6c2244c11ea33efc308e817229c557432cc7e3004ceea6153eea9", "ref_doc_id": "3b30874b-f2b3-416b-9e10-2f652fab7ae2"}, "1a4ccf2d-69b0-4c6a-b47b-cbcd8656fb08": {"doc_hash": "c79669e0fa8b3880e2ec66daaaa5e10b5169e673a57f59ee2c2ceaef1a5ee196", "ref_doc_id": "487b3eb8-8cab-406c-8060-a2e6e36a8ad8"}, "9da2d37c-95b6-4260-aa56-f9a6e39fb71a": {"doc_hash": "7035745740b95c96e545ba12a539871b2ebb8da7fabb82185f9eefbc00046750", "ref_doc_id": "bcc9a12f-2bce-4e9b-b756-a2b1d08dad75"}, "739158d1-2fb3-4caa-83c4-ef42559e09c9": {"doc_hash": "9dc9e2cb0c863b8deb97ae1e9dbbb965fc8cfde3cc1ed1ceaa018e1054ae837b", "ref_doc_id": "0a0fc459-8fe1-4b48-a380-b63513da438d"}, "bb35196e-acec-44d3-94b4-03f4ba22373b": {"doc_hash": "56f1570726e20e92a7466740b85aa494b5fd15ce0495d0823687702157c73e12", "ref_doc_id": "36bfac59-dc60-465f-b915-1005e705be87"}, "03875b2e-46aa-448c-a638-f3b4d34d686b": {"doc_hash": "0c2231c0d18c8dca0c1b61ee4557b1c26bf369d93afd31b3591e5f3b8a6f386a", "ref_doc_id": "a74c4f60-ea99-49c7-a20a-06789922b60b"}, "6b41a10c-13f5-4d44-8080-8ff81315e875": {"doc_hash": "e661b092b7397138f3b9ac7a77e51791d238913e6a4a9b6ee484e02c6d5b8a55", "ref_doc_id": "fec25271-d813-41b3-b484-99b53b8fccfb"}, "3e7ffe36-12db-4f88-b6e4-3b5ad7af0b1d": {"doc_hash": "2bafbe39f8438d4fcbbabf0b809d85cb373fccff16b3671f3fa07fbdb34156c7", "ref_doc_id": "dd0a9c1d-115f-466a-bf74-24eeb03a0ba3"}, "a56c9b23-c481-44bf-bc26-f353c0d3847c": {"doc_hash": "c686507cc2cca6676d3cb23e7fe21a725db59c5604cbbcef0d85da29b40629a6", "ref_doc_id": "dd0a9c1d-115f-466a-bf74-24eeb03a0ba3"}, "c8ee41d4-888f-4964-ba60-aae034fed8dd": {"doc_hash": "d411fb68ff2288d36950c5481a545f11c07b96e49915e004fea2028fb22c5a5e", "ref_doc_id": "b6b592f8-7b24-4370-a06c-86013706fef3"}, "dd0adeb3-984c-4b58-913f-ee347afc4bee": {"doc_hash": "c30baec1fd336a536f6eddfd2d2ae44e51522558f1e18c75572e93f2e16d9263", "ref_doc_id": "7b5d463d-d3de-4791-a2fe-4a4dff9bb6b7"}, "9bbd0c3b-82cd-4e5e-bc4b-01fdcae31938": {"doc_hash": "be02ff0be74f5fedd59e28311bf1ca8dc3a4b6fe3f3771e6acbb02918efb003c", "ref_doc_id": "3c91e7e0-16a3-4ccd-b7ab-d0d8c4d7eb5e"}, "590e7498-f4a9-4b9a-b8e7-56688901f0b4": {"doc_hash": "3d23c0091592c8e4ba07eaa437c995aa50faed017065b0c4dd2e9e69f82356f3", "ref_doc_id": "a8d0ae09-ac89-4e73-8aef-8b45d3e55522"}, "5a3b743a-33a7-4c1e-ba74-9f532f407616": {"doc_hash": "cdac9bfeac1a58a340d99192dbadea9e59139f20ec5c065939d4074a2f2fec7e", "ref_doc_id": "0382de30-f2cc-4207-b40e-c03dd9526da7"}, "08cbe4ad-c49a-4959-8a6d-c8e9d9f9461c": {"doc_hash": "5be0cee2279cdf3ce744307c63c3afc279026afd457f28c6be7db98182276814", "ref_doc_id": "68f337d1-3425-4e8c-b46e-e92da8276b9b"}, "d2121c03-ca57-4920-930d-2806d96a5540": {"doc_hash": "b9b01c68179a97c193927b0e1865be2f75080a9027a7ea1231be2a51031395e5", "ref_doc_id": "376f03af-7831-4263-944f-067a8a739610"}, "76adf11d-d524-4787-bbd0-a77a5bdfd853": {"doc_hash": "57f8eea7795e84dac47644695a63fc356c70141cdea3f2322b15bf8c4c11f39a", "ref_doc_id": "65963bed-bac0-49d6-a9de-d65a242db975"}, "7cb02807-3a6b-4322-a1d6-d8aece2f2bf7": {"doc_hash": "f21054fe3922db3ea92d4c2371c89af37f0afaea76d5b0f29e2bd8ee12dc7d2f", "ref_doc_id": "b43b6e13-0f5a-425d-9275-2729a955c844"}, "5dcc40da-7eb2-472b-b22c-6775eb440a35": {"doc_hash": "f0a3fb574135b4aa1d1ac305d7d59d0cf3defdd8f36626256d3a7cafa65c2378", "ref_doc_id": "29c3b60a-bb82-4527-bde0-350a15fbae8f"}, "c5c359ca-e3cd-4bfc-a33d-1c1a7d0f1599": {"doc_hash": "bac00d0e23da479fdedcc3802ab0ab9da0c82f597909c98383f68b04fd8d0bb1", "ref_doc_id": "3d053e94-cef1-4380-b5b1-e0b0d51c5222"}, "14d5d01f-e73e-40d1-846f-b207bf893c48": {"doc_hash": "7f07ccebc292b0dd2914b41ee94022e6c5a66ed9f07fda283f2cca915cf0dfc1", "ref_doc_id": "313d1cc0-c831-4786-a0da-932c1fc8bc88"}, "edd13447-bbd1-4ad7-ad95-8d1c79ba38c0": {"doc_hash": "5c9ddbd8d34ad060bd5ab17001f1f995f7d5f615c3e6c49961dcafe916725b00", "ref_doc_id": "35a7a5d5-29d2-44dd-9aa5-27639f970e07"}, "e01af6d8-e78f-4b51-b017-6a668eaca36e": {"doc_hash": "67e40948a99c0e758c894a2005dd4a09e7db502a45ce27ec1f4d799528ecd837", "ref_doc_id": "14b6087f-7eb1-4559-b618-81303dba6bad"}, "17650171-9692-484b-8800-0431b1999129": {"doc_hash": "58d08d84a2b5c116ad78deca128ea4d8c9a4c16a7055a8bfcf2d4e4f09fa90f8", "ref_doc_id": "9023d277-fae0-45f5-95a6-6469aed88c6b"}, "d51528f0-e47c-46ef-a09c-f7fa954bb167": {"doc_hash": "0f5d298ec5a427e305cb78698cd2bf8bbfb04b7bf64f49e2e2aa61bf7a2873f6", "ref_doc_id": "b94e7616-e08f-459d-b18e-d9c8cccc5c04"}, "cb47fab4-3a26-4663-971d-d0b1896002e3": {"doc_hash": "d1994ac64cb6f423065bdde0ea661192f2e41714cdb972061c2cef1acd8c086a", "ref_doc_id": "f190840c-f1c7-4a6c-9501-64b2db54a31f"}, "7d7f38d0-f610-414d-95e3-c3c680064ebb": {"doc_hash": "28017c9bff0ee33132f8c0d46f5819bb6970e7b386c6a55111cfafb3769daeea", "ref_doc_id": "849394fc-644f-4569-8500-914171e26ecf"}, "4a253d66-1583-4cfd-bea9-984528c6e8ab": {"doc_hash": "2fc5ed04da5e3b46e9142a458b3bc25489689d06fe9d6d1058c35badb8c19aa4", "ref_doc_id": "b5c10dbe-54b3-4806-8983-d3a98129a858"}, "9ca1348c-2def-4c68-a259-7d11d229331a": {"doc_hash": "4a95cd13f9e9783606af3bda339e005940bc5f3fed4e0f8026601885386c7f24", "ref_doc_id": "e356ac61-993e-4364-a94e-f7b445b0a58b"}, "9d0b0d10-d046-4e08-bbfe-d3a26db58db9": {"doc_hash": "0e862db225e3592f9aa1bfa0cbfc7980a588137542949b182a685fb16fa6416d", "ref_doc_id": "73ea29ac-969b-4aeb-9022-a5bd0df59e05"}, "49162b36-6737-473b-b3a9-7793482ee363": {"doc_hash": "060871737954125ef04f49f7cef3e4744883d582ae3dc1ae246ed540ae0f23c0", "ref_doc_id": "eac1c32c-3264-4aa1-bf3b-5fc59fa1b043"}, "8ebc2396-6364-45ad-82ce-dbab340a70ea": {"doc_hash": "91ee7b3bc02afac336f071b7fa27cfbea3b7135fbbf649942802a50f4c13a234", "ref_doc_id": "9526bc96-2551-4757-9b96-b103199d49a8"}, "58822eb0-35e8-495a-8200-bdf3662c0cce": {"doc_hash": "4cfb98cfb8a8d1c97f9fad61649a90edf3c94c180c0fbe24127b66ebd330f504", "ref_doc_id": "8ea0761b-9bdc-4d7a-9681-d8639b64bec9"}, "e1275809-2525-44a9-bafb-15e14944f645": {"doc_hash": "eedf57ab7fa64972be773174ff2f5e34169e463e1bd249bea3f2eacd11e0c60b", "ref_doc_id": "32061c73-6c51-4127-9f5e-6bb73e1ea3da"}, "769c905e-eb1c-4fdf-84f6-14f27e971937": {"doc_hash": "34841953d70f42e4033d36979977b313cd43fea36941ae27d4ab400e48d04bb8", "ref_doc_id": "af10af35-89d4-4899-8f12-81ec55b469f6"}, "bed8fca3-37f1-4a86-af25-385ae63ad65c": {"doc_hash": "2b29abab71b16bdb6960095f18fc04d23b1d085f81e2317e5ffa65005793e68c", "ref_doc_id": "c663017c-a0f0-46d9-8375-9598f20f5bf8"}, "915aeab3-6584-4617-9f58-fc713d80a9dc": {"doc_hash": "c4d2684971b384bef5209699cbe5d25150d8f467412fa9245a5095f292423966", "ref_doc_id": "d1de82e4-a7a6-4543-9d6d-42a010f1f92f"}, "79e3792a-83eb-4108-a9f8-bf22774d7ebc": {"doc_hash": "a6be054cd9ff38222c64f2e309c975fbce6365d3d856d2cdbc5f9f4c53b5da9f", "ref_doc_id": "b296c27a-953f-49b2-943c-493f33ba628b"}, "61753fa5-98cc-4327-96d5-64296678dbc1": {"doc_hash": "0217fd09fe65f5674cdf864ba1b614369618c0b0b2340e2af3c12fedb63699e0", "ref_doc_id": "b2cbc931-737c-4e43-82b5-4787d6ff0a47"}, "0ddc2be0-ce5a-4e4a-a046-e87ae0be01ec": {"doc_hash": "0c8b3bc971807e82fdd313ef978405d8aab28c2b37eb454d887d5a0e22229198", "ref_doc_id": "433ec58a-41ab-4f6e-baa3-5537eec5d764"}, "f68b9e7d-da2f-4e1f-96b0-9d1bb241ca5c": {"doc_hash": "bcd977ebeed5920c5f7aa95b42d895920cb13a263077407bfc53061e13ac31ec", "ref_doc_id": "d3469469-a7dc-48a1-8114-c6ad60289b02"}, "675d2460-93ba-4808-9665-89eab9f8d9cc": {"doc_hash": "da83a362319ed6bfc1651aaa6cd3a7fc49c832cfae977dab71cceaacf38ecf47", "ref_doc_id": "92901df1-6b57-4508-9883-c67975b880bf"}, "1507ec4f-e5eb-4eae-adb6-b0da7e39a5e4": {"doc_hash": "b62278c2cd55e3cfbe1079f50c1053ea8018e417c75d085df3a9b31d91555f73", "ref_doc_id": "9bf6d0f4-f6c7-47ff-ab18-11ad9a806eaf"}, "130f7a3f-48c9-41a3-85bf-f050bdb4cf02": {"doc_hash": "8a30b6d69dc0ecb628a01c1c20204c245bba188d87557cff16db56b6270e701b", "ref_doc_id": "c553e89a-8eff-46e3-9bf6-baeba39fb35e"}, "02aeba3e-3b4c-4e7a-bde4-4916d2109590": {"doc_hash": "0e9db29daeb0cd5e6705e7edc0d2f026db0c3cacdbcc94b5ebb34e5798581288", "ref_doc_id": "477b0431-83eb-48bc-9e40-157830569fb8"}, "d13cf60f-7ae0-414a-8adb-baf89547fa12": {"doc_hash": "07252610f50dcc8f0492ea677f4bbf8071a78dbfb8106794c332d0b303536a95", "ref_doc_id": "654b897d-5ce5-4d9e-a1d6-375372571733"}, "4b4cfded-8949-4b05-a853-f4379e0166da": {"doc_hash": "1e65b7981b23df148d735a4b55e84494810f6ba433326c5bf2471ac5d317d17f", "ref_doc_id": "edf49ec4-4d0b-4505-bff6-39e537e5d32e"}, "2e587b98-181b-4b7d-b59b-2c22706e75f0": {"doc_hash": "2bae0e531e5f17efd46ca0af02082dec8148cb835bae9bf1f87495f07bed5867", "ref_doc_id": "8cdddba1-58cc-48ab-a868-f85419425888"}, "f65e948b-543c-4c3e-9d06-36a16842a1ee": {"doc_hash": "e2ca06a9b31ef7420b2fcf1cf94bce54f4d8ee6ea73b5d7970ea070aa2ff1616", "ref_doc_id": "3b6e9bd9-77e5-41ce-84a2-340f4dc22022"}, "9b52bcf5-6aea-40ae-aaf3-05e8d96df639": {"doc_hash": "b5c9ef82b511bc382505d185824d9ca3b0b0f56602d3df31264550e81880ac4c", "ref_doc_id": "5305a6bb-8838-4138-a781-5f865e2a288a"}, "5767ab18-6e20-4627-91af-3637d7f1a09d": {"doc_hash": "525b08d4ec153d70069d587e91d33d5ce0c7030e7d77c14a9123ca9465271c74", "ref_doc_id": "5d74f000-553f-4673-b3d0-28cbababecea"}, "6751d0ef-b8bb-443f-8614-b1d907c212c0": {"doc_hash": "c99dee49c1d17616c75b3cda4e8dbda4118afed27b33d541e59e132fb4ec0db7", "ref_doc_id": "fdd79aa2-d716-484a-a5fb-b48c5db3d5aa"}, "8ab66ea3-8192-4554-8f82-ea41d4e94aca": {"doc_hash": "82df02815b80808f3fef943d6cc87f7145c017454aebf896df56ab75f7202569", "ref_doc_id": "89380637-7b41-45f2-94b6-102faa2120cc"}, "db6014ac-e6a5-49a6-9f7e-aa422426479f": {"doc_hash": "04085044075b39ca807a2740528ab926804e77664dd89b2a8a590559a7a5dcd8", "ref_doc_id": "f86f8db1-8f12-42ea-8488-e1c3f148d78e"}, "bb6121b2-c770-4cd8-9d65-d67a062c63f4": {"doc_hash": "0b5b7d81ca1cccaa9169ceff034d2d19f43623901ff2aa41859ba817e3ee3f6d", "ref_doc_id": "b03e76c6-5dbd-4cc4-86b9-0c41fbb6e934"}, "f6195136-b503-4e23-bf30-71204259bd9a": {"doc_hash": "4cb1c378e9060ae7fb98ea8cd63da1f5af9dc47c0762c1b70a43afe60f7db3be", "ref_doc_id": "a44778b6-04dc-4c57-9d08-5713937c5fef"}, "f94d4268-a09d-452c-b0d3-cf107a84fc94": {"doc_hash": "4508bb354a1ed811b9a19c7d5b693d20bb166b550e8e2367b176cf16ef8add24", "ref_doc_id": "3b2847fa-3592-4070-aa79-ae706c9bea34"}, "e2783e38-ecf5-4d4e-a4b7-09c4e2ae2e6a": {"doc_hash": "08e322161f70c054e82b6f30b00af9007b108342e376b1030985ce5f5c1f8b8f", "ref_doc_id": "f79cdcab-543f-48e2-bb71-863126c6495c"}, "71d5db72-221f-44ae-8812-54b0c05a8556": {"doc_hash": "f7b403d3a52862c24cd306ca982c35ad9125c2b3b9946b470c5b5304df6c1c20", "ref_doc_id": "f721df7a-b66d-4897-9ea3-08df3e5b20ed"}, "eb25e297-6a78-4bb2-973c-3de5fa8fc760": {"doc_hash": "e2b136c7b4b12f92d23657335f0c6957049044f06086d072b10d75bedf045130", "ref_doc_id": "bf341016-cc1e-424a-8872-7ea2560af094"}, "9bee7d1a-e45d-4743-9edf-53ce4139b13c": {"doc_hash": "c7d9c26f7e717546c43c8081ee69fac0ebc4d0243c078fd3cf59b627876f0293", "ref_doc_id": "07352b2c-813b-41b2-b7cb-cabd91963b87"}, "fcca7c53-29a4-46e4-99ed-0ec171908c81": {"doc_hash": "963f2b7c4b77801aa4b07dc85a63ed1031e24da944132b2443b9bf368accf328", "ref_doc_id": "98ecebcf-8483-4dff-99de-733175d15d8d"}, "efe5721b-79de-48e0-a2d0-2389066fe3a4": {"doc_hash": "361af72b290257c99c7fa0e4bee60019c1d081b409fc88708fa3393bb12011be", "ref_doc_id": "bf851eec-2363-4255-bfce-6e5a2ce887d6"}, "cf6e7a4c-3047-4a28-b9f8-f9950b935083": {"doc_hash": "6a4dc993a6b03e0fafee36046f3db0d2acf9bdd45d13568c52c2d65a998df7ed", "ref_doc_id": "9482f7ce-699b-4e10-9e1c-330a59a1ac13"}, "8bd3240a-47b5-4a05-ae24-3ea8daa969b6": {"doc_hash": "1d2c62e737c681379052a09a0d913ef1fe330da3f1edabd53b7da67e49776a2d", "ref_doc_id": "d333ef46-2cbe-44c7-8cd2-7d22ef295230"}, "bdc9d362-8f2c-434a-9e92-09a5bfd224f6": {"doc_hash": "e86c102318526438aa2564fb47b7bf775fe6c4320141c78e20aa92f7674491d5", "ref_doc_id": "d5899192-847d-48b4-8348-1000d74a02e0"}, "0487618e-03c2-4e67-b652-56f46ad28697": {"doc_hash": "2e5c0d0545032ab2dd16fa86b8450c8716f9adc9003781176f3aed8774b74459", "ref_doc_id": "00dff377-29bc-4669-8075-bfab96c2ca66"}, "7aa3a21f-8102-4da9-ba10-7ee71283fb95": {"doc_hash": "9760e177621b63923b40d41a9bbac67282ca5d977b81dc1fa44c23fef9a29df8", "ref_doc_id": "bf4d503a-d04e-42cd-8153-0ab8786dba05"}, "38b8eef2-7afd-48f4-8f75-8b0a020124e6": {"doc_hash": "350e5c3ce1131b8b55ccddf8721ec317b07cc362ccdf315cf86a09c3a3634aec", "ref_doc_id": "5332aef8-8ef3-4fa0-b8ca-cdfbd77c062e"}, "a926350a-786b-45fd-aa91-6adfe4fb3def": {"doc_hash": "d4e75e820185b6869c55b5994d16653665465e4847d67cf5409787af1a64c838", "ref_doc_id": "979f47ee-e5bb-433d-a991-5b92cb40f992"}, "113352a7-c106-4583-8bb2-06d6c0fbf89a": {"doc_hash": "81f04f9d2abb375bbda6f94bd24c671c66605d7b2e0aa478e3e6c908e42dba98", "ref_doc_id": "4281f524-bc7b-4554-b8b9-a13b304bc605"}, "64187f61-a927-45ef-baef-2a35c3f136bb": {"doc_hash": "342a177eb4087e2f074a7cd1d9107604c8e33361ec454c1df7d4e0987666a023", "ref_doc_id": "6a0515f2-807e-4b4b-ac9a-376f6efe938c"}, "44558ddc-be83-4265-b51a-d45e16a8caae": {"doc_hash": "4365aa476e96f415655385f807905aa683d13adf6fe88168fee50999af02b752", "ref_doc_id": "de4298f5-fbc9-41a6-a59d-7c5f671d60a6"}, "ee4d1527-accb-4dd6-9838-4c44408a2af9": {"doc_hash": "c06cc5e5ec72751c1158d4c6b0348e9fa5c68797c31c63a9d8fd268c7b070375", "ref_doc_id": "0c36b890-20db-4625-88fe-dc89dd530421"}, "1e7aa0a3-2aea-4491-8d56-57c784e9f604": {"doc_hash": "598baf682a9cb7384aa0dcfb5f4ec39f7fe6805ee4ead391a1978a6777619c7b", "ref_doc_id": "8e43b393-8712-4bd4-90e5-4e9f272248b2"}, "2fd8ee16-da22-4e9d-9936-c0c22d8e1ba1": {"doc_hash": "07f43164220f04c9917c211e42d9f6f2c66e6889b168b74e809248b063d42d8f", "ref_doc_id": "0a2cac94-e3ae-430e-853e-96e87c7c4076"}, "67e1cb8b-5256-48c1-a90e-ca6003f5c620": {"doc_hash": "1b6746f9f255f38f017933c334be0aaf7d5a368a474c256df7645c75829bdee5", "ref_doc_id": "563600d9-22df-4913-9ee8-0d844699b933"}, "18dd071c-a3e0-44cd-af83-15e2cde938fc": {"doc_hash": "21dfc7612ead7e9f53621d90048baf6e2457f8683fefa59624772de936601282", "ref_doc_id": "18c99039-ee9f-4928-8f54-809ac322b639"}, "5cd3fc98-b977-4d9c-b7c6-4d3b25857ff1": {"doc_hash": "477895f84b5ac2692a216cf5a7d674e4067edc3a7a1b0011f6d0f4594ff887d7", "ref_doc_id": "f846fa69-fbba-4bc4-b518-1fce147a6f1e"}, "a14086b3-9ff6-43da-a005-0537ec346656": {"doc_hash": "b6e1db907976c0d257ee689083cce8d553afa9dfd731a1b640f62e2767ab6336", "ref_doc_id": "a38742a5-fa61-4ae4-8eb4-a33df82b70dc"}, "9072d78b-a77a-4797-8cd8-92fe4ee426fb": {"doc_hash": "b7bb1769be1b834201a00a3b14b763bfc332a97718f1c4d10b1e0ced7e994fa8", "ref_doc_id": "23480e28-694a-410e-8c32-c1564b42eb4b"}, "c3d67f7c-f583-4e4d-b107-2555d2b17450": {"doc_hash": "5f07469e0aacdd6cbf2dc79addb212c50c62489bf706c427596106c0e479d084", "ref_doc_id": "904cc442-d779-4828-9fb7-2b83100b2806"}, "93cfc5ca-d795-40cb-a027-a8bb477e988f": {"doc_hash": "e16e6e91ca73dd6a98cd7aa1dd5ac5ab71bd843edcd7a2ebc7e6cbfc286a2638", "ref_doc_id": "905c92b8-d357-4515-b79e-5bff0111919b"}, "81f08320-54e0-4b34-8ba1-2353b3a272cb": {"doc_hash": "ac05b476a09b14824ae5eb91387ca9140d1f10ab5da80d02f47d2d71711ec41c", "ref_doc_id": "38cd58e3-b09e-44e0-94b1-3423dce4b9f8"}, "3106406f-8920-4dc2-a1de-29e4aae6c3e8": {"doc_hash": "b4328f34e01962111df6b4284add3c5e750303670aa1028bf97263e4c95ce383", "ref_doc_id": "a795fad3-2212-4e02-9e00-514efac487c5"}, "99896596-fae0-4b23-85d7-3ba9a58ee859": {"doc_hash": "92a2f2ff6b34387977f245a06f453c54c73d01e63b8d2909f8861ae759192a07", "ref_doc_id": "2e108bd3-c332-42da-98dd-21c0e7067bc3"}}, "docstore/ref_doc_info": {"e06d7e7e-a58b-461c-9f03-8b7a580fc463": {"node_ids": ["44a4516f-48d8-42b6-bb6f-58a4abfdeb9d"], "metadata": {"page_number": 1, "file_name": "data/finite_automata_04_handout.pdf"}}, "6422cd60-2321-4f9f-a31e-adf7b3c8e342": {"node_ids": ["79fd0146-12d1-4ff1-8076-8f75c79acb1d"], "metadata": {"page_number": 2, "file_name": "data/finite_automata_04_handout.pdf"}}, "ccea239e-3278-4217-bcc7-0073fb4c1414": {"node_ids": ["0aa9bd7a-3e07-47d1-a24c-ad2461cf4652"], "metadata": {"page_number": 3, "file_name": "data/finite_automata_04_handout.pdf"}}, "792f02b9-7eb7-471d-aaa6-f6169baedd5d": {"node_ids": ["404efbc0-6dbc-487a-9427-d3e70df83c98"], "metadata": {"page_number": 4, "file_name": "data/finite_automata_04_handout.pdf"}}, "2fc29119-41e0-4bbc-afb7-4ab7cf1e3246": {"node_ids": ["3f0421dc-ab65-4734-a71c-4dc7aa417ed4"], "metadata": {"page_number": 5, "file_name": "data/finite_automata_04_handout.pdf"}}, "09266a16-fa2a-4050-a53b-4a3b45e4ffe1": {"node_ids": ["811e87e4-fa91-4575-8784-703dbf9d7e71"], "metadata": {"page_number": 6, "file_name": "data/finite_automata_04_handout.pdf"}}, "c9eacbf1-9acb-4280-baf9-e66191bd1537": {"node_ids": ["9a2db097-d90e-43cf-abd6-c353f326e1b1"], "metadata": {"page_number": 7, "file_name": "data/finite_automata_04_handout.pdf"}}, "896d0f91-b641-4b85-92e0-2cbb50067abb": {"node_ids": ["918db2c8-8ecd-4aa4-b8ea-cd5b2eade6c4"], "metadata": {"page_number": 8, "file_name": "data/finite_automata_04_handout.pdf"}}, "7fe48277-beda-4d44-8b8f-97dd5e58eba5": {"node_ids": ["316ddb63-1bd0-4ae5-a43b-a146fdae8048"], "metadata": {"page_number": 9, "file_name": "data/finite_automata_04_handout.pdf"}}, "53dbe867-ff8e-4766-bec3-82ceb839b2ae": {"node_ids": ["606690fa-f540-43bc-a6c5-9189b00cd867"], "metadata": {"page_number": 10, "file_name": "data/finite_automata_04_handout.pdf"}}, "fba38f01-4c6f-44a2-980c-196e7ca81b26": {"node_ids": ["747b4f88-e0a2-4b3d-83b1-a628af1df150"], "metadata": {"page_number": 11, "file_name": "data/finite_automata_04_handout.pdf"}}, "418558c8-88f2-45b7-9d76-49d3c67ea76d": {"node_ids": ["158d60a9-2cb1-4bb7-ad16-fe7edaf6a03c"], "metadata": {"page_number": 12, "file_name": "data/finite_automata_04_handout.pdf"}}, "c587750e-9ec3-48b3-b9f2-b450db98e029": {"node_ids": ["7aa6e472-c355-4fb6-857f-c2f67d407d01"], "metadata": {"page_number": 13, "file_name": "data/finite_automata_04_handout.pdf"}}, "e881be5a-63d4-4f1b-a997-10fac13decea": {"node_ids": ["dbbe38c3-bf2e-4108-bf15-c347dee401c4"], "metadata": {"page_number": 14, "file_name": "data/finite_automata_04_handout.pdf"}}, "d50c5b18-20d1-4d72-9666-c534ccfba462": {"node_ids": ["408c6a88-fd3f-48c9-9bd4-a59b52643002"], "metadata": {"page_number": 15, "file_name": "data/finite_automata_04_handout.pdf"}}, "0cba35c9-da6c-48dd-b73c-684131dea98e": {"node_ids": ["08e345af-cf1a-4376-bc95-e1ce041ffa59"], "metadata": {"page_number": 16, "file_name": "data/finite_automata_04_handout.pdf"}}, "f77de622-da90-4b79-bc65-9e201d49e4c9": {"node_ids": ["8149ef63-c626-4ba9-8054-4a976acb6c70"], "metadata": {"page_number": 17, "file_name": "data/finite_automata_04_handout.pdf"}}, "863d7868-1ee3-4f05-9c72-7f1d46d6b063": {"node_ids": ["20632824-8363-4f70-8edf-a3eee67a88df"], "metadata": {"page_number": 18, "file_name": "data/finite_automata_04_handout.pdf"}}, "1ebe5d60-f409-4869-abad-ae26365cdfbf": {"node_ids": ["fab85794-b25e-42fd-80a1-12ff155a0e75"], "metadata": {"page_number": 19, "file_name": "data/finite_automata_04_handout.pdf"}}, "ae3d3124-9227-44ba-8f9b-cecee8cc8e90": {"node_ids": ["37c9f66a-a80b-4682-bbd1-50387e9a6a77"], "metadata": {"page_number": 20, "file_name": "data/finite_automata_04_handout.pdf"}}, "c9158297-daf8-44a4-9e31-13e2b745892f": {"node_ids": ["15e06973-1d82-438d-b49e-f9de36ee61e2"], "metadata": {"page_number": 21, "file_name": "data/finite_automata_04_handout.pdf"}}, "2e64b9d1-c1a2-41c4-9ceb-84f483cebdb0": {"node_ids": ["5312e1a3-76ba-4036-b69c-bf96300845e6"], "metadata": {"page_number": 22, "file_name": "data/finite_automata_04_handout.pdf"}}, "e6b87de4-a158-4cd9-9322-300f432d0fe8": {"node_ids": ["e80be110-19c2-42ba-b0cc-a1b73b00b842"], "metadata": {"page_number": 23, "file_name": "data/finite_automata_04_handout.pdf"}}, "ecfc2bb7-15c6-4952-a843-21830b4d4653": {"node_ids": ["9c54f287-5e66-40e8-9659-53c0b2d97e5a"], "metadata": {"page_number": 24, "file_name": "data/finite_automata_04_handout.pdf"}}, "abd01412-a2a5-4888-ab54-d9db0e07d473": {"node_ids": ["b7ae6035-c87a-4955-821f-dc4a5d75a757"], "metadata": {"page_number": 25, "file_name": "data/finite_automata_04_handout.pdf"}}, "9c5efe40-56b8-488b-9dbc-d097c4258d68": {"node_ids": ["14ec1988-cadc-4a9d-871e-e8ca9ef2a9c5"], "metadata": {"page_number": 26, "file_name": "data/finite_automata_04_handout.pdf"}}, "cc5aebbf-45ea-4b83-99f3-fff6be1134aa": {"node_ids": ["282bccf3-bb38-419b-b50f-ee9038aa356a"], "metadata": {"page_number": 27, "file_name": "data/finite_automata_04_handout.pdf"}}, "e2e91905-2d15-4b55-99df-347d83fca3c3": {"node_ids": ["51c8feb3-82b1-42fd-abb6-0ccc4087b037"], "metadata": {"page_number": 28, "file_name": "data/finite_automata_04_handout.pdf"}}, "fd7e1852-c001-4a86-9e09-d4121cee3ee4": {"node_ids": ["74e730ee-cd69-4dea-bca1-b54c34843a63"], "metadata": {"page_number": 29, "file_name": "data/finite_automata_04_handout.pdf"}}, "a94cf763-fe6d-4566-862a-410f8b003402": {"node_ids": ["4243b66a-f986-49a0-b011-80bc8d4afb8e"], "metadata": {"page_number": 30, "file_name": "data/finite_automata_04_handout.pdf"}}, "09b608c2-3577-4bab-bf3e-3a03bb544e46": {"node_ids": ["13b1e20f-33e4-412e-a321-883f3ce20ed3"], "metadata": {"page_number": 31, "file_name": "data/finite_automata_04_handout.pdf"}}, "5a6a7bc1-484f-4e11-a4a0-107029a66dab": {"node_ids": ["907d84ae-2ee9-4d8d-8ee9-09be239c6cf1"], "metadata": {"page_number": 32, "file_name": "data/finite_automata_04_handout.pdf"}}, "9ec3b70a-384a-4198-91a9-663c1bddfa62": {"node_ids": ["5503f188-0cae-411d-9af9-847ab0174b2f"], "metadata": {"page_number": 33, "file_name": "data/finite_automata_04_handout.pdf"}}, "8ae4db16-e834-4b63-aec6-9011df4709ee": {"node_ids": ["4d164f9c-d54b-483f-a407-f4fe77c1497e"], "metadata": {"page_number": 34, "file_name": "data/finite_automata_04_handout.pdf"}}, "663b1118-ae46-4bb4-b163-08946d6a6b1c": {"node_ids": ["5b151807-7f0f-4714-bcbc-2dddac11f51e"], "metadata": {"page_number": 35, "file_name": "data/finite_automata_04_handout.pdf"}}, "e7a0c189-4d0a-4efc-b233-349b6ab3c921": {"node_ids": ["8cfb7d45-d5a3-4bd9-bdef-6a0dc01a716a"], "metadata": {"page_number": 36, "file_name": "data/finite_automata_04_handout.pdf"}}, "e49e07c8-fa6d-43d7-bfe5-5ba466d699af": {"node_ids": ["e5cb788e-d634-4036-894b-bf41c5e5f0fb"], "metadata": {"page_number": 37, "file_name": "data/finite_automata_04_handout.pdf"}}, "6afb2918-29ff-45a0-a112-5c1e52ad55f8": {"node_ids": ["4365179e-5f3f-413c-8298-c317e4f6b258"], "metadata": {"page_number": 38, "file_name": "data/finite_automata_04_handout.pdf"}}, "7e2cd070-64de-47c6-9c59-08abdadc6e09": {"node_ids": ["9c25c837-77f6-4484-ace7-83bcf13359b2"], "metadata": {"page_number": 39, "file_name": "data/finite_automata_04_handout.pdf"}}, "466e5638-cb89-40c1-aae6-8b70d4e32850": {"node_ids": ["3a5e9ce1-f4bf-4d32-b294-55e1ca70dcea"], "metadata": {"page_number": 40, "file_name": "data/finite_automata_04_handout.pdf"}}, "92e08c50-d71b-465b-b044-385d76199562": {"node_ids": ["fe1eca56-8850-4f09-bd4b-025ccd7d7e7a"], "metadata": {"page_number": 41, "file_name": "data/finite_automata_04_handout.pdf"}}, "d9a6cdc6-aa63-4e03-bfac-55f337cc53bd": {"node_ids": ["4f59d11a-e974-40bc-b0ce-92426e2931a5"], "metadata": {"page_number": 42, "file_name": "data/finite_automata_04_handout.pdf"}}, "02ceb922-196e-4b77-bd0c-ddc4fdff10f4": {"node_ids": ["83c7e97e-5bf0-4fc1-89db-e9b58f9f631f"], "metadata": {"page_number": 43, "file_name": "data/finite_automata_04_handout.pdf"}}, "f1c8d298-ef17-431f-8f56-2836c26e0fe9": {"node_ids": ["3e5c864f-81ad-4b67-86b0-bbf441b39054"], "metadata": {"page_number": 44, "file_name": "data/finite_automata_04_handout.pdf"}}, "d5680555-aadb-4a8e-848f-561df3f363dd": {"node_ids": ["bc9e6995-a6b4-4297-b953-826146df086b"], "metadata": {"page_number": 45, "file_name": "data/finite_automata_04_handout.pdf"}}, "ec1bb5c9-11a4-4c14-a876-01b8e1173080": {"node_ids": ["4bb432bb-0036-4fb8-b191-a93268da5a7b"], "metadata": {"page_number": 46, "file_name": "data/finite_automata_04_handout.pdf"}}, "14924ae2-a3e0-4214-aff8-6d7ca98b05ec": {"node_ids": ["27c87490-8903-4584-91e9-0b20309c8153"], "metadata": {"page_number": 47, "file_name": "data/finite_automata_04_handout.pdf"}}, "52baa816-2fe8-40e5-8a39-b5f4cf652398": {"node_ids": ["480243ec-e1e0-4398-9e00-d017797b6b28"], "metadata": {"page_number": 48, "file_name": "data/finite_automata_04_handout.pdf"}}, "18804887-8c4a-4b35-ab3b-a9dfd1dc5514": {"node_ids": ["4c5fd6e1-d7da-4f95-8906-68dbe58cab01"], "metadata": {"page_number": 49, "file_name": "data/finite_automata_04_handout.pdf"}}, "b1386fb6-85ad-4fab-93b0-ed37d18f9451": {"node_ids": ["2600ac1f-ffb8-4399-a063-6f84fe276171"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "ce49c018-3db7-4d65-9830-422c565a4817": {"node_ids": ["b6c4ed74-24a8-46b8-ad0a-14801321d1ab"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "00161289-efef-4d60-b690-5ff8816fae25": {"node_ids": ["6e08f00b-6b41-4dff-acfb-6ffb4b3ae436"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "88d5f645-9e47-4148-84c0-be27114c5d59": {"node_ids": ["56400739-3c26-44c0-8bd2-7142c261ba75"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "7c78a765-cdcf-45c9-b74d-4cf52f493248": {"node_ids": ["2db5d772-2787-4f10-bc00-566545abef0a"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "377e8077-b608-4dcb-a58e-d01210294205": {"node_ids": ["879b5a55-51d6-4e52-9fd5-f0886a7c0dff"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "90127588-2851-43ad-bfdc-7b4ee5ff6f31": {"node_ids": ["0911a226-1745-42da-8b71-ecd4c5a79d47"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "f888be40-ef31-4678-ada5-3f4e9ba312d4": {"node_ids": ["80b44619-c59c-4c0f-88b6-c3cfb1b041ea"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "4a480917-fbdc-4394-b2f9-c10c69209118": {"node_ids": ["6695fdc7-383b-4e6a-816c-46ff4b5b994d"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "f4d4f92b-2a1d-4201-bfb2-eb009729cf89": {"node_ids": ["0a59c23a-2c1b-4806-835d-3a530b468048"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "425d87cc-2396-4503-8651-83b94db81b45": {"node_ids": ["6eeb919d-3ee1-4967-98c1-ed8556a4d76e"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "4c48cbe9-d0ee-4a2a-85e8-51433af36bc5": {"node_ids": ["ba2c4128-8dd1-4854-9011-e157887e0a9c"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "3a9f053a-b3ea-4cbb-8c2a-527a9290fff6": {"node_ids": ["542af333-5cc0-46a8-a2e2-a4ce683caff8"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "162622bb-e6e3-4ea2-a206-05017df4dccf": {"node_ids": ["b0f2ba1f-464d-4bea-b877-0c15413e1ff0"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "7ea18c94-16a4-433b-b258-afafb3325928": {"node_ids": ["14ce5567-2462-4a6b-9ed2-6550067a22b0"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "28116bfc-9dbd-4646-b790-3515969c56fa": {"node_ids": ["91803b6d-c0fb-421b-b469-46557b520786"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "5b79bcd2-ef15-4a11-94f8-d60efa66e83f": {"node_ids": ["cb9e4f26-8949-4aae-b263-31624afd9754"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "3e0e87d6-522a-46c4-93a6-541a6d01ffae": {"node_ids": ["8469eb3d-384c-4412-9763-6ae57f3911c9"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "620974e6-9c9c-45be-b6c5-5db4d79733ef": {"node_ids": ["b06faa2f-2108-4bea-b2a9-48a9f2d5b42e"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "77a9814c-c35e-452d-974b-e5515c763f50": {"node_ids": ["786a6ff9-7b09-4514-b924-b95874f53c2b"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "4d1f5928-bda4-4c0b-984f-f109d0da0903": {"node_ids": ["4a0d0678-7365-41bc-97cf-bef5e5d5bf42"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "00794d28-190b-4000-a8db-e4576a615c22": {"node_ids": ["bf7bdd8d-f1a4-4747-b68a-d8ea0a6a3155"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "8217f657-4b06-4560-9387-9a9ea32eb7f6": {"node_ids": ["01fe24b7-4d1d-476a-bae6-b47510460ece"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}}, "1201afc4-3036-4df6-bf35-e670a682b8f1": {"node_ids": ["96071e48-6285-4eca-b7b7-6200394b6670"], "metadata": {"page_number": 1, "file_name": "data/turing_machine_02_handout.pdf"}}, "d60d05cf-c748-4bb6-853f-888add44bd73": {"node_ids": ["a03c8cf9-47a9-4aaf-89c0-51176e780611"], "metadata": {"page_number": 2, "file_name": "data/turing_machine_02_handout.pdf"}}, "53ec7105-a5c5-497c-9bdf-510a748c9911": {"node_ids": ["63bfe296-32d0-47b9-ae54-06b9084a44fb"], "metadata": {"page_number": 3, "file_name": "data/turing_machine_02_handout.pdf"}}, "b1fc1513-a205-4f29-9d32-a431aa6be6b7": {"node_ids": ["3b72e02b-b704-4510-8b8f-c3fcfa00ddd2"], "metadata": {"page_number": 4, "file_name": "data/turing_machine_02_handout.pdf"}}, "fc9653a0-fb91-484c-8945-f46af6b63c09": {"node_ids": ["22cc71d0-97d4-48f4-a111-423f3628af9b"], "metadata": {"page_number": 5, "file_name": "data/turing_machine_02_handout.pdf"}}, "b9053f8d-0a5a-4446-9739-ab5072c96ad0": {"node_ids": ["5bb19f60-a4b3-45a3-9bf0-f2ae85b2ae72"], "metadata": {"page_number": 6, "file_name": "data/turing_machine_02_handout.pdf"}}, "56e57d9d-6b90-4e60-bc1b-cc1c605370c9": {"node_ids": ["6eb26b5b-09e5-4998-b563-d12ea60b6cc3"], "metadata": {"page_number": 7, "file_name": "data/turing_machine_02_handout.pdf"}}, "53fbc237-cfad-41fa-a81e-e4391be04eda": {"node_ids": ["6f3c6cb6-f870-4130-aaa4-3a9c69532492"], "metadata": {"page_number": 8, "file_name": "data/turing_machine_02_handout.pdf"}}, "67846276-9d0f-4984-9f17-6c94abea1215": {"node_ids": ["135c0270-a941-4e15-b615-704cc24a99d7"], "metadata": {"page_number": 9, "file_name": "data/turing_machine_02_handout.pdf"}}, "7aa7e20e-6184-49b8-babd-79f086856f9a": {"node_ids": ["4e6aec91-1f7d-4a50-8394-a523bc2154d0"], "metadata": {"page_number": 10, "file_name": "data/turing_machine_02_handout.pdf"}}, "651ef24f-fe22-4ef5-acfa-f7bdb8341b3d": {"node_ids": ["b52e53d7-6073-4744-a0b8-6ded95795e70"], "metadata": {"page_number": 11, "file_name": "data/turing_machine_02_handout.pdf"}}, "70a96e39-d6f9-4fa3-a802-95cd305f4ff1": {"node_ids": ["381f303a-acbb-4544-ab90-dd4f3a4663a8"], "metadata": {"page_number": 12, "file_name": "data/turing_machine_02_handout.pdf"}}, "f497ee38-6c98-4e34-b262-3c9489a5a5e4": {"node_ids": ["e89873b8-26a2-43bf-a108-34c00eeea315"], "metadata": {"page_number": 13, "file_name": "data/turing_machine_02_handout.pdf"}}, "7c49de1e-9f22-47ad-926e-cc265a113ecc": {"node_ids": ["d6215dcd-ad20-4e6b-b5c9-f96eca613e6c"], "metadata": {"page_number": 14, "file_name": "data/turing_machine_02_handout.pdf"}}, "a23060d3-7fc0-44c1-935f-bf717ab30ed6": {"node_ids": ["087227f5-a237-4266-bb56-0f25d2cc9018"], "metadata": {"page_number": 1, "file_name": "data/finite_automata_01_handout.pdf"}}, "e72add08-a51c-4cc5-9399-9ce9efdd9b78": {"node_ids": ["40b64948-51ce-44b7-8876-7b44d5152ffd"], "metadata": {"page_number": 2, "file_name": "data/finite_automata_01_handout.pdf"}}, "a9ba1f44-d982-4669-9fca-ce7b7000beb3": {"node_ids": ["ebed8870-e638-4290-bdef-302394fb5c98"], "metadata": {"page_number": 3, "file_name": "data/finite_automata_01_handout.pdf"}}, "aa136feb-6535-4523-88bd-e76550c00f9e": {"node_ids": ["0aaccdbd-bb70-4c75-8044-6a4835b7d237"], "metadata": {"page_number": 4, "file_name": "data/finite_automata_01_handout.pdf"}}, "75886ffe-9a16-4591-b4f7-5452f85b58df": {"node_ids": ["27f5085f-cb67-4f53-9d85-82e0b952990e"], "metadata": {"page_number": 5, "file_name": "data/finite_automata_01_handout.pdf"}}, "4f6d7880-bd44-4a73-ab9b-daeb57812aa1": {"node_ids": ["2a0a2b3c-b914-416f-88e0-92c83b08be43"], "metadata": {"page_number": 6, "file_name": "data/finite_automata_01_handout.pdf"}}, "21809133-b190-4792-8c9f-632c9340f90c": {"node_ids": ["7dc7abe3-3450-456f-a4a0-75a585904414"], "metadata": {"page_number": 7, "file_name": "data/finite_automata_01_handout.pdf"}}, "ffd3a7d7-069c-4ecf-a4b8-dbe55bb64b01": {"node_ids": ["2a0452cd-194c-4dfd-9357-1e56b85665f9"], "metadata": {"page_number": 8, "file_name": "data/finite_automata_01_handout.pdf"}}, "abfe0c50-9e30-4175-b51d-5f07b502f632": {"node_ids": ["5180a6c2-bc69-4b09-941b-42b8267d0bf3"], "metadata": {"page_number": 9, "file_name": "data/finite_automata_01_handout.pdf"}}, "43fac8c0-4b29-4cef-a6ac-7d1f35fce8c8": {"node_ids": ["e0a3b9aa-176a-449d-b2bc-6b96007f9cae"], "metadata": {"page_number": 10, "file_name": "data/finite_automata_01_handout.pdf"}}, "4fb978c0-d241-4981-aec2-ca2db0fcaeaf": {"node_ids": ["26ba0906-e8cf-4cf8-abea-c7b2050930b7"], "metadata": {"page_number": 11, "file_name": "data/finite_automata_01_handout.pdf"}}, "29578f41-64e3-48e5-9024-8a54483e265b": {"node_ids": ["ce3f448c-0cae-491b-8a24-64fd97bae219"], "metadata": {"page_number": 12, "file_name": "data/finite_automata_01_handout.pdf"}}, "4c979f28-6faf-45d1-bd31-3366faa35b11": {"node_ids": ["b98e5633-abfb-40e3-9cc7-f0c28f3fb9a4"], "metadata": {"page_number": 13, "file_name": "data/finite_automata_01_handout.pdf"}}, "e1cb3f9a-e7de-47fa-afb6-e01d58ccd4b9": {"node_ids": ["d6be9560-b049-4c4d-8633-4e4388933db8"], "metadata": {"page_number": 14, "file_name": "data/finite_automata_01_handout.pdf"}}, "c5266d44-a3d6-42cf-82dd-0836f0f7105e": {"node_ids": ["4d404ef2-14e2-4016-9160-ae1b12f2e9a9"], "metadata": {"page_number": 15, "file_name": "data/finite_automata_01_handout.pdf"}}, "67766adf-526c-473f-b29d-bc8b38fa515a": {"node_ids": ["97ad144d-dd6f-4975-8f99-e204ddd97cd6"], "metadata": {"page_number": 16, "file_name": "data/finite_automata_01_handout.pdf"}}, "1239ecc3-4088-499b-a4be-e881a437770f": {"node_ids": ["e0f220a3-71cb-437c-ba0c-a174b3668b84"], "metadata": {"page_number": 17, "file_name": "data/finite_automata_01_handout.pdf"}}, "d7cbe54f-6253-4253-a605-c578eceabd98": {"node_ids": ["40cbf2fd-29e2-4ff0-b6dd-07c0060d9ea4"], "metadata": {"page_number": 18, "file_name": "data/finite_automata_01_handout.pdf"}}, "1915f845-6e52-49d1-97d2-b62d0c552310": {"node_ids": ["7b5ebe00-44fb-4f5b-9a01-66cf702fc1c2"], "metadata": {"page_number": 19, "file_name": "data/finite_automata_01_handout.pdf"}}, "aeb70f03-ef30-43cb-8d7b-034826b0320f": {"node_ids": ["bd0e6f61-5219-4b4f-8892-27bab60550eb"], "metadata": {"page_number": 20, "file_name": "data/finite_automata_01_handout.pdf"}}, "33bff7e8-f3c8-46ae-aca6-500cc2e861c0": {"node_ids": ["d2838f67-36f4-4831-a014-b857337be30b"], "metadata": {"page_number": 1, "file_name": "data/finite_automata_02_handout.pdf"}}, "33537690-b4d2-446c-b019-e412a21967ad": {"node_ids": ["ed39f245-795a-4ec8-9158-da35347232c5"], "metadata": {"page_number": 2, "file_name": "data/finite_automata_02_handout.pdf"}}, "268a753e-cd35-48fb-87f4-2e85619cdbfe": {"node_ids": ["2e0f219a-fbfc-4c6f-a38e-19e2889727c7"], "metadata": {"page_number": 3, "file_name": "data/finite_automata_02_handout.pdf"}}, "be119211-3583-4fc9-aa84-6f25bbe0590b": {"node_ids": ["54893ab6-15da-47c9-9580-cd8a73e0b774"], "metadata": {"page_number": 4, "file_name": "data/finite_automata_02_handout.pdf"}}, "b47aa7d7-b12d-4c11-8bee-de58e5f3cf99": {"node_ids": ["9354e623-9464-430a-85c1-ed1a0a685825"], "metadata": {"page_number": 5, "file_name": "data/finite_automata_02_handout.pdf"}}, "da03ca81-8f56-44a7-ad5a-4b3bc91da4ba": {"node_ids": ["1d42ac74-e520-4691-8b0c-98c26f6390bf"], "metadata": {"page_number": 6, "file_name": "data/finite_automata_02_handout.pdf"}}, "3416562b-b5c6-4c1f-a58c-645041792890": {"node_ids": ["08d1d904-bd85-476c-ba49-7549b52c143f"], "metadata": {"page_number": 7, "file_name": "data/finite_automata_02_handout.pdf"}}, "0e1c4cce-b403-4faa-a41d-13d9dee922d5": {"node_ids": ["a355cba3-44bc-4b3a-83cc-7e65eb817512"], "metadata": {"page_number": 8, "file_name": "data/finite_automata_02_handout.pdf"}}, "2ee7c1f1-08ad-466c-a7a8-5a529b8e6ee6": {"node_ids": ["bf5ff473-f3bd-45ec-9e7a-0eeca807cf7e"], "metadata": {"page_number": 9, "file_name": "data/finite_automata_02_handout.pdf"}}, "49118fc0-c987-4507-addb-73640285d570": {"node_ids": ["8cd5aa21-0241-4f9f-b8ca-cc2f8ef438f8"], "metadata": {"page_number": 10, "file_name": "data/finite_automata_02_handout.pdf"}}, "02d0ce3f-56e9-4966-bc7b-fd1d2589d295": {"node_ids": ["69dae294-3216-4119-a10a-c7bb69dd35f1"], "metadata": {"page_number": 11, "file_name": "data/finite_automata_02_handout.pdf"}}, "275bed04-9789-4330-92b4-64cc8e7d3a29": {"node_ids": ["90d939d0-f4a0-41b4-a27a-4c47a0f636ef"], "metadata": {"page_number": 12, "file_name": "data/finite_automata_02_handout.pdf"}}, "b9b439b9-66bc-47ad-b55c-efeb8d18490c": {"node_ids": ["18f7c5e8-a326-43fa-9320-7f64b85b3a91"], "metadata": {"page_number": 13, "file_name": "data/finite_automata_02_handout.pdf"}}, "f0703d5c-6799-4917-90a1-103fad71995c": {"node_ids": ["6e93af0b-1548-4d2a-ab0d-1543a6e22af9"], "metadata": {"page_number": 14, "file_name": "data/finite_automata_02_handout.pdf"}}, "fb90d954-52f2-440d-bf2a-3d472c8126b5": {"node_ids": ["e8013bd5-990e-4d6c-af0b-41662875b89e"], "metadata": {"page_number": 15, "file_name": "data/finite_automata_02_handout.pdf"}}, "42522ea5-c891-4f9c-b164-fd0c950ddac0": {"node_ids": ["2335c1bd-979a-4955-a866-19da3c341988"], "metadata": {"page_number": 16, "file_name": "data/finite_automata_02_handout.pdf"}}, "e27e0b80-9c95-4db7-a28f-d1bad7cf1e4a": {"node_ids": ["ae3dbe2a-c5e2-4c6d-b147-a384b340e9e8"], "metadata": {"page_number": 17, "file_name": "data/finite_automata_02_handout.pdf"}}, "02dedd44-c93f-451f-90c8-c93c4619bcee": {"node_ids": ["10ad9e4e-1e48-4b92-b804-d134f671fc21"], "metadata": {"page_number": 18, "file_name": "data/finite_automata_02_handout.pdf"}}, "2004be53-d697-4701-b9e9-4e860e877b1b": {"node_ids": ["64c67597-ebd6-494d-8dc9-4b3ac4a18833"], "metadata": {"page_number": 19, "file_name": "data/finite_automata_02_handout.pdf"}}, "90e56275-c3e3-40a1-9482-8550ba5323f0": {"node_ids": ["874c2b98-79a1-48a7-bcea-cde96aa66863"], "metadata": {"page_number": 20, "file_name": "data/finite_automata_02_handout.pdf"}}, "e1692368-fbc4-4cce-8e92-31446be6d163": {"node_ids": ["62f33d6a-d279-4ba8-98cc-89a9c3fd415f"], "metadata": {"page_number": 21, "file_name": "data/finite_automata_02_handout.pdf"}}, "f5d499ab-869a-40d6-94ae-93acf0a76d5f": {"node_ids": ["f0095c55-0c0d-430f-8445-dcfe95b820b9"], "metadata": {"page_number": 22, "file_name": "data/finite_automata_02_handout.pdf"}}, "66271a71-762d-41d1-a48a-b64ecccc8575": {"node_ids": ["12441627-7081-4502-aa8c-a48eb0f873c3"], "metadata": {"page_number": 23, "file_name": "data/finite_automata_02_handout.pdf"}}, "bb822432-da73-4cb8-aa49-791fdade5749": {"node_ids": ["b281dca1-cd39-4065-a83b-8a211768ca28"], "metadata": {"page_number": 24, "file_name": "data/finite_automata_02_handout.pdf"}}, "f5741d7c-21a6-41f5-9738-575ca347de0c": {"node_ids": ["32028989-b629-4e4e-ab5c-c5551c1ac592"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "c7de38fd-d9aa-4c33-88ec-a44be9ff7b9d": {"node_ids": ["e49ddd5d-01f3-48f1-9ac6-c9dc783179a3"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "fcd0446e-c5a4-4381-9364-3d1156892065": {"node_ids": ["4dc4830f-ff65-450e-b281-feb4d5e76249"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "d859ca18-b279-4b2c-9da1-f2f307c69980": {"node_ids": ["b1e59573-5fad-48ae-9ddd-3c070c6f789a"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "68f97990-1b07-476b-b1aa-dcde472bf156": {"node_ids": ["1c277a74-fc74-4126-bf3b-05ba93e183fc"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "8715f287-f413-404e-89b7-7d16ac6ff86f": {"node_ids": ["473e6e07-1bb8-4d52-bb09-3f90a64fdfd5"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "ff6839ec-42bd-4037-96c8-bafd3557384e": {"node_ids": ["0b025cc9-77e7-44f5-9cd3-de54d0a6aad4"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "826ce114-e57e-492d-9d36-db999b785c38": {"node_ids": ["1118c353-18fb-483a-8671-6a195dfa9e0f"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "34562b9e-41b0-4c55-b91c-a8e68e78c5de": {"node_ids": ["1022f269-ec9e-43d7-9430-c959108fbf5b"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "652b823a-51d6-4dd5-8a32-a9439ec86d14": {"node_ids": ["64a55c16-2ca8-46f2-9df6-f0446a1f8a4d"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "5c97d1bd-fb04-4323-85fc-1cb5de8a908e": {"node_ids": ["ec1ea724-9db0-4b4c-bc81-3033ca2aa3a9"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "f2b5f1a1-6867-41fc-8227-8ec99b6cea22": {"node_ids": ["16ccf850-39d9-468a-a6c7-e101b61a4fa7"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "177e0539-83a6-4ee6-b85b-8120da8f2bcd": {"node_ids": ["0511dd64-02e5-435d-8358-a45954132916"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "5d4ffcbd-0aa5-4ecc-8f27-26f90df73d2d": {"node_ids": ["4eb73dd6-245f-4699-be61-33c5dcad8f6d"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "14b3ded6-2db4-4f6a-8be6-d6092bcfce2a": {"node_ids": ["be86bcee-6fd6-45f8-a723-7136f6d86f33"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "d224812f-ed2c-48b6-8b0d-4b85b6056a6d": {"node_ids": ["d5bdcc19-7352-42fe-bb3f-6515f67612f8"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "65ffad4d-a233-48b3-a13e-ecf477ded187": {"node_ids": ["13ab6c13-c02c-4a99-9110-5dfafca14a4b"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "19341d89-e6ff-4743-940c-b22f9a3293e5": {"node_ids": ["251c8e79-c925-4387-9cad-7462c94f0383"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "e8c640c8-7e65-4cca-9734-1bd2a956f7e7": {"node_ids": ["878b61fa-d1d7-4c4e-936c-ec9995cc92d7"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "e614d752-bcf5-49a5-9fc9-7883c532d2d9": {"node_ids": ["a6ba10e8-ee3c-4199-98f2-a3406d8f17a6"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "dc2a682f-573e-40c2-9bcf-343269d2a6dc": {"node_ids": ["c0b8b459-ef0b-4173-b93d-cfa855c0d6e9"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "94174a27-1550-49dd-bc2e-f888f9496523": {"node_ids": ["9d03caec-492b-42c8-a666-597aed8a1ff6"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "6db89246-18d0-47d7-85af-16b2dc31cd15": {"node_ids": ["024d6068-4e46-43d9-8a3b-7c1598e98d50"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "d84d45e6-be5a-42db-a647-b6cc84755468": {"node_ids": ["6c5e7bcc-e38e-47c6-b36b-cbb890ca402f"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "5eb418ed-3041-4ad6-8bd9-b8129cae2861": {"node_ids": ["ebed2dc9-9faf-4ec0-97b7-917c0f01cfda"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "d01b286d-3cce-46f2-a9ae-f0708d27e75d": {"node_ids": ["6f40f275-021e-4f4a-a7ef-8c12671097f0"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "bf16fd0c-21c0-41d5-93fe-5b78e601078a": {"node_ids": ["e445d215-3d9f-4f88-8b66-b54af187dbfb"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "a37f829a-0fd3-494b-b314-c279ba3c2d65": {"node_ids": ["86d1181b-979c-456a-ad72-4c6db3942256"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "b9d7d631-e605-4c87-91b3-8f92585b11f5": {"node_ids": ["e06064ef-047e-4e1e-bf8e-47ed84133f39"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "1d8e5a67-9ec0-4f33-afd8-5a97a8e192c9": {"node_ids": ["62861af4-7d71-4d9a-9a3b-a03f2506e9ae"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "bb591a49-da5c-4f82-9898-0d2a0d9ae501": {"node_ids": ["7b42f4d8-434d-4f8f-a038-86e5566150d0"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "d4f282e5-53b9-4e70-9933-c9dbe963e10b": {"node_ids": ["3b894284-4fab-4e8e-bb3d-3b9d35e1b2b0"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "d25d7bf1-7339-488a-8b46-bb0749a5166f": {"node_ids": ["9c693b31-9619-4fe7-aefd-3fdf2228f520"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "58e2f8d2-0842-4902-8e5a-b73208e12a9e": {"node_ids": ["c0ec1376-4987-438a-a9a4-177dad514475"], "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "8ac57253-6f5f-4cfa-a9ec-2ea74903388e": {"node_ids": ["dc8e23af-ecc1-41b4-adad-ef806f7725d3"], "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "57a131dd-3f13-475a-9428-926232d89fb6": {"node_ids": ["cadb9337-db01-4690-859d-636e48de1412"], "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "dd01422e-34d1-47ca-a0f3-c80b3ff6d0fe": {"node_ids": ["56c22d83-d5bf-4bae-a42b-88e30e05a718"], "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "6a6baab4-2547-4cbe-b1fe-465c0d949762": {"node_ids": ["d849bfcb-e3c9-4ea3-9353-5bcee8f6ee11"], "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "2bae00d6-f4c5-4561-84c3-5307560822fd": {"node_ids": ["f148cc4e-f8d4-466e-823d-fa133585c6fd"], "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "0ab8f1e7-1fb0-4774-9f93-2894a8287369": {"node_ids": ["3ac097ec-9d99-44ff-b398-253cd94d58ae"], "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "f839c0d4-a929-4b35-93db-418d7729f6bf": {"node_ids": ["53f6fb90-0138-4383-9dc5-2fe86404337e"], "metadata": {"page_number": 41, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "010435cb-5b2e-4b28-b5e8-54c284e1a5e3": {"node_ids": ["85f80be4-2340-4355-a9ea-39edaf419b00"], "metadata": {"page_number": 42, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "80490ea4-ef44-4b7a-bf3f-5dbb4800cd23": {"node_ids": ["8b484003-2a3b-4c7f-9e7d-8ff656f5d12f"], "metadata": {"page_number": 43, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}}, "e6f6b118-d604-46b6-bb81-dd86f1c4adb2": {"node_ids": ["517dd0e2-62dd-43eb-9626-26fd6ebff32e"], "metadata": {"page_number": 1, "file_name": "data/turing_machine_04_handout.pdf"}}, "3a11fae2-a59c-4767-9fa0-186aee0f6b3f": {"node_ids": ["18d0ebe2-2ed2-4c55-9156-c7725997e9bd"], "metadata": {"page_number": 2, "file_name": "data/turing_machine_04_handout.pdf"}}, "8606e7a6-1ab0-405e-8b62-e0fc6586d593": {"node_ids": ["ff45e917-6a6f-4e6c-9984-56af5f016d18"], "metadata": {"page_number": 3, "file_name": "data/turing_machine_04_handout.pdf"}}, "76196a68-7981-4c7d-945c-a04499e66762": {"node_ids": ["aab1507b-06bc-4478-bf03-7caa448ebf84"], "metadata": {"page_number": 4, "file_name": "data/turing_machine_04_handout.pdf"}}, "d02f9b46-091b-4c7b-aae2-fd39ccae1af6": {"node_ids": ["66fac2da-c6fb-4393-b8ad-f46a29563380"], "metadata": {"page_number": 5, "file_name": "data/turing_machine_04_handout.pdf"}}, "2f203be7-76b2-46a3-8f4e-3444a0b499a2": {"node_ids": ["b321d392-42e9-44a5-a351-9d695a62bd1e"], "metadata": {"page_number": 6, "file_name": "data/turing_machine_04_handout.pdf"}}, "daed4d87-e851-41f4-98a6-f0653081d48b": {"node_ids": ["559f7ea0-9b39-422c-8dfd-e8b4ee970962"], "metadata": {"page_number": 7, "file_name": "data/turing_machine_04_handout.pdf"}}, "665a0a77-502b-4c27-9467-9d5874b27483": {"node_ids": ["2d8abc21-9c87-4ca7-bea9-1a92153d3060"], "metadata": {"page_number": 8, "file_name": "data/turing_machine_04_handout.pdf"}}, "ecc51507-0ff9-4e49-a19f-5af643f641ac": {"node_ids": ["5c9d901b-9fa1-48e1-b569-6b714e9545cd"], "metadata": {"page_number": 9, "file_name": "data/turing_machine_04_handout.pdf"}}, "636b8d85-8dcc-48f6-acbe-d300c630e506": {"node_ids": ["ab1f283c-43ec-40bc-ad7c-d82404678886"], "metadata": {"page_number": 10, "file_name": "data/turing_machine_04_handout.pdf"}}, "ab0fbfe6-9386-4a48-90e1-730abead36de": {"node_ids": ["4dde2cd1-a05d-445d-9aa7-d4354549166d"], "metadata": {"page_number": 11, "file_name": "data/turing_machine_04_handout.pdf"}}, "33c4be35-9853-4469-8d78-c9ab83e01723": {"node_ids": ["56d2de3b-929d-478b-a3e7-59240cf8a2c2"], "metadata": {"page_number": 12, "file_name": "data/turing_machine_04_handout.pdf"}}, "78bdb8dd-4de2-43a5-b2a3-d860c7695619": {"node_ids": ["03050609-6a20-4dde-881e-6297414e5970"], "metadata": {"page_number": 13, "file_name": "data/turing_machine_04_handout.pdf"}}, "f744805b-9538-4ab1-a894-c961027efb75": {"node_ids": ["4e1937f5-e3ab-4d63-93e4-fd0b94677198"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "ce9169a6-62a6-4cec-94d0-508cac215a6b": {"node_ids": ["2699b800-cda3-489c-a834-9a8efd56d419"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "78548f55-5957-4fe2-83aa-ec57754083a8": {"node_ids": ["5d0d1fb4-423d-49c4-835d-91c15be1a38b"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "5771ff67-72bf-4251-930b-833d1764632b": {"node_ids": ["15f4e7e6-1912-4d52-a2a4-375c25cdf137"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "bca8fedc-c8f0-422d-a4b8-65ae810bce59": {"node_ids": ["72b44502-e75f-4b73-ab8b-07667bcfd5a5"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "f4bd7278-bc46-4029-a1f9-914ffd8a4b2f": {"node_ids": ["b1b920ab-3a0b-462a-9076-88709bc3b42b"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "02c96afc-6870-4d9f-90f4-a3ae2e6820cc": {"node_ids": ["61d06b67-33f4-4d8c-a89d-34ee655714ab"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "a373aa68-e184-4dab-85df-867937dcdb98": {"node_ids": ["d3bfdd2b-27c9-4125-b1c7-6213fcb87e2d"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "319afecd-f575-4d19-8c70-94ef80042c83": {"node_ids": ["d4a85794-44ea-46dd-aee5-0382241a20ac"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "1b085ac9-c481-4f39-bb59-45942753f3d1": {"node_ids": ["394f9e67-46a2-406c-a455-accb5443e4b5"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "3f412286-2258-4001-a60d-c422d6a67fcd": {"node_ids": ["44459b47-9047-4395-853a-6e36b2b1e41b"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "f7d6531d-80dc-46c7-8574-0931175abba8": {"node_ids": ["55909789-5a47-427a-999c-93cdc3b2b209"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "233401e6-f50b-47ac-a580-ec26f54046c1": {"node_ids": ["9ad11277-0150-498a-bd2f-ceba9d200658"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "b72b3a82-e2da-481a-869c-45dab9c4acf2": {"node_ids": ["07981ea9-a543-4553-ad56-832cdbcc5071"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "c289301e-a55b-477f-808c-d2e7a332b617": {"node_ids": ["fdea6b30-d46b-4b51-9f21-09c7f4b5d78f"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "fe91f5e5-47d9-4946-8247-4381d7af140f": {"node_ids": ["eb5c20d5-e5ee-4c2b-a06e-350899557cc7"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "1bd6ad7c-57a5-47e3-848c-5eff3697a2dd": {"node_ids": ["93ba9d86-f512-409b-aa4f-97ea0841f726"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "ab69c291-5e76-470c-ae69-41db01d955a9": {"node_ids": ["66367a1a-ef01-402d-aca3-aa13825f4ebb"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "6de3ff5c-dedd-43b3-8993-8f911cad9136": {"node_ids": ["4da3fd16-b28b-4468-a2b5-6bad720fb220"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "36fece7e-765a-40e7-afc6-a0c271429538": {"node_ids": ["8a8e9d24-b160-4885-8ce0-ddb32f41cffb"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "51620b85-d294-4618-bc89-3360b5d96844": {"node_ids": ["8e533577-1f58-4510-a775-1a3d3aab5f54"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "bfed46f7-e04f-4383-b56c-5bbc6b261074": {"node_ids": ["acfd7d91-933f-4983-8f9a-6125b45c8bbf"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "0cd0464b-2426-4762-a58f-49c3a35215e1": {"node_ids": ["051652dc-47a0-4ce0-83b9-8b57321a1fd7"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "931792e3-1793-4ba4-9d25-a5928d5be837": {"node_ids": ["0bc19176-b3c5-4d76-9931-28e2c5824b65"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "a4bd9921-3209-4389-a9a9-965f4f880848": {"node_ids": ["562fb4f1-b811-4904-b989-38b54fe38cb0"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "9af38552-175d-47f3-a805-7633c6cf22d8": {"node_ids": ["56d09198-2b4a-40b9-8132-d7972e4e39b5"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "e74a7022-c0cd-4f44-9372-e7f14ab9b4ef": {"node_ids": ["c61cf55d-77fc-43ca-b28f-3bde05f6eb13"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "ad3f9dde-9beb-4e79-bbed-9df2a49c3517": {"node_ids": ["5a338ade-d4f6-4e45-bc97-eae2f3119da0"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "82927522-c49d-4a56-b7fa-5c7e73f63991": {"node_ids": ["54cd775e-692f-4c7f-95ec-6d4e8b504067"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "dce37b19-836a-4c32-ac38-be196aca2032": {"node_ids": ["ba628075-6751-4052-8b1a-73c6489d90f8"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "ebd8a5ff-9822-4ebb-b087-f770afb0fac4": {"node_ids": ["6f27d851-b93d-4854-9b50-608647b18752"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "a3a56610-650b-47be-9ff1-dbaf14af3873": {"node_ids": ["38576720-f7de-46e7-8d6f-3b32821b6452"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "c5f7eca6-1fd2-4df4-b35e-274d93e653b8": {"node_ids": ["42e1512a-3c57-4c17-a462-3a8e95a3f4e3"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "21a904c2-1e46-453b-b879-d25ada42b096": {"node_ids": ["3b4f099e-c867-4e60-aa97-28895a0b89c0"], "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}}, "028e5875-bc18-4263-8cdb-ae58b3482c2d": {"node_ids": ["b79dec40-0d50-4804-b873-aea79f5a7261"], "metadata": {"page_number": 1, "file_name": "data/turing_machine_01_handout.pdf"}}, "a0321963-8ff2-4ab5-8fde-6e17f4525236": {"node_ids": ["4c68e75b-b5bb-427f-a2d3-b625bc1118b2"], "metadata": {"page_number": 2, "file_name": "data/turing_machine_01_handout.pdf"}}, "2dd8238f-b5c9-44cc-83ae-7c10f4f43b3f": {"node_ids": ["03c8e27d-d856-4990-a6b6-276f4a095684"], "metadata": {"page_number": 3, "file_name": "data/turing_machine_01_handout.pdf"}}, "636fdb76-0a49-4e1a-9423-0b0c8eb670de": {"node_ids": ["4c00521c-6644-4cb4-b861-a82415284568"], "metadata": {"page_number": 4, "file_name": "data/turing_machine_01_handout.pdf"}}, "b82ac977-b61f-48dd-9704-799fd90d58c3": {"node_ids": ["5af2408d-91dc-454d-b1c7-6be79e171657"], "metadata": {"page_number": 5, "file_name": "data/turing_machine_01_handout.pdf"}}, "531afd3a-2533-4db9-9fb7-3b101ce460ed": {"node_ids": ["da9aa4c3-be4e-40f1-8ac0-2849f6615b27"], "metadata": {"page_number": 6, "file_name": "data/turing_machine_01_handout.pdf"}}, "c178e692-3bc8-45cf-b811-ae4b941afedf": {"node_ids": ["79833edd-7f38-4578-871a-ec5c2977af40"], "metadata": {"page_number": 7, "file_name": "data/turing_machine_01_handout.pdf"}}, "de92c691-5b1f-4be9-b182-ae35ad06a0af": {"node_ids": ["23a868d5-94ea-4364-b2e2-dad0e0ffd90e"], "metadata": {"page_number": 8, "file_name": "data/turing_machine_01_handout.pdf"}}, "07528021-ec45-453b-a31c-64b1153a5c7e": {"node_ids": ["b6b55b96-a7b8-4112-9e40-424c224e9543"], "metadata": {"page_number": 9, "file_name": "data/turing_machine_01_handout.pdf"}}, "2db1ef4f-ce24-45a1-ae1d-dcb103d839b2": {"node_ids": ["e936f96b-a97c-4a9a-b258-880ab4a9ce69"], "metadata": {"page_number": 10, "file_name": "data/turing_machine_01_handout.pdf"}}, "67967a6b-5d6a-4cbb-82a6-3b0d00479d89": {"node_ids": ["fa9a01ca-8177-42df-861c-6eab9431dc4a"], "metadata": {"page_number": 11, "file_name": "data/turing_machine_01_handout.pdf"}}, "73469d13-ed85-4f0b-b88e-785dccd018c1": {"node_ids": ["8f734291-67c8-454e-a6b7-842d005e4f81"], "metadata": {"page_number": 12, "file_name": "data/turing_machine_01_handout.pdf"}}, "9d23310a-def1-4b7a-8114-8751cd93b046": {"node_ids": ["10c63e07-62db-42d1-9277-ab5fe72f4d92"], "metadata": {"page_number": 13, "file_name": "data/turing_machine_01_handout.pdf"}}, "8a816488-4bd1-430d-9407-e4d437b06582": {"node_ids": ["e7c77766-e764-441a-bfd8-7cde60d718bb"], "metadata": {"page_number": 14, "file_name": "data/turing_machine_01_handout.pdf"}}, "31ef71f7-b42d-4df0-921c-fe65f7d441d1": {"node_ids": ["f1fe9bc4-d170-44d5-b12d-b28d06924c5d"], "metadata": {"page_number": 15, "file_name": "data/turing_machine_01_handout.pdf"}}, "bb034993-4e86-428a-9636-2c111a10847d": {"node_ids": ["e8f88aac-40a7-4e32-b8b5-6eca80c43ef6"], "metadata": {"page_number": 16, "file_name": "data/turing_machine_01_handout.pdf"}}, "2e94eac8-3942-47d0-8582-eddd303b488d": {"node_ids": ["4f68964d-745b-496b-8ba9-5d2a55f86b2c"], "metadata": {"page_number": 17, "file_name": "data/turing_machine_01_handout.pdf"}}, "d7460287-2399-4db1-b08a-297053c179fe": {"node_ids": ["05757e2a-afc0-4c3b-ab26-5d72f8442d0c"], "metadata": {"page_number": 18, "file_name": "data/turing_machine_01_handout.pdf"}}, "5d358f44-9364-4eba-9b06-2ffbdb4db936": {"node_ids": ["8f46aa61-3cd9-423d-870a-ee0049ba506d"], "metadata": {"page_number": 19, "file_name": "data/turing_machine_01_handout.pdf"}}, "2974e4fc-aa26-4792-a3c0-634dbaee5c8b": {"node_ids": ["13dc0332-446c-454a-8d66-7c8f2940ef6a"], "metadata": {"page_number": 20, "file_name": "data/turing_machine_01_handout.pdf"}}, "c718d7dc-0091-418c-ba49-268c0e532bc9": {"node_ids": ["4e1ff16f-88dd-4732-bcfb-b4e24a668348"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "efbc3004-ecb9-4354-bcdd-749a3d8cf57e": {"node_ids": ["a3c57bf1-7a1e-4b4f-a295-20d652be88ee"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "776c473c-2b18-47aa-8353-f9750d03e31a": {"node_ids": ["2f8c9461-f4c1-4bc4-b086-b52837e9dde5"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "87df2992-a843-4dec-a768-3b5e0d3e0257": {"node_ids": ["dbadd120-e10b-4298-9306-83ac98642d4e"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "90b55eb8-e599-47f4-b7f7-f63a12a7a2ea": {"node_ids": ["dac7922d-aba1-4ff2-942a-05dc43b1ba99"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "57cfb6a9-1246-4ea0-b824-e43d77405411": {"node_ids": ["adc8666e-fad8-425a-83c6-5461da464bd0"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "9da8e4e2-0e74-4996-8e3d-ee3c184080d5": {"node_ids": ["0e1cff9e-34f9-465c-84da-7bfdf53811ef"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "3fb6a6d7-8047-4129-9f16-c234707eed4f": {"node_ids": ["f7a2b0f2-081b-4af5-a504-c22b7219a113"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "c17cf19a-c752-4743-81ba-ab582098c608": {"node_ids": ["ca4f43e5-6590-41c1-95a6-d781981cb427"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "4d1f38c9-90c6-456f-bad8-0d543be10876": {"node_ids": ["8dd957f7-830a-4d9a-b399-52f58d480773"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "7f31de39-1a67-4001-bf9c-d25ed478162a": {"node_ids": ["8394def2-28e7-466d-9aac-fa6ae3d81566"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "0030bf3b-db5b-4058-9373-d719107e4a1e": {"node_ids": ["8618a457-caf5-47f8-bc2e-8b6962354f18"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "688dcb2c-bea4-44b7-8d74-4b05fc49dd55": {"node_ids": ["43d95cf6-b1f8-4dfb-a56d-ad100076aa3b"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "01758b2e-50b8-4ece-a556-02d4caaed0c6": {"node_ids": ["d7653125-7280-42e6-901b-cde7d067128b"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "ff6a04ac-047e-4fa0-9042-7c43009a93ad": {"node_ids": ["f94b4de4-a4fb-4936-a34f-90b403228a94"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "fbb126ec-4aaf-417d-bd62-c98629920739": {"node_ids": ["692bcea9-4254-474c-94c0-4bff1269fc61"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "889ad586-729b-4006-af89-d3dbc943ed0f": {"node_ids": ["5103e669-870f-422c-839e-cd1ebfd28525"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "fbaedddd-79ce-4928-8c01-39baa059cb13": {"node_ids": ["b0d34335-09a9-458a-a361-4427cea1e486"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "ec21280e-7d21-41cb-b5bb-f4cf36cb22ec": {"node_ids": ["323acb72-7aed-4c69-b3c6-ac3b34cba582"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "6a47b973-52a1-4b78-b3e8-ff953f489119": {"node_ids": ["4db24cba-5f30-4ab3-86fb-578fc4b809c4"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "ff0339ca-286f-4a9d-82f7-c47792fbf62c": {"node_ids": ["93f7415a-356f-4c18-b4a8-d6389ce30b1d"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "4a0b7b56-7b0e-4bdc-abbc-eebb14a0ca75": {"node_ids": ["88b3991f-da6e-4e56-87f5-451ae9af8424"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "b53aafcd-ee6f-409c-8581-fec15b4a55a1": {"node_ids": ["d1f511b2-7489-4f75-977a-5795cae771e3"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "5dc10584-eec8-4de1-9275-ad1e2ae6e431": {"node_ids": ["152a654e-06c8-4a2b-8d09-1cb30fe3309e"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "672de12f-2ec7-4a58-9f37-a258e7ae85d2": {"node_ids": ["bf5f9498-0cca-421d-9e3f-f82a04207e49"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "f1f92b47-4413-4f49-b916-cb98809531c0": {"node_ids": ["14f5c552-802d-429c-8f49-0aeebbcaf3a7"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "0f386667-5cff-4b58-b914-2f74fabe2441": {"node_ids": ["f34d38dd-fdfd-4fd9-ba6f-016993c2048a"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "d7280c29-b6ad-41cd-9208-94d6691bec18": {"node_ids": ["3a69c807-0a54-4def-a8e0-4f99d9b441fa"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "2caaec2a-322a-4442-9c62-78ac5612d765": {"node_ids": ["5db1e728-b007-487a-a732-3f49814eebc6"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "1d660d84-22f1-4371-b24d-85b784bbb36c": {"node_ids": ["e6bbb69a-6c5b-4771-8710-f73ee02e2a23"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "d7f0be94-137e-4112-a261-9f8507bd790b": {"node_ids": ["fc672d91-48ea-402d-a69a-c0b87ecbf10c"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "68c92e9e-2494-4d0d-9384-8fe4c432d4a7": {"node_ids": ["5f695016-2c03-4d27-9dac-2a86ab41123d"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "c7f0756b-4cdb-4f2f-a4b7-b4abf7281db1": {"node_ids": ["4a25c285-c1ee-4bd1-a708-111be55fb824"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "d71f7ef8-7f3f-4d3b-a80c-2b6fc5142f38": {"node_ids": ["392d409c-7e05-46cd-89c4-cdc868cb3672"], "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "2aee9b13-97e7-4c9e-b861-db680b45a462": {"node_ids": ["ef2d2129-d0d0-427b-8b34-21701e4fbcee"], "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "499b5452-7778-4177-937f-e34ad66ac19c": {"node_ids": ["ebf1440b-ff15-4178-b2ba-5665c029ecc6"], "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}}, "f890d30b-4495-4093-b798-8e8648293dd4": {"node_ids": ["c87d2585-cb98-4028-9a0d-d8fe9bb6f029"], "metadata": {"page_number": 1, "file_name": "data/finite_automata_07_handout.pdf"}}, "86610747-b21d-4b54-9e63-bcb1620938d2": {"node_ids": ["c23dafb1-27d9-479c-8aa6-994cc3287e32"], "metadata": {"page_number": 2, "file_name": "data/finite_automata_07_handout.pdf"}}, "19271a26-4e3f-4d73-8254-4ccd2404a2c5": {"node_ids": ["cdd7fb14-0087-4b1b-b69b-e9f2c1521a80"], "metadata": {"page_number": 3, "file_name": "data/finite_automata_07_handout.pdf"}}, "e863e51f-03de-4693-be1a-e1427d95dbae": {"node_ids": ["6bc45aae-cf30-4a63-8d64-ff0071847e36"], "metadata": {"page_number": 4, "file_name": "data/finite_automata_07_handout.pdf"}}, "e327193d-0c0d-47cb-886f-0aa5b2de44ba": {"node_ids": ["fb1ec487-0fdd-4a4c-a2e7-9e01d8c8b1ef"], "metadata": {"page_number": 5, "file_name": "data/finite_automata_07_handout.pdf"}}, "86cb79a1-8dea-4096-87c4-5fdee9068470": {"node_ids": ["afdd485c-5e15-42e2-a06b-c633f5e3e212"], "metadata": {"page_number": 6, "file_name": "data/finite_automata_07_handout.pdf"}}, "a6ecf36b-beda-4120-9c2d-f510fd43c48c": {"node_ids": ["c30a26d7-d5ba-42e0-930b-14289cb7c8d4"], "metadata": {"page_number": 7, "file_name": "data/finite_automata_07_handout.pdf"}}, "44fd8e5e-b2be-48fd-a409-dac7e8ca8b17": {"node_ids": ["8e289ad4-07f4-4973-8c5d-72048f23d697"], "metadata": {"page_number": 8, "file_name": "data/finite_automata_07_handout.pdf"}}, "f2c10cae-5d9a-4acb-a45b-2c5dba2400af": {"node_ids": ["d27cb8df-6669-46ca-b314-e4166d755777"], "metadata": {"page_number": 9, "file_name": "data/finite_automata_07_handout.pdf"}}, "b7818993-ede8-4367-9f6a-5fdf5943bece": {"node_ids": ["bf729cc3-3c4c-4b19-b546-fc0836c708c7"], "metadata": {"page_number": 10, "file_name": "data/finite_automata_07_handout.pdf"}}, "578155f4-0e4a-4271-b8ad-f63ebd9a5668": {"node_ids": ["ab903cf6-123b-4ee6-a739-5bf2cbc95604"], "metadata": {"page_number": 11, "file_name": "data/finite_automata_07_handout.pdf"}}, "95109bdb-511c-449b-8ede-afb99ef70043": {"node_ids": ["a6e66fdc-cbdd-4a51-8189-04d967b93dc1"], "metadata": {"page_number": 1, "file_name": "data/turing_machine_03_handout.pdf"}}, "f6802080-3da1-4a2f-83d0-b26707f55200": {"node_ids": ["daddf21a-e626-4978-92a2-56a21ef3573f"], "metadata": {"page_number": 2, "file_name": "data/turing_machine_03_handout.pdf"}}, "5caa264a-f7dc-4afa-8a67-5cb72b1655eb": {"node_ids": ["43ddd6e6-e136-4646-9ab2-858a6ecd7a0a"], "metadata": {"page_number": 3, "file_name": "data/turing_machine_03_handout.pdf"}}, "72e0c9aa-b71c-40be-9f5a-da9e7b8be455": {"node_ids": ["ed0c24d6-e82f-47dc-b4c7-c8033da8546b"], "metadata": {"page_number": 4, "file_name": "data/turing_machine_03_handout.pdf"}}, "ca41b5f2-bb87-4ee6-bcb1-fa8a1e39cbc9": {"node_ids": ["03a75a77-cacc-4427-b53e-7ba8ac45caa8"], "metadata": {"page_number": 5, "file_name": "data/turing_machine_03_handout.pdf"}}, "ed12e29d-0130-4d50-995c-6ae2d5a867ab": {"node_ids": ["f53f3554-6084-45bf-a812-98586246d2c4"], "metadata": {"page_number": 6, "file_name": "data/turing_machine_03_handout.pdf"}}, "8a49f89a-1c56-477e-9548-00a47562f51f": {"node_ids": ["b01fc261-a5d3-4163-a612-2f36538be0d5"], "metadata": {"page_number": 7, "file_name": "data/turing_machine_03_handout.pdf"}}, "e0e49a7b-27c9-4e33-b0dd-9bd77aab93b8": {"node_ids": ["9450bfec-28b1-49e8-b246-4a8942f0878f"], "metadata": {"page_number": 8, "file_name": "data/turing_machine_03_handout.pdf"}}, "58aeed7e-b50c-453d-97e6-fe4567615909": {"node_ids": ["dc242849-0c98-4b80-9e98-eecb0a817143"], "metadata": {"page_number": 9, "file_name": "data/turing_machine_03_handout.pdf"}}, "ee3ecdfe-e123-4a78-a143-4b090300b9d7": {"node_ids": ["04292cb1-81e0-4884-9b0d-284c45e38eda"], "metadata": {"page_number": 10, "file_name": "data/turing_machine_03_handout.pdf"}}, "c5611fde-0b06-4f39-8ee5-1462926e6a7e": {"node_ids": ["e853d4e3-0788-4418-9bb0-c888dff27d87"], "metadata": {"page_number": 11, "file_name": "data/turing_machine_03_handout.pdf"}}, "83a5d65a-7b0e-4811-8350-d54c95af23c9": {"node_ids": ["64fcb065-be75-47df-8f2a-6caff36d6968"], "metadata": {"page_number": 12, "file_name": "data/turing_machine_03_handout.pdf"}}, "e9a4d9ae-b033-4d29-a20b-5b85b896a8fe": {"node_ids": ["34e62bc5-13a7-4f3c-9429-53b3220dc0d7"], "metadata": {"page_number": 13, "file_name": "data/turing_machine_03_handout.pdf"}}, "09997602-71df-4827-b08b-ddcceb2fa6b7": {"node_ids": ["a52e31d7-c3b9-4095-9012-be76909d9d0a"], "metadata": {"page_number": 14, "file_name": "data/turing_machine_03_handout.pdf"}}, "8c007612-ceca-4859-821e-e8f949699739": {"node_ids": ["32908c3d-5262-40c6-9a1d-74a1e9940f33"], "metadata": {"page_number": 15, "file_name": "data/turing_machine_03_handout.pdf"}}, "41dd2289-fdb2-416e-9928-6616a6dd832c": {"node_ids": ["fe300689-09d4-405c-8cd7-2537c8332550"], "metadata": {"page_number": 16, "file_name": "data/turing_machine_03_handout.pdf"}}, "52419c57-ae65-4ff0-a76f-38809201ac13": {"node_ids": ["426b88ed-5aca-470c-ac1c-1e2e826647ef"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "3e847f41-4220-4f5d-a9b8-cb9175f29709": {"node_ids": ["9f6ce613-fdc4-4928-bf65-5eec78e35b5d"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "6c6fc445-b4e2-4744-88d5-f8655ce5af18": {"node_ids": ["7fea9b02-7b80-487d-a6cd-8bd114f4a7d0"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "e3e67105-1b12-45ef-b2e1-cd6ddbb3cf1a": {"node_ids": ["6b719978-e2d4-4f26-9d8f-f015c453e809"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "f2a5d9cd-caf9-450f-8331-5df48fd3c94c": {"node_ids": ["c0a0102b-0c21-44b9-bb38-f3a2ac82cc6c"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "dbb85775-0ff3-42aa-958c-1ac3a78e034e": {"node_ids": ["49c0c3b3-02a8-48ba-b6a2-9fc4058a6482"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "4daf4552-2b4d-43c9-ae2c-03ab77e60d9f": {"node_ids": ["b09e303c-2795-49e0-ab69-8e528cdb3264"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "4ca8f838-44c1-45ae-ac33-4755f2714aac": {"node_ids": ["1370dfd8-f624-4027-a9e9-35a6d2568faf"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "b4497ab9-2afd-4d8b-b3d5-9176986b0fdc": {"node_ids": ["b81c6e71-dec6-42eb-bf97-5723d0baf4e9", "41db2b71-aeca-47b4-9b84-9d96abd1dc56"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "a3cebf60-6223-453e-927f-4b8cc1c5b5b5": {"node_ids": ["48c148e0-c9d7-49ad-a775-b12b790d5061"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "f55b9170-8cce-49e7-9198-f8f694e61808": {"node_ids": ["42976374-c8fe-4c5a-aba3-6335dedf0e32"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "d55b425f-2c7c-456f-a76e-d4defd093678": {"node_ids": ["1c0586b3-8392-42a1-b290-3230baef34e4"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "ca5afee3-0cde-4e4f-8f91-a9cbc4d3b6d2": {"node_ids": ["6a762ca5-b07a-4a50-b67f-5514ee40908b"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "539f8591-5953-4660-a181-96febc6ed5c0": {"node_ids": ["ebcea148-b348-4072-9352-2f34241f75e4"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "c0f98458-c31c-4ef4-a41b-9ec99e614d67": {"node_ids": ["4197c6a8-f6c7-454c-b180-02651d16321a"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "2290dc41-4dcc-4716-b972-ea85bcad2128": {"node_ids": ["f0c174bc-9014-4222-a316-38c0604558ed"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "a86fce18-9a32-4ceb-b5ac-b84c4db13b04": {"node_ids": ["9ad7cfc6-2841-4bb2-866b-9540b92e53be"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "6cbf7941-acc2-401b-83c9-5cf6055c5418": {"node_ids": ["b5e16504-735e-4b45-b852-832513fa2677"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "ec83aa2d-60cc-454b-98b4-f14ed817cd2a": {"node_ids": ["d02c5e4c-c17c-4f3e-a0ba-425064ff2655"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "a6c539a4-563c-4469-818b-0af7e85abe18": {"node_ids": ["908c5982-cda3-468e-aefb-215af949be13"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "2ff26c0e-6a5d-4217-bf2f-ad58ff69e47b": {"node_ids": ["2e290ea3-891a-4e80-a1c3-941be45b3029"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "9b11cfb2-944f-4ee3-93f6-48af277ad8ae": {"node_ids": ["c47d994c-a4e5-4dbd-938f-abdb52be9263"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "6a860b3d-0380-4b04-b29a-cf435a112968": {"node_ids": ["6ce72a0a-d954-4c06-8ea4-ef08d62f32b1"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "3f234a7d-a8c8-4c0c-b6ab-8098854a1e6e": {"node_ids": ["9664f6cf-08ba-4659-8324-33be2c04c5ad"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "4af3f9ce-37cf-4e2a-957f-e0bae849a1a3": {"node_ids": ["dc2e3edb-c8bf-4c0d-8ec5-f8810277a6fc"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "2eb8ae5b-bda3-4f8e-80ce-4952786f603c": {"node_ids": ["5c9a208e-9d67-4541-a2e9-80f328d3099d"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "f94bcf04-9a54-4790-a1c8-7a8d22e987c5": {"node_ids": ["2785e8eb-cb22-4d25-a612-409558dc2f49"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "ea81f8c1-6216-493b-aad2-6f14fbdb22a1": {"node_ids": ["4c206349-a8fe-4f87-9aa1-d87203b87282"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "71f3c27f-ae98-4dea-a337-dd07ccc819a1": {"node_ids": ["8eaed070-28e9-4dbe-88c2-76f80f6cef9c"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "1c3e8b1c-1dcd-45b1-8664-3ad34bccc770": {"node_ids": ["858bc6bb-03a7-48f1-9a1c-334681b036b5"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "803f4178-7f87-4f8f-891d-cb59fddb0f0a": {"node_ids": ["cff8c484-2dde-447f-b5b0-89451db3b8c4"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "7b710131-364e-4bc5-b2e9-e7f4b5fcfa2a": {"node_ids": ["7adf0459-2c47-48f5-ab55-4f0d5b1950bf"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "e3abc501-edbf-4607-a901-88279381cc2c": {"node_ids": ["779d4626-b38a-4783-861b-5e8f6544bfd0"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "027c61ed-ec7c-4476-8731-74c8571cee84": {"node_ids": ["8d705065-30b3-401e-be16-dd9e194a81ed"], "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "2f75c810-f18c-4067-9252-4d09d1d18b2f": {"node_ids": ["597bf18a-85fb-460f-920c-55891cf72679"], "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "e2c78923-1204-4f05-b887-99a6bff120ab": {"node_ids": ["9ecd20bb-8452-4e74-8efc-c13a894491c0"], "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "0d7fab36-2c6f-4e23-b90f-2bc6730da0a0": {"node_ids": ["78dcd2df-213a-4088-b4ee-6fb5b28216ec"], "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "10dbccf2-1a8e-4b8a-b256-7d9568b285fe": {"node_ids": ["42573e27-8a0e-42a1-8944-db1877d0f848"], "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "33fdc0a1-6561-48c3-998e-89c0333c7e9f": {"node_ids": ["e0e83651-c7fc-4c99-8ec7-38f068e77c2c"], "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}}, "4731bd9c-3858-4789-8f98-7cf1866689f5": {"node_ids": ["d39325d7-1383-4bf9-9610-fa7bcaf1a753"], "metadata": {"page_number": 1, "file_name": "data/finite_automata_05_handout.pdf"}}, "f3ce54f5-9b69-4b0f-86b7-ba5bc66d7085": {"node_ids": ["5718c26a-17c5-4971-b398-7d33bad5d82e"], "metadata": {"page_number": 2, "file_name": "data/finite_automata_05_handout.pdf"}}, "2e6140c2-6bb9-4cee-aa40-0ceba53a44b1": {"node_ids": ["cc03cb4a-6299-4a8c-8651-b2910d7560f2"], "metadata": {"page_number": 3, "file_name": "data/finite_automata_05_handout.pdf"}}, "c3304f9a-595a-4dfc-96ba-bbd19e6f4f57": {"node_ids": ["8dd02411-dc47-43cd-b0bd-2a35f5cf09b0"], "metadata": {"page_number": 4, "file_name": "data/finite_automata_05_handout.pdf"}}, "fa627162-bb28-438d-b7a8-5456eb82fb3c": {"node_ids": ["a1c2a556-9dfc-49df-b54d-14d54aca1096"], "metadata": {"page_number": 5, "file_name": "data/finite_automata_05_handout.pdf"}}, "e05b56a2-c7c5-4c49-ba44-39e60e89b1c1": {"node_ids": ["2d034c71-061b-4cb0-bbd0-bfffb2baf3b8"], "metadata": {"page_number": 6, "file_name": "data/finite_automata_05_handout.pdf"}}, "c41e11d9-ebaa-48dc-8284-7ed5367bf332": {"node_ids": ["8ed6ddf9-c718-419c-b010-bae367075e17"], "metadata": {"page_number": 7, "file_name": "data/finite_automata_05_handout.pdf"}}, "0177558b-9d0d-49a6-9644-fc9d74730c0f": {"node_ids": ["f5fd928e-9e4b-43cc-941b-1fcb648478c8"], "metadata": {"page_number": 8, "file_name": "data/finite_automata_05_handout.pdf"}}, "b7e2b995-a7fc-418b-8078-25620a255b71": {"node_ids": ["a8a2eca6-d2fb-4e86-85c0-e24609c8c2de"], "metadata": {"page_number": 9, "file_name": "data/finite_automata_05_handout.pdf"}}, "169bbaad-84ad-4eda-acfc-26415a5e5f88": {"node_ids": ["72a8566f-ed41-40eb-9279-8c358eed6bbd"], "metadata": {"page_number": 10, "file_name": "data/finite_automata_05_handout.pdf"}}, "a4c1fb0e-2a75-4b9c-adb4-a439757ced40": {"node_ids": ["be4536e5-1cac-4089-a8b5-50876374fd2a"], "metadata": {"page_number": 11, "file_name": "data/finite_automata_05_handout.pdf"}}, "15e6d703-6715-4e5b-a989-4a4b14446bdd": {"node_ids": ["029479cd-ccb8-45aa-84e0-02032ed0d94a"], "metadata": {"page_number": 12, "file_name": "data/finite_automata_05_handout.pdf"}}, "04a26b1e-a807-4772-bce8-c0081849eb08": {"node_ids": ["ac0906f4-73f0-4d90-9304-1ae39cfd48fa"], "metadata": {"page_number": 13, "file_name": "data/finite_automata_05_handout.pdf"}}, "d9da3902-bdef-4d17-ab94-bdd46cf6fcb0": {"node_ids": ["43a4e60c-4f18-4094-aab7-bf7a64211336"], "metadata": {"page_number": 14, "file_name": "data/finite_automata_05_handout.pdf"}}, "5851eca3-df58-4608-9748-65667ef53334": {"node_ids": ["77bce36b-8ad8-476f-82db-ae0732a8c309"], "metadata": {"page_number": 15, "file_name": "data/finite_automata_05_handout.pdf"}}, "b40c98d9-c3b7-4bd2-bf36-3a0ba25d05e5": {"node_ids": ["e6e7873b-2f75-4530-bd92-8a587469342f"], "metadata": {"page_number": 16, "file_name": "data/finite_automata_05_handout.pdf"}}, "efa53c04-3fa9-41df-83d5-fbacbfba05e1": {"node_ids": ["b18dc1b6-5d0a-490d-8b78-701dec761945"], "metadata": {"page_number": 17, "file_name": "data/finite_automata_05_handout.pdf"}}, "04f3b053-992a-4ad4-97cd-9def0e9667cd": {"node_ids": ["ba2cf730-235f-48c8-8499-a11271d769f3"], "metadata": {"page_number": 18, "file_name": "data/finite_automata_05_handout.pdf"}}, "fed0817b-0036-47d5-ab89-964ac95af8a4": {"node_ids": ["f1132bd4-f2c3-4c87-aaaf-89d6adc3e674"], "metadata": {"page_number": 19, "file_name": "data/finite_automata_05_handout.pdf"}}, "bf3551bb-a69b-4786-8b97-9e1991779b25": {"node_ids": ["5baa32cb-d5f4-42ed-aeda-58dd11f2fbfb"], "metadata": {"page_number": 20, "file_name": "data/finite_automata_05_handout.pdf"}}, "dd4802ad-d90b-4097-b027-0c9063d87a6b": {"node_ids": ["fa139241-552f-443c-9c90-64fee4377610"], "metadata": {"page_number": 21, "file_name": "data/finite_automata_05_handout.pdf"}}, "e1dbcc9b-86f2-4156-989c-97a5793dd227": {"node_ids": ["26325910-8f1d-45ba-a499-6be1cf11e2de"], "metadata": {"page_number": 22, "file_name": "data/finite_automata_05_handout.pdf"}}, "afbb6827-a175-4052-8938-0a65fa569958": {"node_ids": ["444ca371-63f5-4bc7-87d5-af528c7eea75"], "metadata": {"page_number": 23, "file_name": "data/finite_automata_05_handout.pdf"}}, "d3f89eb8-9591-4eb8-90f5-78862abd97ef": {"node_ids": ["cdd168c2-9c88-449b-8bf7-020c5a9a094f"], "metadata": {"page_number": 24, "file_name": "data/finite_automata_05_handout.pdf"}}, "80239979-c162-4be3-a87b-d736b75d6d86": {"node_ids": ["24fc1550-be07-42f3-9188-2c53766041a7"], "metadata": {"page_number": 25, "file_name": "data/finite_automata_05_handout.pdf"}}, "b632da1c-a299-45b5-af0a-c02d87d51ab0": {"node_ids": ["58670055-e2c8-412b-bf7a-931a857941e6"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "5e01de27-ac07-485f-8ec8-aaa8727920fc": {"node_ids": ["fb59083c-69c3-4755-a769-4cd8b99041bf"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "1054260f-7162-43e1-87e2-4adc704520aa": {"node_ids": ["d34643fb-423f-4160-8127-37ba20bf905b"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "8f275a63-b889-4200-9f19-6b5e79099395": {"node_ids": ["22e59c78-09f1-4246-84b7-6fbbefbb6138"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "f849f020-c8b2-47ef-a5ad-8a712f14a243": {"node_ids": ["e7cf1409-e420-4b5d-8d5a-1fe3b6f93e8d"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "51a40464-b60a-4af5-8ed7-0aeac71e3790": {"node_ids": ["69ce28e1-6a0d-40a2-80a4-53bec8d6878a"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "50ac2efc-012c-4509-834a-ed09ae8f63de": {"node_ids": ["408fe7dc-92b5-4f10-a3bc-bc2989373c24"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "d866a6a8-3bd0-464d-848c-abe58043d188": {"node_ids": ["1cb034ee-b1f4-4619-84d5-9dbbcdde5a9d"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "87b2b43c-0df0-4eb3-9aea-59147a753c60": {"node_ids": ["0b1f4a46-922e-4d55-9d4d-c5e0b0211409"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "f2405322-6a69-49ab-9945-70f2c4a4c31c": {"node_ids": ["80ab7cc7-5d4a-4438-9f55-306b0b8c1038"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "f287c9f4-8311-4f48-8743-675111602dd0": {"node_ids": ["d45ed6a6-1de5-429c-8e27-b88b43011766"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "a56deb37-fdb5-4992-8631-cc26f94c6811": {"node_ids": ["b3e6608b-393c-4629-91f8-ebc8cf32d140"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "c9269bbc-a5c0-4847-871e-c48413c459f5": {"node_ids": ["148f4746-0472-4818-b762-cf8419471311"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "a688981c-5fdd-4b87-90f9-4e5a7c7b9f2a": {"node_ids": ["f4035c4f-dd38-4eaf-95d6-8bbaaec46ffe"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "6ce55b5e-e69b-4764-91b4-0bf267aefb9c": {"node_ids": ["7e4b2efc-b005-4b28-9303-39a1a3e7c40c"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "dce7d637-fa63-4b5a-a7e3-a173d79e4d55": {"node_ids": ["6967bae5-313b-4026-a70f-7c49d38ff1e6"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "88fdec93-e525-4504-a951-124a7b7fb27d": {"node_ids": ["e05e2cda-ea97-4ec3-b289-f3c25ed78210"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "0372323a-6121-416a-9281-85ba8271185f": {"node_ids": ["3d911852-496c-41c8-9b0e-d0e947f76d3e"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "8613a745-e3ad-428f-a3f4-f46d707a3be6": {"node_ids": ["dd5dd3dc-9e12-4008-96c0-0512503f36d8"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "d67d9b9d-a347-4ebd-8c68-eab5e57d6a15": {"node_ids": ["613c648c-620d-42f5-948f-8866b19892ce"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "d4bc8f5d-66d9-4d67-80df-5a54f94d49eb": {"node_ids": ["9e3dbff5-ebd7-4dac-be74-1111171328cc"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "e94de2b8-a1c9-401e-b46b-55842d2b42c8": {"node_ids": ["ce6351d7-0ac9-4266-ade0-e06225721be1"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "07a578e6-45e9-42ab-a845-4e10000dfdbd": {"node_ids": ["838f6c59-bf15-4887-84f1-3593bcbb5af6"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "223a0db6-4f51-4623-9c88-c6f1e3e57f3e": {"node_ids": ["5df98e36-fc29-4a6e-8947-a644905fd532"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "290cf564-ff5f-4e14-aab0-e2daab98f2d8": {"node_ids": ["05dd4dcf-3b28-46a1-8b4f-60a08bc0639d"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "ffe8d2c3-f7b0-4546-a0b6-62af01debd44": {"node_ids": ["019979f0-13a5-4bc5-9fc4-3267d007e25f"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "744d61ac-3c3f-4bcd-a02a-75cd6e617007": {"node_ids": ["2905d948-3972-4c07-a434-30536c23caf3"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "f0ec5205-b0be-4aed-82df-6d032d3d95be": {"node_ids": ["e67904c6-050b-4b49-8266-577114e62da7"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "a43a5582-b664-4232-8cbd-e1a698c76529": {"node_ids": ["263fa9d3-b7d7-4835-880b-8b61605e29e9"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "7dddbbb6-98c9-40b3-9aa4-ee6d51fb5a10": {"node_ids": ["174119db-f271-44f2-b1a5-cb9c309ef103"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "d4d49f27-79ad-4678-a77c-2e4773879061": {"node_ids": ["f1eb7004-5e6e-4969-9537-5405184494df"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "35e396a6-b1b3-4ba3-b8da-3e78d25e7c11": {"node_ids": ["3df43b51-6aab-406b-9ebc-4f521cf1618b"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "5bf9f36f-1ffc-450e-ad32-5aa4ec0b074e": {"node_ids": ["31584f26-5cf2-4a82-bdf1-884b1d66f78e"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "799365a7-246d-4db8-9743-423571ba73d4": {"node_ids": ["17a9411d-5b20-4b2b-b595-c710ed69773f"], "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "d0422eba-a342-4da4-a900-10f22e1af418": {"node_ids": ["4be4f840-841a-4a3f-8628-7e0c2ca1c2ca"], "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "1886b990-6e64-458b-a499-b0788432dc1b": {"node_ids": ["aa1f6aab-19dd-46e5-ba87-6dcf880a75e1"], "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "8b750aba-9a8d-44cd-a6de-5bd835fe7668": {"node_ids": ["d3a05920-199c-4102-927c-3b9129e2c475"], "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "c8dd567f-3b26-42ba-a364-e1a6cc1aea91": {"node_ids": ["d5c91e31-68dc-4b65-8d54-83e83cb0a283"], "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "13989220-a054-4245-a93e-d6888b340135": {"node_ids": ["30188c2a-405e-4df6-aed8-a27c80572983"], "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "697cfd63-29e2-4306-be1f-256208ad1dd6": {"node_ids": ["54b3843d-c918-46aa-81c7-2d3a5d722bc5"], "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}}, "5da6453a-0764-4d06-bf7d-57dcc8aa8ffe": {"node_ids": ["67ecc16d-d2e1-40eb-b131-1937eb90bab2"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "726dd4aa-a665-4d0f-88a8-14d896a7ffb3": {"node_ids": ["3cbf3fe0-7e29-42f5-95bb-3428ee9bde41"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "e616ef71-4a0b-4cab-b1e3-11e4414e2198": {"node_ids": ["430b4321-1113-45e0-a4a1-1af224b6fd4b"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "04f11f87-b9d7-4add-93cd-fddd8ea9c421": {"node_ids": ["64d8ac29-2b6d-41c3-add3-57d597854303"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "84fce7b1-c416-420e-8163-895208ff3738": {"node_ids": ["5f19ccd3-1aac-4728-9c49-874e3d58447a"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "f905dd96-3364-41de-b8d9-9b52b790479c": {"node_ids": ["db5e19e5-f624-45ee-bbce-840acaf4ea40"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "32d90b03-e4d9-4c78-a68b-9f2757d3c282": {"node_ids": ["f3743615-5342-4734-93a1-58f5dc45fcef"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "d4e3cdfd-5afd-4465-b1b6-297275b2075b": {"node_ids": ["035ec694-4c56-447d-9d81-445ca6ddf586"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "c926d539-2327-463d-9e6e-e70ffe3abd2f": {"node_ids": ["775d3e70-ba3e-4ee9-a4a3-937c85ca2944"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "cccca899-8ab8-4615-81b0-1dac5d48ed99": {"node_ids": ["02218cea-5376-426a-99e9-93ec0e45bd3f"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "c0e197b3-ba58-4e4b-8214-20ea6bb78a63": {"node_ids": ["94183481-7d55-4cc2-a5ce-fbed7497cf69"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "dc1dc521-9838-4b9a-ad8d-70416b301089": {"node_ids": ["1469041f-0eb7-4286-90ea-e28a153a1b8e"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "19b71fcd-15d8-4271-a2a3-125f386bbc21": {"node_ids": ["a4df2723-367d-4aa4-9fb8-2f4b3037985c"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "e09f0a03-a02d-4663-9d48-1bf00d5fdc4e": {"node_ids": ["68e68022-8735-4f93-83ce-df521ef92a1d"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "25e03c5c-4106-46c5-819b-5da441c12aa8": {"node_ids": ["ecf2bc3c-4b78-4d2f-9e84-523d290b5f19"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "99428655-c2f8-4f80-89ee-416f5a73c506": {"node_ids": ["d1d6223e-d11a-4aa4-900b-f883b02c8126"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "a8b8a16d-03a1-417c-abae-fa999fefa8b9": {"node_ids": ["e36500f0-5eb1-480f-a09c-cebe16a60844"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "620c0c64-71af-4f84-9bea-9cb655339ebf": {"node_ids": ["5f13b708-06f7-4a63-af40-c35b59334a79"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "c4708dd5-68d4-4aae-8ccf-78ba5b0bb2e4": {"node_ids": ["bbc010b8-4a0d-4e97-b739-f966e45ff91d"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "c2588257-46a5-4107-aab9-e30dfc2f039d": {"node_ids": ["e3c2fe52-ad60-4196-969d-fbe856fd3520"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "ba7a052b-e731-4020-822a-b834a9201dcd": {"node_ids": ["0fadaa87-845b-440a-9256-af5304735ecf"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "c7475fab-c6f8-4a13-956a-ee42b4597bb6": {"node_ids": ["7ffde410-532e-43fb-8e2a-b52629a7b4cc"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "4f9fc753-4917-4a02-87a9-e3a23c6a9764": {"node_ids": ["37da0edb-cea7-4c0a-baa2-9c3e00c30027"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "c85615fe-eab1-4b76-8657-f4b59ca1cdf0": {"node_ids": ["74916d55-4321-4e62-878f-fd732b83b0dd"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "f047a5c3-91c6-410f-8802-1a7a518cd5be": {"node_ids": ["df3f39db-af4b-4003-a2f5-37b8606f399a"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "a8f5e1c0-1477-4982-8b0f-eb310384510e": {"node_ids": ["509f4580-14bc-46c7-b6f7-b51f99f08ab9"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "a148c81f-57e5-4ebb-8f75-a9338a4f350a": {"node_ids": ["779d0987-a343-4e99-a569-9f0e2cd6a793"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "ccbdd146-08da-4e5e-bee7-c08456289b09": {"node_ids": ["ead8c55b-772d-41ef-bdfe-82354f1f8e9c"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "575f2d11-d731-47d2-ac53-6fb66fcfba4f": {"node_ids": ["49a9b64c-675a-4ef8-864a-11b91ac76fb0"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "fc76e065-cd9a-477d-bdbc-8b4ee513fbb1": {"node_ids": ["87bd4044-c308-4483-acc5-75aa1ed6b0d2"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "e9fee1c7-0f03-454e-8c49-4aa4c54980fe": {"node_ids": ["2cd9ff24-6171-4849-ad82-89eb228db8ad"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "4bd5360e-180f-4515-af78-3351033db5cd": {"node_ids": ["ce13a010-200c-44bc-bcf9-7c9aa5ff13bf"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "b562eff1-8611-4a50-9cae-734517aaaba6": {"node_ids": ["7f3bae4b-d9bf-4146-9a9d-97aec35c22a4"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "cd1debd8-c3aa-4c88-a574-047a013dada4": {"node_ids": ["4894c612-4f4b-44ef-b446-5ad895e0057c"], "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "92a40f89-2155-455d-b05a-89b585944884": {"node_ids": ["a24daadd-e48d-48da-8f25-e666ab587b6e"], "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "a08a4887-bebe-4910-a559-29469701d3bd": {"node_ids": ["9cc3475c-5c68-4340-8bae-5c9059167510"], "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "ae4786c2-b8c6-4b78-b1ce-4bc15a04f6cb": {"node_ids": ["bb1f9b28-0d9d-4ec6-a573-d388758012fa"], "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "23fa9e9f-f346-4c66-a40a-6ebaac43783a": {"node_ids": ["5f479c12-1239-46ae-bfb0-2f0aaf4de1c6"], "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "2d91f457-af7b-482c-87c2-bb6c5951eeb6": {"node_ids": ["32e57dc5-01cd-4151-a9fd-a5e3cdf34d99"], "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "4fdd7801-f42e-4314-a8bf-54ab7349d058": {"node_ids": ["11fed973-8cb7-4715-b804-2eae5a034d4f"], "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}}, "562d8c23-f0de-4efa-bb19-3f8dbfc4e739": {"node_ids": ["30053f6f-ce96-4f66-9c43-b42aa00e65da"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "329513eb-9027-4f77-a34d-9691b4b55308": {"node_ids": ["ccac079e-86ed-4539-b564-d1652a576d38"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "ecae360b-ffea-4275-9cf2-c9348f9912d1": {"node_ids": ["f07195ae-53b0-43c7-a0b3-76b435a8879a"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "ba46548f-c0e3-42b1-91bd-1edcfdb78f64": {"node_ids": ["64fad90e-236d-415a-979b-20b9861e98b0"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "ea686be8-b317-47f8-bce2-f5f58a9ff1b5": {"node_ids": ["12a2437d-8cc5-47d2-82f0-e48af71d2762"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "118f7e01-ba0b-4828-ae19-5afe6c94367a": {"node_ids": ["3a9c156b-870c-4ffd-afa1-9f00d1604024"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "22b30988-4276-4847-a318-d41456d456a5": {"node_ids": ["8c151c8e-d7e3-486b-9231-1518589aa755"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "689e2465-c0e9-46d9-b7d0-9c7cab6543dd": {"node_ids": ["c2e416c5-4cdd-46b2-8336-2faa9387332e"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "ca7589bb-9b3e-4601-804d-28498152a7ad": {"node_ids": ["83ef3da2-6102-4e08-9b77-a835f3d2612a"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "89e98d9b-081a-42da-9d8b-91abcd90bf1f": {"node_ids": ["9ec91f4b-74db-481d-a982-0ac0afece875"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "fd17eb08-fc20-4a90-a4a1-c3b4cf6b89bd": {"node_ids": ["0da49feb-0ae9-4576-adfc-a377ffbcb18c"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "4d98d23d-c42f-444b-9323-1fe97baca94e": {"node_ids": ["c2fd5c17-3cc3-4c56-b21d-2c71276d38ac"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "8ec72078-d96d-4747-a4e2-a7daacc332a8": {"node_ids": ["b65d9d3f-b955-4f40-a185-1691256386fc"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "794ad272-a4d7-44e7-a22f-46892474b952": {"node_ids": ["0173a25f-3887-49f8-b8ed-cd83682fcf81"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "a32121c2-7242-410d-98fe-f2d81d8e58c7": {"node_ids": ["06958429-3c4d-4593-aaf7-0e5462b645e8"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "429c284f-4fe9-480e-ab19-d64267de40ec": {"node_ids": ["21f821af-52f4-403a-8f5d-afad4e403009"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "9d36db84-fefe-4e6d-8034-9eb0e37c55fd": {"node_ids": ["f4e80a2e-2667-473d-aa02-45c1d88d566c"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "42781a21-7024-426e-83ba-4af0bb4387b4": {"node_ids": ["d8a5dd12-6cd0-49cb-b8d0-442672752690"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "c9587028-18dc-4835-b0ca-e2efcf7e12a9": {"node_ids": ["7ecc1b24-59ed-4d3f-a551-0cea5992dfc0"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "5200c3ed-ecad-48ae-a6fc-9e49e59a386d": {"node_ids": ["33f6c40d-c4f2-495f-8c2f-845c693b5ad4"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "8ab592e8-7178-4b82-ab4e-e27508a21501": {"node_ids": ["150a6315-59c7-4fa7-b43d-7324a3584f1e"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "fc139323-ae7e-4f71-a7d9-089bb416b7d2": {"node_ids": ["0e93c412-e25d-4d00-9211-4cb84eb05d47"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "880463eb-8565-4a9f-9410-927a8e0084eb": {"node_ids": ["8311fd1f-a666-4272-bcee-cc6e1c1d8ea0"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "650aaba2-9ff6-49ca-9da9-5b6941e2e460": {"node_ids": ["1f08ceaf-c39f-4fcd-b80d-e6c9c5f32cc4"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}}, "65067d81-e80a-49d0-be37-bdbeb86477c3": {"node_ids": ["728d4e1e-0912-474d-a13c-3dfec6840006"], "metadata": {"page_number": 1, "file_name": "data/finite_automata_06_handout.pdf"}}, "1c3dbc12-03a8-4b38-8cfe-d3260f3aead2": {"node_ids": ["21c4e6f2-ea29-4288-ab32-78ef5e9c4283"], "metadata": {"page_number": 2, "file_name": "data/finite_automata_06_handout.pdf"}}, "5f6e090d-e6ab-44ea-b030-63a0b81e5890": {"node_ids": ["0246f201-6f15-41dd-9ba3-e7c495e55454"], "metadata": {"page_number": 3, "file_name": "data/finite_automata_06_handout.pdf"}}, "3c25db0f-0efe-4641-85b8-41f37d34f11a": {"node_ids": ["30acbbb4-283c-40e9-8aa4-7276852e265e"], "metadata": {"page_number": 4, "file_name": "data/finite_automata_06_handout.pdf"}}, "80a26ef5-2152-438d-93f2-e99d0ff385e8": {"node_ids": ["aca39985-4dcc-4026-a08f-81cccc60b0fc"], "metadata": {"page_number": 5, "file_name": "data/finite_automata_06_handout.pdf"}}, "f6f0a271-e590-4481-bbda-1673f8911af6": {"node_ids": ["141316cd-14d2-4c33-ac98-10eebb3881bd"], "metadata": {"page_number": 6, "file_name": "data/finite_automata_06_handout.pdf"}}, "c92c3ba1-c02f-415f-bacf-a21086a8ca30": {"node_ids": ["993b1b15-d413-417b-80b4-bca6b3102572"], "metadata": {"page_number": 7, "file_name": "data/finite_automata_06_handout.pdf"}}, "82817cec-6ca7-41d4-b42f-2dae2f0b112a": {"node_ids": ["f21b0a3a-dccc-4c2a-9272-21368cae552e"], "metadata": {"page_number": 8, "file_name": "data/finite_automata_06_handout.pdf"}}, "25e80a7a-ab4e-4d67-801b-ed1dd66320d5": {"node_ids": ["871ae3b0-de62-45ec-8d41-b378016a2bf7"], "metadata": {"page_number": 9, "file_name": "data/finite_automata_06_handout.pdf"}}, "e9acb4f4-88b6-4ea0-bc71-4e926e70a931": {"node_ids": ["35ea75f3-c13e-4018-945f-872f6251d0b1"], "metadata": {"page_number": 10, "file_name": "data/finite_automata_06_handout.pdf"}}, "d80eceb6-ebb8-4704-84e2-c4e31aea85cc": {"node_ids": ["d655f37f-761e-493f-91b7-eadfa023b346"], "metadata": {"page_number": 11, "file_name": "data/finite_automata_06_handout.pdf"}}, "3bd05c2a-98f0-43bb-9c18-068045afbd73": {"node_ids": ["d247f619-fde8-40e2-8b3e-5fd1259ae8fe"], "metadata": {"page_number": 12, "file_name": "data/finite_automata_06_handout.pdf"}}, "a2824579-7f5c-4154-ad0c-5f4a8497bb6f": {"node_ids": ["81bf18d2-00c6-4ddc-a842-5f55ccc7a982"], "metadata": {"page_number": 13, "file_name": "data/finite_automata_06_handout.pdf"}}, "06c7b0d7-c250-47a7-b208-4988b241d811": {"node_ids": ["467558c3-e094-43dc-b88e-d59b2009928c"], "metadata": {"page_number": 14, "file_name": "data/finite_automata_06_handout.pdf"}}, "b0e5baa2-f02b-4bfc-9d28-1b2505e3f73e": {"node_ids": ["497e79e3-be9e-40b2-8edb-a5996c71a4c2"], "metadata": {"page_number": 15, "file_name": "data/finite_automata_06_handout.pdf"}}, "2d97bbc7-d34d-4676-9c49-2bebce8cde61": {"node_ids": ["6a9babf7-2595-4eaf-a5f2-6791b4523678"], "metadata": {"page_number": 16, "file_name": "data/finite_automata_06_handout.pdf"}}, "c96dd937-7ac2-4451-ad25-f023d0883c0a": {"node_ids": ["ddc3920e-1495-4f90-a987-3e4e03b4094a"], "metadata": {"page_number": 17, "file_name": "data/finite_automata_06_handout.pdf"}}, "830305c3-609b-4801-9adc-005c67d22cc6": {"node_ids": ["347f96c7-eaf6-47b0-8418-e85e3b6ba4f4"], "metadata": {"page_number": 18, "file_name": "data/finite_automata_06_handout.pdf"}}, "f9abceb8-bdf5-4600-a217-efd48276f962": {"node_ids": ["8aad0ff2-ae77-4639-9fea-67d0bb34374e"], "metadata": {"page_number": 19, "file_name": "data/finite_automata_06_handout.pdf"}}, "dbc6a8ca-6079-4a3f-9f79-ef586620a4ab": {"node_ids": ["a2c1c819-1ab6-4eb8-a613-69663a3453fc"], "metadata": {"page_number": 20, "file_name": "data/finite_automata_06_handout.pdf"}}, "471e4d15-b9dd-4fc2-a696-b406755c55df": {"node_ids": ["c2863b92-e1f7-4b40-9088-ed90b8087a05"], "metadata": {"page_number": 21, "file_name": "data/finite_automata_06_handout.pdf"}}, "acffaf91-caa0-4d73-a07d-c749c5bcda6f": {"node_ids": ["49cb22d8-d0c8-475b-b601-b153020a5f74"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "6f2844c6-fd21-482c-b18c-3dbb1b3d3520": {"node_ids": ["f9b24bb6-fdc3-45ee-97ca-36ae4e970830"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "fab66206-335d-4130-bf81-df3daaacbd2a": {"node_ids": ["fe17e153-46df-46b9-86eb-0008f84b9722"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "91a0e099-9352-43c9-be28-b097c6948ccd": {"node_ids": ["217bf5e2-c5b9-4b63-802d-556058a0085f"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "e373490c-63ab-4a0a-9468-52bb59feb4eb": {"node_ids": ["3eba1c17-a17e-4c47-822c-e928c296572b"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "ffa06323-0f28-4158-858e-420adb2b52ee": {"node_ids": ["59ca93af-7d14-40e9-9abf-4f523f3967ae"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "18cb1284-786a-4c85-b1d9-3be29b41e3d8": {"node_ids": ["e30b55d8-0065-46bc-8a62-87fa60eb5bb1"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "895ce90e-7271-45ca-99a1-6b64e506194e": {"node_ids": ["609613be-622c-4399-9520-972093ac0af3"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "983665e5-b3c8-4f2c-9cf5-642420dca2fb": {"node_ids": ["1f19df44-bb56-4512-b6a1-07277aa48dd5"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "574ad8ba-e6f0-46f6-aa1c-b3540f8ef1d5": {"node_ids": ["a20991bc-8767-4e8a-aa1f-5755a297db79"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "47712a70-0e42-4e57-b314-df6893743083": {"node_ids": ["165085db-1f95-44b6-940b-c5cca6842b1e"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "67fb5e22-830d-4357-b7b1-24aa423c671c": {"node_ids": ["4fb53d4a-1cfc-4d48-abc3-26017f53a822"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "31286cb6-e92b-459b-8a12-1b78d8a964a5": {"node_ids": ["2f52a19d-fbc1-45af-b617-b1a0a5bb5442"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "9cfe2d17-5416-4b9f-aa4f-9d99f68bca8c": {"node_ids": ["7b527787-96da-4226-9382-d6940ff03097"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "020699a9-b701-46b2-a642-b577f16ab28c": {"node_ids": ["73d8a3f4-aac1-4760-839c-d9f35314c71f"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "7a9e7e27-00b3-4beb-9aef-3d1b001d4be4": {"node_ids": ["52fc16cd-9438-4db7-b20e-6ba898d1a3d7"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "a546c90b-f54a-4ead-a910-873dcbcf3679": {"node_ids": ["5a07a60d-8e79-4a7b-a081-3cb40cd8c90c"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "4f42f07a-0612-4806-b7f7-d8340894b052": {"node_ids": ["8d6e60ab-5079-411a-b140-74b407662a38"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "4a4c7a86-55ca-4fea-86b4-31b073c4c7a4": {"node_ids": ["5127b3b6-0396-4ecd-a2ab-0d4eb61fe826"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "c732afba-4e52-4c28-b884-4898cbbf8cdd": {"node_ids": ["181101e7-b7f0-4a5c-8f26-2c4e0a926e02"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "2c5c2ddf-7e81-4453-bd3c-1820ccf464fe": {"node_ids": ["7ae099af-2305-4fc1-a0c0-c81b9fb112d4"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "c92d81c9-a929-45c3-a048-9a6079e2325c": {"node_ids": ["a5ba9817-a5d2-488f-b85a-0d1a52593071"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "d5489249-da51-4c41-99b0-7272b2fd55db": {"node_ids": ["365743a5-9d9f-4233-a559-198392666f13"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "45d2774f-fd5e-422f-889e-9b49ebe8aabb": {"node_ids": ["7c7e803c-b7cc-4098-bf47-14a970fed3cc"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "f0b615a9-16af-4b1e-88b9-7851aff8a6bf": {"node_ids": ["a872cb37-41f0-4edf-9734-b48da18fb4ab"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "782dd48e-91d1-4ac3-8964-5c039488bebe": {"node_ids": ["e7cbff7d-1181-479f-a570-edbc3e78e753"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "13f9a580-e911-46b8-942f-a573c653285e": {"node_ids": ["588ec552-d024-40cb-8227-661219987a07"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "91261279-84e1-4e31-8385-422fc05bf691": {"node_ids": ["e5ccf591-1040-41ae-be1d-a8346f207f33"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "baeede9e-dd88-42be-8318-e867b5f18e1b": {"node_ids": ["e5ace444-4f8a-4d6f-b321-ed511d2dfa22"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "4a61b464-204b-4c5d-a1cd-4a2e8d2ec383": {"node_ids": ["4e496608-68d4-4426-8289-00aaec8c5a1c"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "a59bee68-7978-4dea-b538-21f517b45231": {"node_ids": ["71a928b2-dd65-4147-ae36-a611b24ec474"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "6e7782fa-7c64-4be6-b1a8-b775384c6045": {"node_ids": ["223d108d-3a96-4fc3-86af-cd7ad0f869a9"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "cf46b441-f121-4ceb-b962-533de2ab09ef": {"node_ids": ["d9e92c63-6c38-44e8-84e8-ecbc7a945bb1"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}}, "b7c22205-d09c-4c1b-8769-27187f8f8f3c": {"node_ids": ["dba849df-4ab3-48c1-a42a-681574bf5874"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "1b5246dc-12b7-4622-adbb-65c56b283528": {"node_ids": ["18892d8c-f772-4afe-9a4c-7e3248c913f7"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "0f09bfc6-d04a-40da-ae1c-216cd687c2a8": {"node_ids": ["c575b97f-68ff-4e6e-8893-abba43e9882c"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "301b59e1-7bfd-424e-bbea-c78435a4e74f": {"node_ids": ["dfe1af4c-e6f7-4e72-976d-cd544f46d6ca"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "4c3acf80-a37c-4608-b91f-7d138698cc39": {"node_ids": ["b331adce-78c4-4106-aec0-e265f3c93550"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "6a94ba21-36ed-4666-b23d-68c960f0e51f": {"node_ids": ["e79562a0-d816-49ba-b5d7-6e22b2262755"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "a796ce72-4b56-4e6b-9153-af284fec00ff": {"node_ids": ["cc9f9c4b-da7b-4308-8a2e-d16ce5da2549"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "e415bf5b-c8df-4d49-8f9e-929870e90d82": {"node_ids": ["2af20fc5-f229-4a96-8b32-21d8d206296b"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "26d95543-2609-44ca-a060-642c622650a6": {"node_ids": ["f2a62183-e832-4709-9a26-36e803bffe7e"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "9f131792-ce60-4bd0-9d09-76c9faf87792": {"node_ids": ["db0bef2b-e52c-4e6f-839b-8e551556273b"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "3233a8d8-e958-4023-9cd3-e31a1fe713cc": {"node_ids": ["31b5046c-98a9-4b23-a6b7-5a8c6ae14d2f"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "fcc46606-2a7c-4b00-8e9c-02ef0088ec48": {"node_ids": ["1c04a149-9edc-42f4-b82f-4ac9dad20fc4"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "9a689495-cd44-40f8-8713-1e688b3fea5a": {"node_ids": ["6810bf0b-5de0-4a95-a4e0-59cafa0b0549"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "23a4e7cf-847d-4167-887a-9503eebeb38c": {"node_ids": ["dc857518-0890-4de9-9bcd-73fa9c03cf9e"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "073d7554-2822-495a-88c3-8181a0d96057": {"node_ids": ["552ce3fd-f6be-44e8-8cfc-1ecd642c9e34"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "0861b705-526f-4ec5-8512-5a223a554697": {"node_ids": ["d0cb3c00-ce6f-4e68-8801-b59965fd9f50"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "299bdafd-87c1-43ad-ab20-1e15cea35998": {"node_ids": ["100e256c-b31c-4980-8b18-66bb26e5658e"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "86419b13-fe0b-4ebf-b289-7a76d092426f": {"node_ids": ["6194bf94-85ef-478f-8032-9777db67d686"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "a0b3d243-a1be-478e-af7f-5cb685263367": {"node_ids": ["748d2d9e-d021-473f-85d0-4dc7dbd466af"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "fd270dac-04c1-4540-bad7-be889e6f13b6": {"node_ids": ["417bb18f-2806-4d2b-9105-5c8ab590d81f"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "79cdcea3-4106-4852-af23-05376dc62149": {"node_ids": ["1e7df8b9-7dde-4853-b068-94bef3c1cce6"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "14d5a4f1-97d4-4afa-b7e2-ce34b22ee040": {"node_ids": ["ac42d99f-c337-4120-81da-21d4ec5f3994"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "c8c1849e-79b1-4ea8-9416-eadcf372d06d": {"node_ids": ["db8dcb55-38f3-4529-8cea-a2251d43ca78"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "c38b6e84-c14e-4c89-a98c-203da93122f2": {"node_ids": ["80bd1f7e-f5aa-4f48-80ce-3ec2020d2ec6"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "24c147ae-2bd1-4716-89b2-a4ccd9964cfe": {"node_ids": ["a1274bf9-7155-408d-964c-6a26033a2418"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "cf158de9-7c38-42aa-a93f-23d893e79d03": {"node_ids": ["ad1fa5bd-9807-4b34-8c3b-306b626c2ab5"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "1afb2557-03af-4d8c-9e3f-91403f1e7a0f": {"node_ids": ["cc53da89-a4e8-44fc-b199-757185d1aa6a"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "aa8a5db0-1399-4397-9812-efe1d991257f": {"node_ids": ["1824ef33-3ae1-4007-990e-2a38a329eee1"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "96bc6cf5-071b-40f2-a18e-7228b28f954b": {"node_ids": ["edad2037-5822-4d1d-841d-66ded241e10b"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "e682343e-cde9-4486-b456-e475edfcbdfb": {"node_ids": ["fbae79a1-b97a-49e7-b325-491294704e07"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "2c0df155-53aa-42c6-a41c-1f606533b23d": {"node_ids": ["8fa28574-ef92-4c6c-b836-a486fc0311c3"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "9090fba3-be99-400b-a1da-530771880f18": {"node_ids": ["72677465-31f5-4878-bbb7-93947e22b346"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "c702bfd8-9800-49c7-92fb-b693c6145849": {"node_ids": ["74e65e2d-e14f-4cc5-8016-e3766e4319a8"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "b0c6553b-33ee-4108-96ee-62f106037168": {"node_ids": ["9a6ef3ac-b79a-4356-b902-35ed95df741d"], "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "26481353-f152-4f38-9411-b83984780735": {"node_ids": ["696ba37e-8197-4a87-8c57-69869db5cbd3"], "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "02d62435-c5fa-48cc-9f0e-fb7aeb8c728e": {"node_ids": ["5fadc877-5586-4b9e-a555-77bdd03dfae4"], "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "e64df88d-e942-40b8-ab22-c5364989388f": {"node_ids": ["f93cbaa7-56e2-443a-8c05-f4a2f768520c"], "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "6092dddd-47de-4263-b7fc-a3ecfecdb2cf": {"node_ids": ["72a7ec13-75f2-4f7b-9315-bf2ab8e1bcec"], "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "6284aa5a-d57b-40b1-86ca-1dc2ddb4f77e": {"node_ids": ["b0024046-c605-412d-a67d-c4feb989ee23"], "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "b62617e8-5b2e-4ecb-8f1f-43e6137f9488": {"node_ids": ["f461ffe1-3e70-4beb-8e4e-2fb4513d940a"], "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "c867a2ae-a7d9-425a-a1de-196b65d9b431": {"node_ids": ["786fd7c3-f6c0-4853-9e02-18d51ec84468"], "metadata": {"page_number": 41, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "a05b4cb2-113f-4bf3-be3c-04b7d84b88da": {"node_ids": ["c3eead52-fc52-4935-8e0c-17c3e66a0d49"], "metadata": {"page_number": 42, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "12209d31-5909-44ad-841d-8d24c207b7fb": {"node_ids": ["68257f21-2395-453e-b427-e449a71cf1e5"], "metadata": {"page_number": 43, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}}, "7df62fdd-2eaa-4daa-94b5-eb47e66a77d0": {"node_ids": ["61d73bee-5e2d-489d-823d-0563b5462d6b"], "metadata": {"page_number": 1, "file_name": "data/finite_automata_03_handout.pdf"}}, "ad712aa0-cfb6-477a-b7a8-f688e69bc2a6": {"node_ids": ["79afa0b5-9289-4e77-97a6-77fedcf62191"], "metadata": {"page_number": 2, "file_name": "data/finite_automata_03_handout.pdf"}}, "9424c67c-0023-4cbb-a07b-55ddb2e96746": {"node_ids": ["6105b810-1abb-40a3-b00a-ac84c03b4110"], "metadata": {"page_number": 3, "file_name": "data/finite_automata_03_handout.pdf"}}, "a59eff89-d205-408b-9480-3ac62d20ac25": {"node_ids": ["bd07802f-a077-4fbc-ab10-9d0b766136a3"], "metadata": {"page_number": 4, "file_name": "data/finite_automata_03_handout.pdf"}}, "1052f264-49dd-47d2-a3d6-8443a6955451": {"node_ids": ["87f41955-fa21-472e-8dc0-cd4711c3a796"], "metadata": {"page_number": 5, "file_name": "data/finite_automata_03_handout.pdf"}}, "f46a460e-58b5-46bd-a6b4-347d8650a1f3": {"node_ids": ["f3ada881-f366-49e2-974f-fac699dcc276"], "metadata": {"page_number": 6, "file_name": "data/finite_automata_03_handout.pdf"}}, "ff3189ee-6cee-4ea0-af55-214386c4311e": {"node_ids": ["8e85461e-56c6-4a43-a9c2-1460615792dd"], "metadata": {"page_number": 7, "file_name": "data/finite_automata_03_handout.pdf"}}, "9f775235-b052-436e-9a44-029203885d7e": {"node_ids": ["87452903-5997-468c-892a-4d4233a18f1c"], "metadata": {"page_number": 8, "file_name": "data/finite_automata_03_handout.pdf"}}, "f9196c41-455c-440a-9fbd-4c48c23b1073": {"node_ids": ["b8035955-6e30-47bc-a4e1-611048db7055"], "metadata": {"page_number": 9, "file_name": "data/finite_automata_03_handout.pdf"}}, "140c7a6d-d3b2-4654-94da-9c360bd4924a": {"node_ids": ["95a6c872-151d-4014-aa31-2437d61168f4"], "metadata": {"page_number": 10, "file_name": "data/finite_automata_03_handout.pdf"}}, "3fd70f57-777c-4642-8892-0ffefdcd50e6": {"node_ids": ["dab178e8-44d6-4ed4-8d29-b250367ee35a"], "metadata": {"page_number": 11, "file_name": "data/finite_automata_03_handout.pdf"}}, "3b30874b-f2b3-416b-9e10-2f652fab7ae2": {"node_ids": ["232f7354-00ee-4af3-b01d-62e2a6cf1a21"], "metadata": {"page_number": 12, "file_name": "data/finite_automata_03_handout.pdf"}}, "487b3eb8-8cab-406c-8060-a2e6e36a8ad8": {"node_ids": ["1a4ccf2d-69b0-4c6a-b47b-cbcd8656fb08"], "metadata": {"page_number": 13, "file_name": "data/finite_automata_03_handout.pdf"}}, "bcc9a12f-2bce-4e9b-b756-a2b1d08dad75": {"node_ids": ["9da2d37c-95b6-4260-aa56-f9a6e39fb71a"], "metadata": {"page_number": 14, "file_name": "data/finite_automata_03_handout.pdf"}}, "0a0fc459-8fe1-4b48-a380-b63513da438d": {"node_ids": ["739158d1-2fb3-4caa-83c4-ef42559e09c9"], "metadata": {"page_number": 15, "file_name": "data/finite_automata_03_handout.pdf"}}, "36bfac59-dc60-465f-b915-1005e705be87": {"node_ids": ["bb35196e-acec-44d3-94b4-03f4ba22373b"], "metadata": {"page_number": 16, "file_name": "data/finite_automata_03_handout.pdf"}}, "a74c4f60-ea99-49c7-a20a-06789922b60b": {"node_ids": ["03875b2e-46aa-448c-a638-f3b4d34d686b"], "metadata": {"page_number": 17, "file_name": "data/finite_automata_03_handout.pdf"}}, "fec25271-d813-41b3-b484-99b53b8fccfb": {"node_ids": ["6b41a10c-13f5-4d44-8080-8ff81315e875"], "metadata": {"page_number": 18, "file_name": "data/finite_automata_03_handout.pdf"}}, "dd0a9c1d-115f-466a-bf74-24eeb03a0ba3": {"node_ids": ["3e7ffe36-12db-4f88-b6e4-3b5ad7af0b1d", "a56c9b23-c481-44bf-bc26-f353c0d3847c"], "metadata": {"page_number": 19, "file_name": "data/finite_automata_03_handout.pdf"}}, "b6b592f8-7b24-4370-a06c-86013706fef3": {"node_ids": ["c8ee41d4-888f-4964-ba60-aae034fed8dd"], "metadata": {"page_number": 20, "file_name": "data/finite_automata_03_handout.pdf"}}, "7b5d463d-d3de-4791-a2fe-4a4dff9bb6b7": {"node_ids": ["dd0adeb3-984c-4b58-913f-ee347afc4bee"], "metadata": {"page_number": 21, "file_name": "data/finite_automata_03_handout.pdf"}}, "3c91e7e0-16a3-4ccd-b7ab-d0d8c4d7eb5e": {"node_ids": ["9bbd0c3b-82cd-4e5e-bc4b-01fdcae31938"], "metadata": {"page_number": 22, "file_name": "data/finite_automata_03_handout.pdf"}}, "a8d0ae09-ac89-4e73-8aef-8b45d3e55522": {"node_ids": ["590e7498-f4a9-4b9a-b8e7-56688901f0b4"], "metadata": {"page_number": 23, "file_name": "data/finite_automata_03_handout.pdf"}}, "0382de30-f2cc-4207-b40e-c03dd9526da7": {"node_ids": ["5a3b743a-33a7-4c1e-ba74-9f532f407616"], "metadata": {"page_number": 24, "file_name": "data/finite_automata_03_handout.pdf"}}, "68f337d1-3425-4e8c-b46e-e92da8276b9b": {"node_ids": ["08cbe4ad-c49a-4959-8a6d-c8e9d9f9461c"], "metadata": {"page_number": 25, "file_name": "data/finite_automata_03_handout.pdf"}}, "376f03af-7831-4263-944f-067a8a739610": {"node_ids": ["d2121c03-ca57-4920-930d-2806d96a5540"], "metadata": {"page_number": 26, "file_name": "data/finite_automata_03_handout.pdf"}}, "65963bed-bac0-49d6-a9de-d65a242db975": {"node_ids": ["76adf11d-d524-4787-bbd0-a77a5bdfd853"], "metadata": {"page_number": 27, "file_name": "data/finite_automata_03_handout.pdf"}}, "b43b6e13-0f5a-425d-9275-2729a955c844": {"node_ids": ["7cb02807-3a6b-4322-a1d6-d8aece2f2bf7"], "metadata": {"page_number": 28, "file_name": "data/finite_automata_03_handout.pdf"}}, "29c3b60a-bb82-4527-bde0-350a15fbae8f": {"node_ids": ["5dcc40da-7eb2-472b-b22c-6775eb440a35"], "metadata": {"page_number": 29, "file_name": "data/finite_automata_03_handout.pdf"}}, "3d053e94-cef1-4380-b5b1-e0b0d51c5222": {"node_ids": ["c5c359ca-e3cd-4bfc-a33d-1c1a7d0f1599"], "metadata": {"page_number": 30, "file_name": "data/finite_automata_03_handout.pdf"}}, "313d1cc0-c831-4786-a0da-932c1fc8bc88": {"node_ids": ["14d5d01f-e73e-40d1-846f-b207bf893c48"], "metadata": {"page_number": 31, "file_name": "data/finite_automata_03_handout.pdf"}}, "35a7a5d5-29d2-44dd-9aa5-27639f970e07": {"node_ids": ["edd13447-bbd1-4ad7-ad95-8d1c79ba38c0"], "metadata": {"page_number": 32, "file_name": "data/finite_automata_03_handout.pdf"}}, "14b6087f-7eb1-4559-b618-81303dba6bad": {"node_ids": ["e01af6d8-e78f-4b51-b017-6a668eaca36e"], "metadata": {"page_number": 33, "file_name": "data/finite_automata_03_handout.pdf"}}, "9023d277-fae0-45f5-95a6-6469aed88c6b": {"node_ids": ["17650171-9692-484b-8800-0431b1999129"], "metadata": {"page_number": 34, "file_name": "data/finite_automata_03_handout.pdf"}}, "b94e7616-e08f-459d-b18e-d9c8cccc5c04": {"node_ids": ["d51528f0-e47c-46ef-a09c-f7fa954bb167"], "metadata": {"page_number": 35, "file_name": "data/finite_automata_03_handout.pdf"}}, "f190840c-f1c7-4a6c-9501-64b2db54a31f": {"node_ids": ["cb47fab4-3a26-4663-971d-d0b1896002e3"], "metadata": {"page_number": 36, "file_name": "data/finite_automata_03_handout.pdf"}}, "849394fc-644f-4569-8500-914171e26ecf": {"node_ids": ["7d7f38d0-f610-414d-95e3-c3c680064ebb"], "metadata": {"page_number": 37, "file_name": "data/finite_automata_03_handout.pdf"}}, "b5c10dbe-54b3-4806-8983-d3a98129a858": {"node_ids": ["4a253d66-1583-4cfd-bea9-984528c6e8ab"], "metadata": {"page_number": 38, "file_name": "data/finite_automata_03_handout.pdf"}}, "e356ac61-993e-4364-a94e-f7b445b0a58b": {"node_ids": ["9ca1348c-2def-4c68-a259-7d11d229331a"], "metadata": {"page_number": 39, "file_name": "data/finite_automata_03_handout.pdf"}}, "73ea29ac-969b-4aeb-9022-a5bd0df59e05": {"node_ids": ["9d0b0d10-d046-4e08-bbfe-d3a26db58db9"], "metadata": {"page_number": 40, "file_name": "data/finite_automata_03_handout.pdf"}}, "eac1c32c-3264-4aa1-bf3b-5fc59fa1b043": {"node_ids": ["49162b36-6737-473b-b3a9-7793482ee363"], "metadata": {"page_number": 41, "file_name": "data/finite_automata_03_handout.pdf"}}, "9526bc96-2551-4757-9b96-b103199d49a8": {"node_ids": ["8ebc2396-6364-45ad-82ce-dbab340a70ea"], "metadata": {"page_number": 42, "file_name": "data/finite_automata_03_handout.pdf"}}, "8ea0761b-9bdc-4d7a-9681-d8639b64bec9": {"node_ids": ["58822eb0-35e8-495a-8200-bdf3662c0cce"], "metadata": {"page_number": 43, "file_name": "data/finite_automata_03_handout.pdf"}}, "32061c73-6c51-4127-9f5e-6bb73e1ea3da": {"node_ids": ["e1275809-2525-44a9-bafb-15e14944f645"], "metadata": {"page_number": 44, "file_name": "data/finite_automata_03_handout.pdf"}}, "af10af35-89d4-4899-8f12-81ec55b469f6": {"node_ids": ["769c905e-eb1c-4fdf-84f6-14f27e971937"], "metadata": {"page_number": 45, "file_name": "data/finite_automata_03_handout.pdf"}}, "c663017c-a0f0-46d9-8375-9598f20f5bf8": {"node_ids": ["bed8fca3-37f1-4a86-af25-385ae63ad65c"], "metadata": {"page_number": 46, "file_name": "data/finite_automata_03_handout.pdf"}}, "d1de82e4-a7a6-4543-9d6d-42a010f1f92f": {"node_ids": ["915aeab3-6584-4617-9f58-fc713d80a9dc"], "metadata": {"page_number": 47, "file_name": "data/finite_automata_03_handout.pdf"}}, "b296c27a-953f-49b2-943c-493f33ba628b": {"node_ids": ["79e3792a-83eb-4108-a9f8-bf22774d7ebc"], "metadata": {"page_number": 48, "file_name": "data/finite_automata_03_handout.pdf"}}, "b2cbc931-737c-4e43-82b5-4787d6ff0a47": {"node_ids": ["61753fa5-98cc-4327-96d5-64296678dbc1"], "metadata": {"page_number": 49, "file_name": "data/finite_automata_03_handout.pdf"}}, "433ec58a-41ab-4f6e-baa3-5537eec5d764": {"node_ids": ["0ddc2be0-ce5a-4e4a-a046-e87ae0be01ec"], "metadata": {"page_number": 50, "file_name": "data/finite_automata_03_handout.pdf"}}, "d3469469-a7dc-48a1-8114-c6ad60289b02": {"node_ids": ["f68b9e7d-da2f-4e1f-96b0-9d1bb241ca5c"], "metadata": {"page_number": 51, "file_name": "data/finite_automata_03_handout.pdf"}}, "92901df1-6b57-4508-9883-c67975b880bf": {"node_ids": ["675d2460-93ba-4808-9665-89eab9f8d9cc"], "metadata": {"page_number": 52, "file_name": "data/finite_automata_03_handout.pdf"}}, "9bf6d0f4-f6c7-47ff-ab18-11ad9a806eaf": {"node_ids": ["1507ec4f-e5eb-4eae-adb6-b0da7e39a5e4"], "metadata": {"page_number": 53, "file_name": "data/finite_automata_03_handout.pdf"}}, "c553e89a-8eff-46e3-9bf6-baeba39fb35e": {"node_ids": ["130f7a3f-48c9-41a3-85bf-f050bdb4cf02"], "metadata": {"page_number": 54, "file_name": "data/finite_automata_03_handout.pdf"}}, "477b0431-83eb-48bc-9e40-157830569fb8": {"node_ids": ["02aeba3e-3b4c-4e7a-bde4-4916d2109590"], "metadata": {"page_number": 55, "file_name": "data/finite_automata_03_handout.pdf"}}, "654b897d-5ce5-4d9e-a1d6-375372571733": {"node_ids": ["d13cf60f-7ae0-414a-8adb-baf89547fa12"], "metadata": {"page_number": 56, "file_name": "data/finite_automata_03_handout.pdf"}}, "edf49ec4-4d0b-4505-bff6-39e537e5d32e": {"node_ids": ["4b4cfded-8949-4b05-a853-f4379e0166da"], "metadata": {"page_number": 57, "file_name": "data/finite_automata_03_handout.pdf"}}, "8cdddba1-58cc-48ab-a868-f85419425888": {"node_ids": ["2e587b98-181b-4b7d-b59b-2c22706e75f0"], "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "3b6e9bd9-77e5-41ce-84a2-340f4dc22022": {"node_ids": ["f65e948b-543c-4c3e-9d06-36a16842a1ee"], "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "5305a6bb-8838-4138-a781-5f865e2a288a": {"node_ids": ["9b52bcf5-6aea-40ae-aaf3-05e8d96df639"], "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "5d74f000-553f-4673-b3d0-28cbababecea": {"node_ids": ["5767ab18-6e20-4627-91af-3637d7f1a09d"], "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "fdd79aa2-d716-484a-a5fb-b48c5db3d5aa": {"node_ids": ["6751d0ef-b8bb-443f-8614-b1d907c212c0"], "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "89380637-7b41-45f2-94b6-102faa2120cc": {"node_ids": ["8ab66ea3-8192-4554-8f82-ea41d4e94aca"], "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "f86f8db1-8f12-42ea-8488-e1c3f148d78e": {"node_ids": ["db6014ac-e6a5-49a6-9f7e-aa422426479f"], "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "b03e76c6-5dbd-4cc4-86b9-0c41fbb6e934": {"node_ids": ["bb6121b2-c770-4cd8-9d65-d67a062c63f4"], "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "a44778b6-04dc-4c57-9d08-5713937c5fef": {"node_ids": ["f6195136-b503-4e23-bf30-71204259bd9a"], "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "3b2847fa-3592-4070-aa79-ae706c9bea34": {"node_ids": ["f94d4268-a09d-452c-b0d3-cf107a84fc94"], "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "f79cdcab-543f-48e2-bb71-863126c6495c": {"node_ids": ["e2783e38-ecf5-4d4e-a4b7-09c4e2ae2e6a"], "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "f721df7a-b66d-4897-9ea3-08df3e5b20ed": {"node_ids": ["71d5db72-221f-44ae-8812-54b0c05a8556"], "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "bf341016-cc1e-424a-8872-7ea2560af094": {"node_ids": ["eb25e297-6a78-4bb2-973c-3de5fa8fc760"], "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "07352b2c-813b-41b2-b7cb-cabd91963b87": {"node_ids": ["9bee7d1a-e45d-4743-9edf-53ce4139b13c"], "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "98ecebcf-8483-4dff-99de-733175d15d8d": {"node_ids": ["fcca7c53-29a4-46e4-99ed-0ec171908c81"], "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "bf851eec-2363-4255-bfce-6e5a2ce887d6": {"node_ids": ["efe5721b-79de-48e0-a2d0-2389066fe3a4"], "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "9482f7ce-699b-4e10-9e1c-330a59a1ac13": {"node_ids": ["cf6e7a4c-3047-4a28-b9f8-f9950b935083"], "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "d333ef46-2cbe-44c7-8cd2-7d22ef295230": {"node_ids": ["8bd3240a-47b5-4a05-ae24-3ea8daa969b6"], "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "d5899192-847d-48b4-8348-1000d74a02e0": {"node_ids": ["bdc9d362-8f2c-434a-9e92-09a5bfd224f6"], "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "00dff377-29bc-4669-8075-bfab96c2ca66": {"node_ids": ["0487618e-03c2-4e67-b652-56f46ad28697"], "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "bf4d503a-d04e-42cd-8153-0ab8786dba05": {"node_ids": ["7aa3a21f-8102-4da9-ba10-7ee71283fb95"], "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "5332aef8-8ef3-4fa0-b8ca-cdfbd77c062e": {"node_ids": ["38b8eef2-7afd-48f4-8f75-8b0a020124e6"], "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "979f47ee-e5bb-433d-a991-5b92cb40f992": {"node_ids": ["a926350a-786b-45fd-aa91-6adfe4fb3def"], "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "4281f524-bc7b-4554-b8b9-a13b304bc605": {"node_ids": ["113352a7-c106-4583-8bb2-06d6c0fbf89a"], "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "6a0515f2-807e-4b4b-ac9a-376f6efe938c": {"node_ids": ["64187f61-a927-45ef-baef-2a35c3f136bb"], "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "de4298f5-fbc9-41a6-a59d-7c5f671d60a6": {"node_ids": ["44558ddc-be83-4265-b51a-d45e16a8caae"], "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "0c36b890-20db-4625-88fe-dc89dd530421": {"node_ids": ["ee4d1527-accb-4dd6-9838-4c44408a2af9"], "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "8e43b393-8712-4bd4-90e5-4e9f272248b2": {"node_ids": ["1e7aa0a3-2aea-4491-8d56-57c784e9f604"], "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "0a2cac94-e3ae-430e-853e-96e87c7c4076": {"node_ids": ["2fd8ee16-da22-4e9d-9936-c0c22d8e1ba1"], "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "563600d9-22df-4913-9ee8-0d844699b933": {"node_ids": ["67e1cb8b-5256-48c1-a90e-ca6003f5c620"], "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "18c99039-ee9f-4928-8f54-809ac322b639": {"node_ids": ["18dd071c-a3e0-44cd-af83-15e2cde938fc"], "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "f846fa69-fbba-4bc4-b518-1fce147a6f1e": {"node_ids": ["5cd3fc98-b977-4d9c-b7c6-4d3b25857ff1"], "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "a38742a5-fa61-4ae4-8eb4-a33df82b70dc": {"node_ids": ["a14086b3-9ff6-43da-a005-0537ec346656"], "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "23480e28-694a-410e-8c32-c1564b42eb4b": {"node_ids": ["9072d78b-a77a-4797-8cd8-92fe4ee426fb"], "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "904cc442-d779-4828-9fb7-2b83100b2806": {"node_ids": ["c3d67f7c-f583-4e4d-b107-2555d2b17450"], "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "905c92b8-d357-4515-b79e-5bff0111919b": {"node_ids": ["93cfc5ca-d795-40cb-a027-a8bb477e988f"], "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "38cd58e3-b09e-44e0-94b1-3423dce4b9f8": {"node_ids": ["81f08320-54e0-4b34-8ba1-2353b3a272cb"], "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "a795fad3-2212-4e02-9e00-514efac487c5": {"node_ids": ["3106406f-8920-4dc2-a1de-29e4aae6c3e8"], "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}, "2e108bd3-c332-42da-98dd-21c0e7067bc3": {"node_ids": ["99896596-fae0-4b23-85d7-3ba9a58ee859"], "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}}}, "docstore/data": {"44a4516f-48d8-42b6-bb6f-58a4abfdeb9d": {"__data__": {"id_": "44a4516f-48d8-42b6-bb6f-58a4abfdeb9d", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e06d7e7e-a58b-461c-9f03-8b7a580fc463", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "076466310f14ae7b9c22d778965d073a71d9e1909d3696d05f6df695c5a7b423", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata 04\n\nThumrongsak Kosiyatrakul \ntkosiyat@cs.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 70, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "79fd0146-12d1-4ff1-8076-8f75c79acb1d": {"__data__": {"id_": "79fd0146-12d1-4ff1-8076-8f75c79acb1d", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6422cd60-2321-4f9f-a31e-adf7b3c8e342", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "29d504f7f8309daf72ffcd5f87ef33a1e6f886955dd138322b94f5f2ee58f03d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions\n\n* A **regular expression** can be constructed using the following rules:\n 1. \\( a \\) is a regular expression for some \\( a \\) in the alphabet \\(\\Sigma\\),\n 2. \\(\\varepsilon\\) is a regular expression\n 3. \\(\\emptyset\\) is a regular expression\n 4. If \\( R_1 \\) and \\( R_2 \\) are regular expressions, \\( R_1 \\cup R_2 \\) is a regular expression\n 5. If \\( R_1 \\) and \\( R_2 \\) are regular expressions, \\( R_1 \\circ R_2 \\) or \\( R_1 R_2 \\) is a regular expression\n 6. If \\( R \\) is a regular expression, \\( R^* \\) is a regular expression\n\n* Note that to use rules 4, 5, or 6, you need to have regular expressions \\( R_1 \\), \\( R_2 \\), or \\( R \\) first which can only be constructed from rules 1, 2, or 3\n\n* This is a recursive definition\n - Once you get regular expressions, you can apply rules 4, 5, or 6 multiple times to obtain more and more regular expressions", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 887, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0aa9bd7a-3e07-47d1-a24c-ad2461cf4652": {"__data__": {"id_": "0aa9bd7a-3e07-47d1-a24c-ad2461cf4652", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ccea239e-3278-4217-bcc7-0073fb4c1414", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "8abbba596e938fef5bd984877e46ec246122c0d869ad8048f0c15654d0dfab56", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression Examples\n\n* Suppose $$\\Sigma = \\{0, 1\\}$$\n - From rule 1, we have:\n * `0` is a regular expression\n * `1` is a regular expression\n - From rule 2, we have:\n * $$\\varepsilon$$ is a regular expression\n - From rule 3, we have:\n * $$\\emptyset$$ is a regular expression\n* So far, we have four regular expressions, `0`, `1`, $$\\varepsilon$$, and $$\\emptyset$$\n - From rule 4, $$0 \\cup 1$$ is a regular expression\n - From rule 5, `11` is a regular expression\n - From rule 6, `0*` is a regular expression\n* We can keep building larger and larger regular expressions by applying rules 4, 5, and 6 multiple times", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 640, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "404efbc0-6dbc-487a-9427-d3e70df83c98": {"__data__": {"id_": "404efbc0-6dbc-487a-9427-d3e70df83c98", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "792f02b9-7eb7-471d-aaa6-f6169baedd5d", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "26e08ade6422621fff3c3db13a484a5ea286cfdc39a20c5c0be5ccf9c4d935d8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression Examples\n\n* Suppose $$\\Sigma = \\{0, 1\\}$$\n - From rule 1, 0 and 1 are regular expressions\n - From rule 4, $$0 \\cup 1$$ is a regular expression\n - From rule 6, $$(0 \\cup 1)^*$$ is a regular expression\n - From rule 5, 01 is a regular expression\n - From rule 5, 011 is a regular expression\n - From rule 5, $$(0 \\cup 1)^*011$$ is a regular expression\n - From rule 5, $$(0 \\cup 1)^*011(0 \\cup 1)^*$$ is a regular expression", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 447, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3f0421dc-ab65-4734-a71c-4dc7aa417ed4": {"__data__": {"id_": "3f0421dc-ab65-4734-a71c-4dc7aa417ed4", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2fc29119-41e0-4bbc-afb7-4ab7cf1e3246", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "f94ec1b1e1cf5dd2756901dcd9f7b632339070ff14fd2815af55bec48f98794b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions\n\n* In arithmetic, an arithmetic expression can be used to represent its object (number) \n - \\(5 + 12\\) is an arithmetic expression \n - \\(5 + 12\\) can be used to represent 17 \n - We usually write \\(5 + 12 = 17\\) \n\n* In theory of computation, a regular expression can be used to express a language \n - Let \\(\\Sigma = \\{0, 1\\}\\) \n - The regular expression \\(0 = \\{0\\}\\) \n - The regular expression \\(1 = \\{1\\}\\) \n - The regular expression \\(\\varepsilon = \\{\\varepsilon\\}\\) \n - The regular expression \\(\\emptyset = \\{\\}\\) \n - Suppose regular expressions \\(R_1 = A\\) and \\(R_2 = B\\) for languages \\(A\\) and \\(B\\), the regular expression \\(R_1 \\cup R_2 = A \\cup B\\) \n - Suppose regular expressions \\(R_1 = A\\) and \\(R_2 = B\\) for languages \\(A\\) and \\(B\\), the regular expression \\(R_1 R_2 = AB\\) \n - Suppose the regular expression \\(R = A\\) for a language \\(A\\), \\(R^* = A^*\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 916, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "811e87e4-fa91-4575-8784-703dbf9d7e71": {"__data__": {"id_": "811e87e4-fa91-4575-8784-703dbf9d7e71", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "09266a16-fa2a-4050-a53b-4a3b45e4ffe1", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "2412a99583c3976d403c29fa19d98a43a38a36efaa492bf9c7e008f940d97859", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions (Other Notations)\n\n* $R^{+}$ is a shorthand notation for $RR^{*}$ for a regular expression $R$\n - All strings that are 1 or more concatenations of strings from $R$\n - Examples:\n * $1^{+} = 11^{*}$\n * $(0 \\cup 1)^{+} = (0 \\cup 1)(0 \\cup 1)^{*}$\n* $R^{k}$ is a shorthand notation for the concatenation of $k$ $R$\u2019s with each other\n - Examples:\n * $1^{5} = 11111$\n * $(0 \\cup 1)^{3} = (0 \\cup 1)(0 \\cup 1)(0 \\cup 1)$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 451, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9a2db097-d90e-43cf-abd6-c353f326e1b1": {"__data__": {"id_": "9a2db097-d90e-43cf-abd6-c353f326e1b1", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c9eacbf1-9acb-4280-baf9-e66191bd1537", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "14fcc4c14939fcca748602c5a155ba0b3d7064cce1a2c0037bd5b507ed14bd69", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions (By Examples)\n\n* A regular expression expresses a language:\n * \\(0 \\cup 1\\)\n * \\(0 \\cup 1 = \\{0\\} \\cup \\{1\\} = \\{0, 1\\}\\)\n * A language that consists of two strings, 0 and 1\n * \\(0^*\\)\n * \\(0^* = \\{0\\}^*\\)\n * Recall that \\(A^* = \\{x_1 x_2 \\ldots x_k \\mid k \\geq 0 \\text{ and each } x_i \\in A\\}\\)\n * \\(\\{0\\}^* = \\{\\varepsilon, 0, 00, 000, 0000, 00000, \\ldots\\}\\)\n * \\(0^*\\) expresses the language that consists of all strings that contain nothing but 0s including the empty string\n * \\((0 \\cup 1)0^*\\)\n * \\((0 \\cup 1)0^* = \\{0, 1\\} \\circ 0^* = \\{0, 1\\} \\circ \\{\\varepsilon, 0, 00, 000, \\ldots\\}\\)\n * Recall that \\(A \\circ B = \\{xy \\mid x \\in A \\text{ and } y \\in B\\}\\)\n * \\(\\{0, 1\\}0^* = \\{0, 1, 00, 10, 000, 100, 0000, 1000, \\ldots\\}\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 788, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "918db2c8-8ecd-4aa4-b8ea-cd5b2eade6c4": {"__data__": {"id_": "918db2c8-8ecd-4aa4-b8ea-cd5b2eade6c4", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "896d0f91-b641-4b85-92e0-2cbb50067abb", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "e94016f79adfadc9323b79f142cd89cdc9641ac08ded3866ed5263807bbb8256", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions (By Examples)\n\n* A regular expression expresses a language:\n * $ (0 \\cup 1)^* $\n * $ (0 \\cup 1)^* = \\{0,1\\}^* = \\{\\varepsilon, 0, 1, 00, 01, 10, 11, 000, 001, \\ldots \\} $\n * This is the set of all strings over 0 and 1\n * We generally use $\\Sigma^*$ instead of $ (0 \\cup 1)^* $\n* $0^* 1 0^*$\n * $0^* 1 0^* = \\{0\\}^* \\circ \\{1\\} \\circ \\{0\\}^*$\n * $\\{0\\}^*$ is a language consisting of all strings containing zero or more 0s ($\\{\\varepsilon, 0, 00, 000, \\ldots \\}$)\n * $0^* 1 0^* = \\{ w \\mid w \\text{ contains a single } 1 \\}$\n* $\\Sigma^* 1 \\Sigma^*$\n * $\\Sigma^* 1 \\Sigma^* = \\Sigma^* \\circ \\{1\\} \\circ \\Sigma^*$\n * $\\Sigma^*$ is the language consisting of all strings over $\\Sigma$\n * $\\Sigma^* 1 \\Sigma^* = \\{ w \\mid w \\text{ has at least one } 1 \\}$\n* $\\Sigma^* 001 \\Sigma^*$\n * $\\Sigma^* 001 \\Sigma^* = \\Sigma^* \\circ \\{001\\} \\circ \\Sigma^*$\n * $\\Sigma^* 001 \\Sigma^* = \\{ w \\mid w \\text{ contains the string } 001 \\text{ as a substring} \\}$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 984, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "316ddb63-1bd0-4ae5-a43b-a146fdae8048": {"__data__": {"id_": "316ddb63-1bd0-4ae5-a43b-a146fdae8048", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7fe48277-beda-4d44-8b8f-97dd5e58eba5", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "26c35128ef6962ea9c3e8434a574a7484f3af733767ff60a0a97cd2045aa860d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions (By Examples)\n\n* A regular expression expresses a language:\n * $$1^*(01^+)^*$$\n * $$1^*(01^+)^* = \\{1\\}^* \\circ (01^+)^*$$\n * $$\\{1\\}^*$$ is a language consisting of all strings containing zero or more 1s \n $$(\\{\\varepsilon, 1, 11, 111, \\ldots\\})$$\n * $$01^+ = \\{0\\} \\circ \\{1\\}^+ = \\{0\\} \\circ (\\{1\\} \\circ \\{1\\}^*) = \\{01, 011, 0111, \\ldots\\}$$\n * $$(01^+)^* = \\{01, 011, 0111, \\ldots\\}^* = \\{\\varepsilon, 01, 0101, 01011, 01101, 011011, \\ldots\\}$$\n * $$1^*(01^+)^* = \\{w \\mid \\text{every } 0 \\text{ in } w \\text{ is followed by at least one } 1\\}$$\n\n* $$(\\Sigma \\Sigma)^*$$\n * $$\\Sigma \\Sigma = \\Sigma \\circ \\Sigma = \\{0,1\\} \\circ \\{0,1\\} = \\{00, 01, 10, 11\\}$$\n * $$(\\Sigma \\Sigma)^* = \\{00, 01, 10, 11\\}^*$$\n * $$(\\Sigma \\Sigma)^* = \\{w \\mid w \\text{ is a string of even length}\\}$$\n\n* $$(\\Sigma \\Sigma \\Sigma)^*$$\n * $$\\Sigma \\Sigma \\Sigma = \\{0,1\\} \\circ \\{0,1\\} \\circ \\{0,1\\} = \\{000, 001, 010, 011, 100, 101, 110, 111\\}$$\n * $$(\\Sigma \\Sigma \\Sigma)^* = \\{000, 001, 010, 011, 100, 101, 110, 111\\}^*$$\n * $$(\\Sigma \\Sigma \\Sigma)^* = \\{w \\mid \\text{the length of } w \\text{ is a multiple of } 3\\}$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1156, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "606690fa-f540-43bc-a6c5-9189b00cd867": {"__data__": {"id_": "606690fa-f540-43bc-a6c5-9189b00cd867", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "53dbe867-ff8e-4766-bec3-82ceb839b2ae", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "a66ed61138c2f87837e733ec2ee7948f33f55bde9b908fe138b93bf37668bccc", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions (By Examples)\n\n* A regular expression expresses a language:\n * \\(01 \\cup 10\\)\n * \\(01 \\cup 10 = (\\{0\\} \\circ \\{1\\}) \\cup (\\{1\\} \\circ \\{0\\}) = \\{01\\} \\cup \\{10\\} = \\{01, 10\\}\\)\n * \\(0\\Sigma^*0 \\cup 1\\Sigma^*1 \\cup 0 \\cup 1\\)\n * \\(0\\Sigma^*0 = \\{0\\} \\circ \\Sigma^* \\circ \\{0\\}\\) is a set of all strings that start and end with 0\n * \\(1\\Sigma^*1\\) is a set of all strings that start and end with 1\n * \\(0\\Sigma^*0 \\cup 1\\Sigma^*1 \\cup 0 \\cup 1 = \\{ w \\mid w \\text{ starts and ends with the same symbol} \\}\\)\n * \\((0 \\cup \\varepsilon)1^*\\)\n * \\(0 \\cup \\varepsilon = \\{0\\} \\cup \\{\\varepsilon\\} = \\{0, \\varepsilon\\}\\)\n * \\(1^* = \\{\\varepsilon, 1, 11, 111, \\ldots\\}\\)\n * \\((0 \\cup \\varepsilon)1^* = \\{0, \\varepsilon\\} \\circ \\{\\varepsilon, 1, 11, 111, \\ldots\\}\\)\n * \\((0 \\cup \\varepsilon)1^* = \\{\\varepsilon, 0, 01, 011, \\ldots, 1, 11, 111, \\ldots\\}\\)\n * \\((0 \\cup \\varepsilon)1^* = 01^* \\cup 1^*\\)\n * \\((0 \\cup \\varepsilon)(1 \\cup \\varepsilon) = \\{0, \\varepsilon\\} \\circ \\{1, \\varepsilon\\} = \\{\\varepsilon, 0, 1, 01\\}\\)\n * \\(1^*\\emptyset = \\{1\\}^* \\circ \\emptyset = \\emptyset\\)\n * \\(\\emptyset^* = \\{\\varepsilon\\}\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1164, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "747b4f88-e0a2-4b3d-83b1-a628af1df150": {"__data__": {"id_": "747b4f88-e0a2-4b3d-83b1-a628af1df150", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fba38f01-4c6f-44a2-980c-196e7ca81b26", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "0e932856d50b38c3c655c645f2f4a1f8be385712ba415496769640511623a352", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Operator Precedences and Identities\n\n* Operator Precedences:\n - `*` has the highest precedence.\n - `\u222a` has the lowest precedence.\n\n* Some properties:\n - $$R \\cup \\emptyset = R$$ \n Adding the empty language to any other language will not change it\n - $$R \\circ \\varepsilon = R$$ \n Joining the empty string to any string will not change it\n - $$R \\cup \\{\\varepsilon\\} \\neq R$$ \n If $$R = \\{0, 1\\}, R \\cup \\{\\varepsilon\\} = \\{0, 1, \\varepsilon\\} \\neq R$$\n - $$R \\circ \\emptyset \\neq R$$ \n If $$R = \\{0, 1\\}, R \\circ \\emptyset = \\{0, 1\\} \\circ \\emptyset$$ \n $$\\{0, 1\\} \\circ = \\{xy \\mid x \\in \\{0, 1\\} \\text{ and } y \\in \\emptyset\\} = \\emptyset$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 671, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "158d60a9-2cb1-4bb7-ad16-fe7edaf6a03c": {"__data__": {"id_": "158d60a9-2cb1-4bb7-ad16-fe7edaf6a03c", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "418558c8-88f2-45b7-9d76-49d3c67ea76d", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "c0b3e7609600c2eb0d6059dd3efffdd6d2cd5cb06c898cc496ea7a00266df302", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example: Regular Expression\n\n* **Problem:** Write a program to evaluate a string representing a floating-point number\n * `72` \u219d true\n * `35.9` \u219d true\n * `20 67` \u219d false\n * `+7.` \u219d true\n * `71a3` \u219d false\n * `-.29` \u219d true\n\n* **Solution**\n * Create a DFA that recognize a set of all strings that are valid floating-point numbers and turn it into a program\n * It would be great if there is an easy way to do this\n * For now, can we create a regular expression that express the set of all valid floating-point representations?\n\n $$\n (+ \\cup - \\cup \\varepsilon)(D^{+} \\cup D^{+} . D^{*} \\cup D^{*} . D^{+})\n $$\n\n where \\( D = \\{0, 1, 2, \\ldots, 9\\} \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 663, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7aa6e472-c355-4fb6-857f-c2f67d407d01": {"__data__": {"id_": "7aa6e472-c355-4fb6-857f-c2f67d407d01", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c587750e-9ec3-48b3-b9f2-b450db98e029", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "1723e9cfef4509a164f4e712065e0f66b250d167d208254f3a803989f887bbee", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression and Finite Automata\n\n* Now we know that a regular expression can be used to express a language \n* **Question:** Is language expressed by a regular expression regular? \n - Let\u2019s try to prove that a regular expression expresses a regular language \n* Recall a regular expression: \n - A regular expression is defined **recursively** (those 6 rules) \n - So, we need to show that a regular expressions constructed from those rules expresses a regular language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 483, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dbbe38c3-bf2e-4108-bf15-c347dee401c4": {"__data__": {"id_": "dbbe38c3-bf2e-4108-bf15-c347dee401c4", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e881be5a-63d4-4f1b-a997-10fac13decea", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "db3b2b0c02eebcd2c59b33cd1851af8b853f071d91181e02be027faacd678f27", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Lemma 1.55\n\n* From rule 1: \\(a\\) for some \\(a\\) in the alphabet \\(\\Sigma\\) is a regular expression\n - We need to show that a language expressed by a regular expression generated from this rule is regular\n - Given a symbol \\(a \\in \\Sigma\\), according to this rule, \\(a\\) is a regular expression\n - \\(a\\) expresses the language \\(\\{a\\}\\)\n - Is \\(\\{a\\}\\) regular?\n - Can we construct a DFA that recognizes the language \\(\\{a\\}\\)?\n - This is an NFA that recognizes \\(\\{a\\}\\)\n\n \n\n\n \n \n\n\n \n\n \n\n\n \n
\\(a\\)
\\(q_1\\)\u2192\\(q_2\\)
\n\n* For every NFA, there is an equivalent DFA\n* Thus \\(\\{a\\}\\) is a regular language\n* Therefore, \\(a\\) expresses a regular language\n\n* A regular expression constructed by rule 1 expresses a regular language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 840, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "408c6a88-fd3f-48c9-9bd4-a59b52643002": {"__data__": {"id_": "408c6a88-fd3f-48c9-9bd4-a59b52643002", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d50c5b18-20d1-4d72-9666-c534ccfba462", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "837c96d10ad30929fb231917a8a643dcb3df60e35eded73f1ada18fd36a7f617", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Lamma 1.55\n\n* From rule 2: \\( \\varepsilon \\) is a regular expression\n - Again, we need to show that a language expressed by \\( \\varepsilon \\) is regular\n - Recall that \\( \\varepsilon \\) expresses the language \\(\\{\\varepsilon\\}\\)\n - Is \\(\\{\\varepsilon\\}\\) regular?\n - Can we construct a DFA that recognizes the language \\(\\{\\varepsilon\\}\\)?\n - This is an NFA that recognizes \\(\\{\\varepsilon\\}\\)\n\n \n\n\n \n \n\n \n
\n \n\n\n \n \n \n
q1
\n\n
\n\n - For every NFA, there is an equivalent DFA\n - Thus, \\(\\{\\varepsilon\\}\\) is a regular language\n - Therefore, \\( \\varepsilon \\) expresses a regular language\n\n* A regular expression constructed by rule 2 expresses a regular language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 817, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "08e345af-cf1a-4376-bc95-e1ce041ffa59": {"__data__": {"id_": "08e345af-cf1a-4376-bc95-e1ce041ffa59", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0cba35c9-da6c-48dd-b73c-684131dea98e", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "7439491767f199acb00c7abf0a906477e71f492c8f91d3929da1081c0b79f1c9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Lamma 1.55\n\n* From rule 3: \u2205 is a regular expression\n - Again, we need to show that a language expressed by \u2205 is regular\n - Recall that \u2205 expresses the language $\\{\\}$\n - Is $\\{\\}$ regular?\n - Can we construct a DFA that recognizes the language $\\{\\}$?\n - This is an NFA that recognizes $\\{\\}$\n\n \n\n\n \n \n \n
q
\n\n - For every NFA, there is an equivalent DFA\n - Thus, \u2205 is a regular language\n - Therefore, \u2205 expresses a regular language\n\n* A regular expression constructed by rule 3 expresses a regular language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 565, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8149ef63-c626-4ba9-8054-4a976acb6c70": {"__data__": {"id_": "8149ef63-c626-4ba9-8054-4a976acb6c70", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f77de622-da90-4b79-bc65-9e201d49e4c9", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "f656fd24e84579dcc7ce09bf9845f1e930cea6d2ef932c3326cce837ed4798ab", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Lemma 1.55\n\n* Recall that you cannot use rules 4, 5, and 6 to create a new regular expressions unless you already have some regular expressions created by rules 1, 2, or 3\n* We already prove that each regular expression created by rules 1, 2, or 3 expresses a regular language\n* For rule 4:\n - \\( R_1 \\) and \\( R_2 \\) are regular expressions that express regular languages (from rules 1, 2, or 3)\n - Recall that \\( R_1 = A \\) and \\( R_2 = B \\) for some languages \\( A \\) and \\( B \\), \n \\( R_1 \\cup R_2 = A \\cup B \\)\n - We already prove that if \\( A \\) and \\( B \\) are regular languages, \\( A \\cup B \\) is regular (regular language is closed under union operation)\n - Thus, a regular expression obtain by rule 4 express a regular language\n* Same for rules 5 and 6\n - Regular language is closed under concatenation and star operations", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 844, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "20632824-8363-4f70-8edf-a3eee67a88df": {"__data__": {"id_": "20632824-8363-4f70-8edf-a3eee67a88df", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "863d7868-1ee3-4f05-9c72-7f1d46d6b063", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "2999436c4bcf44955e99217fddd17bf90195aee99a50a19363744fe3269636e2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Lemma 1.55\n\n> **Lemma 1.55** \n> If a language is described by a regular expression, then it is regular.\n\n* We just proved the above lemma \n* By proving the above lemma, it gives us a tool to construct an NFA that recognizes the language expressed by a regular expression \n - Based on how we prove that regular language is closed under union, concatenation, and star operations", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 383, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fab85794-b25e-42fd-80a1-12ff155a0e75": {"__data__": {"id_": "fab85794-b25e-42fd-80a1-12ff155a0e75", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1ebe5d60-f409-4869-abad-ae26365cdfbf", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "369dd1695cb6d11d3b94f7111ec7535d2696df75975a5b1898fc61f29c55a141", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions to NFA\n\n* Suppose we want to construct an NFA that recognizes the language expressed by the regular expression \n $$(ab \\cup a)^*$$ \n where \n $$\\Sigma = \\{a, b\\}$$\n\n* We need to apply those 6 rules to obtain the regular expression \n - This will be a guideline step-by-step to construct an NFA\n\n* Here are steps to construct the regular expression $$(ab \\cup a)^*$$ \n 1. \\(a\\) is a regular expression (rule 1) \n 2. \\(b\\) is a regular expression (rule 1) \n 3. \\(ab\\) is a regular expression (rule 5 with (1) and (2)) \n 4. \\(ab \\cup a\\) is a regular expression (rule 4 with (3) and (1)) \n 5. \\((ab \\cup a)^*\\) is a regular expression (rule 6 with (4))", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 688, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "37c9f66a-a80b-4682-bbd1-50387e9a6a77": {"__data__": {"id_": "37c9f66a-a80b-4682-bbd1-50387e9a6a77", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ae3d3124-9227-44ba-8f9b-cecee8cc8e90", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "50e76f2ddc7f14a111edc5a329ea189ded0d4e6b029556fa009622d6f6963cc6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (ab \\cup a)^* $$ to an NFA.\n\n* a\n\n* b\n\n* ab\n\n* $$ ab \\cup a $$\n\n* $$ (ab \\cup a)^* $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 151, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "15e06973-1d82-438d-b49e-f9de36ee61e2": {"__data__": {"id_": "15e06973-1d82-438d-b49e-f9de36ee61e2", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c9158297-daf8-44a4-9e31-13e2b745892f", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "4559251253f675872405a6faef145a64e562960c298ef03b3a2902e6228014c5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression \\((ab \\cup a)^*\\) to an NFA.\n\n----\n\n### Step 1: NFA for \\(a\\)\n\n- A start state with an arrow pointing to it.\n- A transition labeled \\(a\\) to a double circle (accepting state).\n\n```\n(start) --a--> (accept)\n```\n\n----\n\n### Step 2: NFA for \\(b\\)\n\n- A start state with an arrow pointing to it.\n- A transition labeled \\(b\\) to a double circle (accepting state).\n\n```\n(start) --b--> (accept)\n```\n\n----\n\n### Step 3: NFA for \\(ab\\)\n\n- A start state with an arrow pointing to it.\n- A transition labeled \\(a\\) to an intermediate state.\n- A transition labeled \\(b\\) from the intermediate state to a double circle (accepting state).\n\n```\n(start) --a--> (state) --b--> (accept)\n```\n\n----\n\n### Step 4: NFA for \\(ab \\cup a\\)\n\n- Two branches from a new start state:\n - One branch for \\(ab\\) as above.\n - One branch for \\(a\\) as above.\n- Both branches lead to a new accepting state.\n\n----\n\n### Step 5: NFA for \\((ab \\cup a)^*\\)\n\n- Add a new start/accepting state.\n- Add epsilon transitions from this new state to the start of the NFA for \\(ab \\cup a\\).\n- Add epsilon transitions from the accepting states of \\(ab \\cup a\\) back to the new start/accepting state.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1281, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5312e1a3-76ba-4036-b69c-bf96300845e6": {"__data__": {"id_": "5312e1a3-76ba-4036-b69c-bf96300845e6", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2e64b9d1-c1a2-41c4-9ceb-84f483cebdb0", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "e4b45018a265af562ce0b8d84abf5743b069b74ba55dfd38ce57b6d35f7d0234", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (ab \\cup a)^* $$ to an NFA.\n\n----\n\n* For symbol **a**:\n\n (Diagram of an NFA with two states, an initial state with an arrow pointing to it, and a transition labeled \"a\" to a double circled accepting state.)\n\n* For symbol **b**:\n\n (Diagram of an NFA with two states, an initial state with an arrow pointing to it, and a transition labeled \"b\" to a double circled accepting state.)\n\n* For **ab**:\n\n (No diagram shown in the image, but presumably a concatenation of the above two NFAs.)\n\n* For $$ ab \\cup a $$:\n\n (No diagram shown in the image, but presumably a union of the NFAs for \"ab\" and \"a\".)\n\n* For $$ (ab \\cup a)^* $$:\n\n (No diagram shown in the image, but presumably the Kleene star applied to the union NFA.)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 860, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e80be110-19c2-42ba-b0cc-a1b73b00b842": {"__data__": {"id_": "e80be110-19c2-42ba-b0cc-a1b73b00b842", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e6b87de4-a158-4cd9-9322-300f432d0fe8", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "3531e4f1260cbfea19ce42065e5f94d03a514088167a2eee7e793b12ca39a7c6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $ (ab \\cup a)^* $ to an NFA.\n\n----\n\n### NFA for `a`\n\n- Start state \u2192 (circle) \u2014a\u2192 (double circle)\n\n### NFA for `b`\n\n- Start state \u2192 (circle) \u2014b\u2192 (double circle)\n\n### NFA for `ab`\n\n- Start state \u2192 (circle) \u2014a\u2192 (circle) \u2014b\u2192 (double circle)\n\n----\n\n### NFA for $ ab \\cup a $\n\n(Missing diagram, presumably combining the above NFAs with epsilon transitions for union)\n\n----\n\n### NFA for $ (ab \\cup a)^* $\n\n(Missing diagram, presumably adding star operation with epsilon transitions looping back)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 626, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9c54f287-5e66-40e8-9659-53c0b2d97e5a": {"__data__": {"id_": "9c54f287-5e66-40e8-9659-53c0b2d97e5a", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ecfc2bb7-15c6-4952-a843-21830b4d4653", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "43b2182fdbe6c85c1f64ac6b8f4677ea6e9a366130c6d3a37ef4e7bf7855734e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression \\((ab \\cup a)^*\\) to an NFA.\n\n* NFA for \\(a\\):\n\n (start) --a--> (accept)\n\n* NFA for \\(b\\):\n\n (start) --b--> (accept)\n\n* NFA for \\(ab\\):\n\n (start) --a--> (intermediate) --b--> (accept)\n\n* NFA for \\(ab \\cup a\\):\n\n (start) \n \u2199 \u2198 \n NFA for \\(ab\\) NFA for \\(a\\) \n (both leading to accept states)\n\n* NFA for \\((ab \\cup a)^*\\):\n\n (start) --\u03b5--> (NFA for \\(ab \\cup a\\)) --\u03b5--> (accept) \n with loops and \u03b5-transitions to allow repetition and empty string\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 604, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b7ae6035-c87a-4955-821f-dc4a5d75a757": {"__data__": {"id_": "b7ae6035-c87a-4955-821f-dc4a5d75a757", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "abd01412-a2a5-4888-ab54-d9db0e07d473", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "66f4f0fbf7374dbf1bd0cdc045af457b8e47a98039e3989f8d7c885ff1223fcc", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (ab \\cup a)^* $$ to an NFA.\n\n----\n\n### NFA for `a`\n\n- Start state \u2192 (a) \u2192 Accept state\n\n### NFA for `b`\n\n- Start state \u2192 (b) \u2192 Accept state\n\n### NFA for `ab`\n\n- Start state \u2192 (a) \u2192 Accept state \u2192\u03b5\u2192 (next state) \u2192 (b) \u2192 Accept state\n\n----\n\n### NFA for $$ ab \\cup a $$\n\n*(Not fully drawn in the image, but implied to be a union of the above NFAs for `ab` and `a`)*\n\n----\n\n### NFA for $$ (ab \\cup a)^* $$\n\n*(Not fully drawn in the image, but implied to be the Kleene star applied to the union NFA)*\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 635, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "14ec1988-cadc-4a9d-871e-e8ca9ef2a9c5": {"__data__": {"id_": "14ec1988-cadc-4a9d-871e-e8ca9ef2a9c5", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9c5efe40-56b8-488b-9dbc-d097c4258d68", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "e7f5e586b548153eba3380e83129d8fbab61a096a6654030d553a9e84506e84e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression \\((ab \\cup a)^*\\) to an NFA.\n\n----\n\n### NFA for `a`\n\n- Start state \u2192 (a) \u2192 Accept state\n\n### NFA for `b`\n\n- Start state \u2192 (b) \u2192 Accept state\n\n### NFA for `ab`\n\n- Start state \u2192 (a) \u2192 \u03b5-transition \u2192 (b) \u2192 Accept state\n\n----\n\n### NFA for \\(ab \\cup a\\)\n\n- This is the union of the two NFAs for `ab` and `a`.\n\n----\n\n### NFA for \\((ab \\cup a)^*\\)\n\n- This is the Kleene star applied to the union NFA above.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 536, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "282bccf3-bb38-419b-b50f-ee9038aa356a": {"__data__": {"id_": "282bccf3-bb38-419b-b50f-ee9038aa356a", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "cc5aebbf-45ea-4b83-99f3-fff6be1134aa", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "6409f47f95dd6b604320468f640b9bf20b7b4956b56fd6de0ca78c0e803c1e80", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression \\((ab \\cup a)^*\\) to an NFA.\n\n----\n\n### NFA for `a`\n\n- Start state \u2192 (circle) \u2014a\u2192 (double circle)\n\n### NFA for `b`\n\n- Start state \u2192 (circle) \u2014b\u2192 (double circle)\n\n### NFA for `ab`\n\n- Start state \u2192 (circle) \u2014a\u2192 (circle) \u2014\u03b5\u2192 (circle) \u2014b\u2192 (double circle)\n\n### NFA for \\(ab \\cup a\\)\n\n- Start state \u2192 (circle) \u2014a\u2192 (circle) \u2014\u03b5\u2192 (circle) \u2014b\u2192 (double circle)\n- Also includes the NFA for `a` as above (implied union)\n\n----\n\n### NFA for \\((ab \\cup a)^*\\)\n\n- (Not fully drawn in the image, but implied as the Kleene star applied to the union NFA above)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 677, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "51c8feb3-82b1-42fd-abb6-0ccc4087b037": {"__data__": {"id_": "51c8feb3-82b1-42fd-abb6-0ccc4087b037", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e2e91905-2d15-4b55-99df-347d83fca3c3", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "e03467bb3fa646c63b0b5f450ffc428b6d0eb452ea63988a2d99102501bf418e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (ab \\cup a)^* $$ to an NFA.\n\n\n \n \n \n \n \n \n \n \n \n\n \n \n\n \n\n \n \n\n \n\n \n \n\n \n\n\n \n \n\n \n \n \n \n
ExpressionNFA Diagram Description
a\n Start state → (a) → double circle (accepting state)\n
b\n Start state → (b) → double circle (accepting state)\n
ab\n Start state → (a) → (\u03b5) → (b) → double circle (accepting state)\n
ab \u222a a\n Start state → (a) → (\u03b5) → (b) → double circle (accepting state)\n \n Start state → (a) → double circle (accepting state)\n
$$ (ab \\cup a)^* $$\n (Diagram not fully shown, but implies the Kleene star applied to the union of \"ab\" and \"a\")\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1163, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "74e730ee-cd69-4dea-bca1-b54c34843a63": {"__data__": {"id_": "74e730ee-cd69-4dea-bca1-b54c34843a63", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fd7e1852-c001-4a86-9e09-d4121cee3ee4", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "c7ef1d384045c08c7197e27e469a00a06b45301b270ff62a6612b4038ba186df", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (ab \\cup a)^* $$ to an NFA.\n\n\n \n \n \n \n \n \n \n \n \n\n \n \n\n \n\n \n \n\n \n\n \n \n\n \n\n\n \n \n \n
ExpressionNFA Diagram
a\n \u25cb --a--> \u25ce\n
b\n \u25cb --b--> \u25ce\n
ab\n \u25cb --a--> \u25cb --\u03b5--> \u25cb --b--> \u25ce\n
ab \u222a a\n \u25cb --\u03b5--> \u25cb --a--> \u25cb --\u03b5--> \u25cb --b--> \u25ce\n \n \u25cb --\u03b5--> \u25cb --a--> \u25ce\n
\n\n* The final NFA for $$ (ab \\cup a)^* $$ is constructed by applying the Kleene star to the above NFA.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu | Finite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 897, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4243b66a-f986-49a0-b011-80bc8d4afb8e": {"__data__": {"id_": "4243b66a-f986-49a0-b011-80bc8d4afb8e", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a94cf763-fe6d-4566-862a-410f8b003402", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "4a71079cd9afda96eb8d9dba2a9298b781ca167944ea25ac0f21007b933ca4d8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $ (ab \\cup a)^* $ to an NFA.\n\n----\n\n### NFA for `a`\n\n- Start state \u2192 (a) \u2192 Accept state\n\n### NFA for `b`\n\n- Start state \u2192 (b) \u2192 Accept state\n\n### NFA for `ab`\n\n- Start state \u2192 (a) \u2192 \u03b5 \u2192 (b) \u2192 Accept state\n\n### NFA for `ab \\cup a`\n\n- Start state\n - \u03b5 \u2192 (a) \u2192 \u03b5 \u2192 (b) \u2192 Accept state\n - \u03b5 \u2192 (a) \u2192 Accept state\n\n### NFA for $(ab \\cup a)^*$\n\n- Start state\n - \u03b5 \u2192 (a) \u2192 \u03b5 \u2192 (b) \u2192 Accept state\n - \u03b5 \u2192 (a) \u2192 Accept state\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 553, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "13b1e20f-33e4-412e-a321-883f3ce20ed3": {"__data__": {"id_": "13b1e20f-33e4-412e-a321-883f3ce20ed3", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "09b608c2-3577-4bab-bf3e-3a03bb544e46", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "35798eca427bb6dc8670b5bad0bdc48fa78c28979ad86f0566d1f92a58788a8d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $ (ab \\cup a)^* $ to an NFA.\n\n----\n\n### NFA for `a`\n- Start state \u2192 (a) \u2192 Accept state\n\n### NFA for `b`\n- Start state \u2192 (b) \u2192 Accept state\n\n### NFA for `ab`\n- Start state \u2192 (a) \u2192 \u03b5 \u2192 ( ) \u2192 (b) \u2192 Accept state\n\n### NFA for `ab \\cup a`\n- Start state \u2192 \u03b5 \u2192 (a) \u2192 \u03b5 \u2192 ( ) \u2192 (b) \u2192 Accept state\n- Start state \u2192 \u03b5 \u2192 (a) \u2192 Accept state\n\n### NFA for $(ab \\cup a)^*$\n- Start state (accepting) \u2192 \u03b5 \u2192 (start of `ab \\cup a` NFA)\n - \u03b5 \u2192 (a) \u2192 \u03b5 \u2192 ( ) \u2192 (b) \u2192 Accept state\n - \u03b5 \u2192 (a) \u2192 Accept state\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 621, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "907d84ae-2ee9-4d8d-8ee9-09be239c6cf1": {"__data__": {"id_": "907d84ae-2ee9-4d8d-8ee9-09be239c6cf1", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5a6a7bc1-484f-4e11-a4a0-107029a66dab", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "c7506400eaf108a0215fe1da67ff8dd455736132db472db07245db9944e325b1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (ab \\cup a)^* $$ to an NFA.\n\n----\n\n- NFA for **a**:\n\n (start) --a--> (accept)\n\n- NFA for **b**:\n\n (start) --b--> (accept)\n\n- NFA for **ab**:\n\n (start) --a--> (state) --\u03b5--> (state) --b--> (accept)\n\n- NFA for **ab \u222a a**:\n\n (start) --\u03b5--> (NFA for ab) \n (start) --\u03b5--> (NFA for a)\n\n- NFA for **(ab \u222a a)\\***:\n\n (start, accept) --\u03b5--> (state) --\u03b5--> (NFA for ab) \n (state) --\u03b5--> (NFA for a) \n (NFA for ab) --\u03b5--> (state) \n (NFA for a) --\u03b5--> (state) \n (state) --\u03b5--> (start, accept)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 634, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5503f188-0cae-411d-9af9-847ab0174b2f": {"__data__": {"id_": "5503f188-0cae-411d-9af9-847ab0174b2f", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9ec3b70a-384a-4198-91a9-663c1bddfa62", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "9ac4d6122f7adc64de012f5014ffbddec1d6c878ccbb181c9a388b4ac5797a6e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expressions to NFA\n\n* Suppose we want to construct an NFA that recognizes the language expressed by the regular expression \n $$(a \\cup b)^* aba$$ \n where $$\\Sigma = \\{a, b\\}$$\n* Again, we need to apply those 6 rules to get a guideline\n* Here are steps to construct the regular expression $$(a \\cup b)^* aba$$\n 1. \\(a\\) is a regular expression (rule 1)\n 2. \\(b\\) is a regular expression (rule 1)\n 3. \\(a \\cup b\\) is a regular expression (rule 4 with (1) and (2))\n 4. \\((a \\cup b)^*\\) is a regular expression (rule 6 with (3))\n 5. \\(ab\\) is a regular expression (rule 5 with (1) and (2))\n 6. \\(aba\\) is a regular expression (rule 5 with (5) and (1))\n 7. \\((a \\cup b)^* aba\\) is a regular expression (rule 5 with (4) and (6))", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 744, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4d164f9c-d54b-483f-a407-f4fe77c1497e": {"__data__": {"id_": "4d164f9c-d54b-483f-a407-f4fe77c1497e", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8ae4db16-e834-4b63-aec6-9011df4709ee", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "6f58884d687eefc9ac06ed1eb0bdbcf476c41b5900ce9b113b9f96c4b3c08aac", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $ (a \\cup b)^* aba $ to an NFA.\n\n* a\n\n* b\n\n* $a \\cup b$\n\n* $(a \\cup b)^*$\n\n* $aba$\n\n* $(a \\cup b)^* aba$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 167, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5b151807-7f0f-4714-bcbc-2dddac11f51e": {"__data__": {"id_": "5b151807-7f0f-4714-bcbc-2dddac11f51e", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "663b1118-ae46-4bb4-b163-08946d6a6b1c", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "eb55ec986a7c2bed3aa5d198ca4f1df87fe9466a6ca90e17bf900468c2bd15c2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $ (a \\cup b)^* aba $ to an NFA.\n\n* Diagram components shown in the image:\n\n - NFA for symbol `a`:\n \n (start) --a--> (accept)\n \n - NFA for symbol `b`:\n \n (start) --b--> (accept)\n \n - NFA for union $a \\cup b$:\n \n ```\n (start)\n | \\\n a b\n | \\\n (accept)\n ```\n \n - NFA for Kleene star $(a \\cup b)^*$:\n \n ```\n (start) --\u03b5--> (a \u222a b NFA) --\u03b5--> (accept)\n ^ |\n |--------------------------------|\n ```\n \n - NFA for concatenation $aba$:\n \n ```\n (start) --a--> --b--> --a--> (accept)\n ```\n \n - Final NFA for $(a \\cup b)^* aba$:\n \n ```\n (start) --(a \u222a b)^*--> --a--> --b--> --a--> (accept)\n ```\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 839, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8cfb7d45-d5a3-4bd9-bdef-6a0dc01a716a": {"__data__": {"id_": "8cfb7d45-d5a3-4bd9-bdef-6a0dc01a716a", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e7a0c189-4d0a-4efc-b233-349b6ab3c921", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "961298b66681486f527a9c18c76ec72cb2b2f1d1f8b5ab9bb46c9749b74e5462", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (a \\cup b)^* aba $$ to an NFA.\n\n* NFA for symbol **a**:\n\n (start) --a--> (accept)\n\n* NFA for symbol **b**:\n\n (start) --b--> (accept)\n\n* NFA for $$ a \\cup b $$:\n\n```mermaid\nstateDiagram-v2\n [*] --> S0\n S0 --> S1: a\n S0 --> S2: b\n S1 --> [*]\n S2 --> [*]\n```\n\n* NFA for $$ (a \\cup b)^* $$:\n\n```mermaid\nstateDiagram-v2\n [*] --> S0\n S0 --> S1: a\n S0 --> S2: b\n S1 --> S0\n S2 --> S0\n S0 --> [*]\n```\n\n* NFA for $$ aba $$:\n\n```mermaid\nstateDiagram-v2\n [*] --> S0\n S0 --> S1: a\n S1 --> S2: b\n S2 --> S3: a\n S3 --> [*]\n```\n\n* NFA for $$ (a \\cup b)^* aba $$:\n\n```mermaid\nstateDiagram-v2\n [*] --> S0\n S0 --> S1: a\n S0 --> S2: b\n S1 --> S0\n S2 --> S0\n S0 --> S3: a\n S3 --> S4: b\n S4 --> S5: a\n S5 --> [*]\n```\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 912, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e5cb788e-d634-4036-894b-bf41c5e5f0fb": {"__data__": {"id_": "e5cb788e-d634-4036-894b-bf41c5e5f0fb", "embedding": null, "metadata": {"page_number": 37, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e49e07c8-fa6d-43d7-bfe5-5ba466d699af", "node_type": "4", "metadata": {"page_number": 37, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "7d8ea44f577c9f11374b45219d976f3c40e949b3cededae3e4e38be246f8c1a3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $ (a \\cup b)^* aba $ to an NFA.\n\n----\n\n### Step 1: NFA for individual symbols\n\n- For symbol `a`:\n\n ( ) \u2014a\u2192 (\u2299)\n\n- For symbol `b`:\n\n ( ) \u2014b\u2192 (\u2299)\n\n----\n\n### Step 2: NFA for union $a \\cup b$\n\n- Combine the above two NFAs for `a` and `b` into one NFA for $a \\cup b$:\n\n ( ) \u2014a\u2192 (\u2299) \n ( ) \u2014b\u2192 (\u2299)\n\n----\n\n### Step 3: NFA for Kleene star $(a \\cup b)^*$\n\n- Construct the NFA for $(a \\cup b)^*$ based on the union NFA.\n\n----\n\n### Step 4: NFA for concatenation $aba$\n\n- Construct the NFA for the sequence `aba`.\n\n----\n\n### Step 5: Final NFA for $(a \\cup b)^* aba$\n\n- Concatenate the NFA for $(a \\cup b)^*$ with the NFA for `aba`.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 760, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4365179e-5f3f-413c-8298-c317e4f6b258": {"__data__": {"id_": "4365179e-5f3f-413c-8298-c317e4f6b258", "embedding": null, "metadata": {"page_number": 38, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6afb2918-29ff-45a0-a112-5c1e52ad55f8", "node_type": "4", "metadata": {"page_number": 38, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "3aa1e5f5827a0616458cb5588bbae4476a1f060b0aaa7efb8c2033df8a657d17", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (a \\cup b)^* aba $$ to an NFA.\n\n* Automata for single characters:\n\n - For **a**:\n\n \n\n\n \n \n\n\n\n \n
\u2192\u25cba\u25cb\u25cf
\n\n - For **b**:\n\n \n\n\n \n \n\n\n\n \n
\u2192\u25cbb\u25cb\u25cf
\n\n* Automata for union \\(a \\cup b\\):\n\n \n\n\n \n \n\n\n\n \n\n \n\n\n\n \n
\u2192\u25cba\u25cb\u25cf
\u2192\u25cbb\u25cb\u25cf
\n\n* Automata for \\((a \\cup b)^*\\)\n\n* Automata for **aba**\n\n* Automata for \\((a \\cup b)^* aba\\)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 735, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9c25c837-77f6-4484-ace7-83bcf13359b2": {"__data__": {"id_": "9c25c837-77f6-4484-ace7-83bcf13359b2", "embedding": null, "metadata": {"page_number": 39, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7e2cd070-64de-47c6-9c59-08abdadc6e09", "node_type": "4", "metadata": {"page_number": 39, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "cc2015839963d9dfd66b3d41183dedc3c1e29491341e3e65925db646c6af6f75", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $ (a \\cup b)^* aba $ to an NFA.\n\n----\n\n### NFA for `a`\n\n- Start state \u2192 (circle) \u2014a\u2192 (double circle)\n\n### NFA for `b`\n\n- Start state \u2192 (circle) \u2014b\u2192 (double circle)\n\n### NFA for `a \\cup b`\n\n- Start state \u2192 (circle) \u2014\u03b5\u2192 (circle) \u2014a\u2192 (double circle)\n- Start state \u2192 (circle) \u2014\u03b5\u2192 (circle) \u2014b\u2192 (double circle)\n\n----\n\n### NFA for $(a \\cup b)^*$\n\n*(Diagram not fully shown, but implies Kleene star construction on the union NFA)*\n\n----\n\n### NFA for `aba`\n\n*(Diagram not shown, but implies concatenation of a, b, a transitions)*\n\n----\n\n### NFA for $(a \\cup b)^* aba$\n\n*(Final NFA combining the Kleene star of union with the concatenation aba)*\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 772, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3a5e9ce1-f4bf-4d32-b294-55e1ca70dcea": {"__data__": {"id_": "3a5e9ce1-f4bf-4d32-b294-55e1ca70dcea", "embedding": null, "metadata": {"page_number": 40, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "466e5638-cb89-40c1-aae6-8b70d4e32850", "node_type": "4", "metadata": {"page_number": 40, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "1c7bb284ef4a077b5c95f83743c7bde02ae8b4fe6480a1de9486cf7e63ebdc08", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (a \\cup b)^* aba $$ to an NFA.\n\n----\n\n### NFA for symbol `a`\n\n- (start) \u2192 (state) \u2014a\u2192 (accepting state)\n\n### NFA for symbol `b`\n\n- (start) \u2192 (state) \u2014b\u2192 (accepting state)\n\n----\n\n### NFA for union \\(a \\cup b\\)\n\n- (start) \u2014\u03b5\u2192 (state) \u2014a\u2192 (accepting state)\n- (start) \u2014\u03b5\u2192 (state) \u2014b\u2192 (accepting state)\n\n----\n\n### NFA for Kleene star \\((a \\cup b)^*\\)\n\n- (start) \u2014\u03b5\u2192 (state) \u2014a\u2192 (accepting state)\n- (start) \u2014\u03b5\u2192 (state) \u2014b\u2192 (accepting state)\n- (accepting states) have \u03b5-transitions back to (start) to allow repetition\n\n----\n\n### NFA for concatenation `aba`\n\n- (start) \u2014a\u2192 (state) \u2014b\u2192 (state) \u2014a\u2192 (accepting state)\n\n----\n\n### NFA for full expression \\((a \\cup b)^* aba\\)\n\n- Combine the NFA for \\((a \\cup b)^*\\) followed by the NFA for `aba` in sequence.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 885, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fe1eca56-8850-4f09-bd4b-025ccd7d7e7a": {"__data__": {"id_": "fe1eca56-8850-4f09-bd4b-025ccd7d7e7a", "embedding": null, "metadata": {"page_number": 41, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "92e08c50-d71b-465b-b044-385d76199562", "node_type": "4", "metadata": {"page_number": 41, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "234c1e08cd0ad19a810f1d9cced7efe385ad0f54b35b39c99f60c9be3fb68e99", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (a \\cup b)^* aba $$ to an NFA.\n\n----\n\n### NFA for symbol `a`\n\n- Start state \u2192 (on input `a`) \u2192 Accept state\n\n### NFA for symbol `b`\n\n- Start state \u2192 (on input `b`) \u2192 Accept state\n\n----\n\n### NFA for union \\(a \\cup b\\)\n\n- Start state \u2192 (\u03b5) \u2192 state for `a` \u2192 Accept state\n- Start state \u2192 (\u03b5) \u2192 state for `b` \u2192 Accept state\n\n----\n\n### NFA for Kleene star \\((a \\cup b)^*\\)\n\n- Start state (also accept state) \u2192 (\u03b5) \u2192 union NFA start state\n- Union NFA start state \u2192 (\u03b5) \u2192 state for `a` \u2192 Accept state\n- Union NFA start state \u2192 (\u03b5) \u2192 state for `b` \u2192 Accept state\n- Accept states of `a` and `b` \u2192 (\u03b5) \u2192 union NFA start state (loop back)\n\n----\n\n### NFA for concatenation `aba`\n\n- Start state \u2192 (on input `a`) \u2192 state \u2192 (on input `b`) \u2192 state \u2192 (on input `a`) \u2192 Accept state\n\n----\n\n### Final NFA for \\((a \\cup b)^* aba\\)\n\n- Concatenate the NFA for \\((a \\cup b)^*\\) with the NFA for `aba` in sequence.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1029, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4f59d11a-e974-40bc-b0ce-92426e2931a5": {"__data__": {"id_": "4f59d11a-e974-40bc-b0ce-92426e2931a5", "embedding": null, "metadata": {"page_number": 42, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d9a6cdc6-aa63-4e03-bfac-55f337cc53bd", "node_type": "4", "metadata": {"page_number": 42, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "d063b691f292623050766ccba7eda1c0b0e0a3648604e0a1c9aa08fdf571d28c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (a \\cup b)^* aba $$ to an NFA.\n\n----\n\n### NFA for symbol `a`\n\n(o) --a--> ((o))\n\n----\n\n### NFA for symbol `b`\n\n(o) --b--> ((o))\n\n----\n\n### NFA for union \\(a \\cup b\\)\n\n(o) --\u03b5--> (o) --a--> ((o))", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 259, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "83c7e97e-5bf0-4fc1-89db-e9b58f9f631f": {"__data__": {"id_": "83c7e97e-5bf0-4fc1-89db-e9b58f9f631f", "embedding": null, "metadata": {"page_number": 43, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "02ceb922-196e-4b77-bd0c-ddc4fdff10f4", "node_type": "4", "metadata": {"page_number": 43, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "a25a2bacfe76a32e4db0b5a6b56d194ad81bfd61d76c9cd21ef465c3d51a8243", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (a \\cup b)^* aba $$ to an NFA.\n\nThe construction is shown step-by-step:\n\n- NFA for symbol `a`:\n\n (start) --a--> (accept)\n\n- NFA for symbol `b`:\n\n (start) --b--> (accept)\n\n- NFA for union \\(a \\cup b\\):\n\n (start) --\u03b5--> (state) --a--> (accept) \n (start) --\u03b5--> (state) --b--> (accept)\n\n- NFA for Kleene star \\((a \\cup b)^*\\):\n\n (start, accept) --\u03b5--> (state) --a--> (accept) \n (start) --\u03b5--> (state) --b--> (accept) \n (accept) --\u03b5--> (start) \n (start) --\u03b5--> (accept)\n\n- NFA for concatenation `aba`:\n\n (start) --a--> (state) --\u03b5--> (state) --b--> (state) --\u03b5--> (state) --a--> (accept)\n\n- Final NFA for \\((a \\cup b)^* aba\\):\n\n Concatenate the NFA for \\((a \\cup b)^*\\) with the NFA for `aba`.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 843, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3e5c864f-81ad-4b67-86b0-bbf441b39054": {"__data__": {"id_": "3e5c864f-81ad-4b67-86b0-bbf441b39054", "embedding": null, "metadata": {"page_number": 44, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f1c8d298-ef17-431f-8f56-2836c26e0fe9", "node_type": "4", "metadata": {"page_number": 44, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "e60c4bf352e94568c1a854b44dbde447b07d33c0563f3c4686e54adaddb99abb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $$ (a \\cup b)^* aba $$ to an NFA.\n\n----\n\n### NFA for symbol `a`\n\n- Start state \u2192 (on input `a`) \u2192 Accept state\n\n### NFA for symbol `b`\n\n- Start state \u2192 (on input `b`) \u2192 Accept state\n\n----\n\n### NFA for union \\(a \\cup b\\)\n\n- Start state \u2192 (\u03b5) \u2192 state for `a` \u2192 Accept state\n- Start state \u2192 (\u03b5) \u2192 state for `b` \u2192 Accept state\n\n----\n\n### NFA for Kleene star \\((a \\cup b)^*\\)\n\n- Start state (also accept state)\n- \u03b5-transition to union NFA start state\n- From union NFA accept states, \u03b5-transition back to union NFA start state and to the overall accept state\n\n----\n\n### NFA for concatenation `aba`\n\n- Start state \u2192 (on `a`) \u2192 state \u2192 (\u03b5) \u2192 state \u2192 (on `b`) \u2192 state \u2192 (\u03b5) \u2192 state \u2192 (on `a`) \u2192 Accept state\n\n----\n\n### Final NFA for \\((a \\cup b)^* aba\\)\n\n- Start state (also accept state)\n- \u03b5-transition to Kleene star NFA start state\n- From Kleene star NFA accept states, \u03b5-transition back to Kleene star NFA start state and to the concatenation NFA start state for `aba`\n- Concatenation NFA for `aba` as above\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1139, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bc9e6995-a6b4-4297-b953-826146df086b": {"__data__": {"id_": "bc9e6995-a6b4-4297-b953-826146df086b", "embedding": null, "metadata": {"page_number": 45, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d5680555-aadb-4a8e-848f-561df3f363dd", "node_type": "4", "metadata": {"page_number": 45, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "f0e1ffc5f1e0376ee800472f5b12d85fe6c4b98f6a0f0f9bca6947d45e5af392", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression $ (a \\cup b)^* aba $ to an NFA.\n\n----\n\n### NFA for symbol `a`\n- (start) --a--> (accept)\n\n### NFA for symbol `b`\n- (start) --b--> (accept)\n\n### NFA for union $a \\cup b$\n- (start) --\u03b5--> (state1) --a--> (accept)\n- (start) --\u03b5--> (state2) --b--> (accept)\n\n### NFA for Kleene star $(a \\cup b)^*$\n- (start, accept) --\u03b5--> (state)\n- (state) --\u03b5--> (state1) --a--> (accept1)\n- (state) --\u03b5--> (state2) --b--> (accept2)\n- (accept1) --\u03b5--> (state)\n- (accept2) --\u03b5--> (state)\n\n### NFA for concatenation `aba`\n- (start) --a--> (state1) --\u03b5--> (state2) --b--> (state3) --\u03b5--> (state4) --a--> (accept)\n\n### NFA for full expression $(a \\cup b)^* aba$\n- (start, accept) --\u03b5--> (state)\n- (state) --\u03b5--> (state1) --a--> (accept1)\n- (state) --\u03b5--> (state2) --b--> (accept2)\n- (accept1) --\u03b5--> (state)\n- (accept2) --\u03b5--> (state)\n- (accept) --a--> (state1) --\u03b5--> (state2) --b--> (state3) --\u03b5--> (state4) --a--> (accept)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1036, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4bb432bb-0036-4fb8-b191-a93268da5a7b": {"__data__": {"id_": "4bb432bb-0036-4fb8-b191-a93268da5a7b", "embedding": null, "metadata": {"page_number": 46, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ec1bb5c9-11a4-4c14-a876-01b8e1173080", "node_type": "4", "metadata": {"page_number": 46, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "14f3d5f87ee1a4999931b85ea0ee177702b38976f30061acac6b0c7ea0d92198", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression \n $$(a \\cup b)^* aba$$ \n to an NFA.\n\n----\n\n### NFA for symbol `a`\n\n- Start state \u2192 (on input `a`) \u2192 Accept state\n\n### NFA for symbol `b`\n\n- Start state \u2192 (on input `b`) \u2192 Accept state\n\n----\n\n### NFA for union \\(a \\cup b\\)\n\n- Start state \u2192 (\u03b5) \u2192 state with transition `a` \u2192 accept state \n- Start state \u2192 (\u03b5) \u2192 state with transition `b` \u2192 accept state\n\n----\n\n### NFA for Kleene star \\((a \\cup b)^*\\)\n\n- Start state (also accept state) \u2192 (\u03b5) \u2192 state with two \u03b5-transitions: \n - one to NFA for `a` \n - one to NFA for `b` \n- Both `a` and `b` states transition to their respective accept states \n- Accept states have \u03b5-transitions back to the start of the union NFA and to the overall accept state\n\n----\n\n### NFA for concatenation `aba`\n\n- Start state \u2192 (on `a`) \u2192 state \u2192 (\u03b5) \u2192 state \u2192 (on `b`) \u2192 state \u2192 (\u03b5) \u2192 state \u2192 (on `a`) \u2192 accept state\n\n----\n\n### Final NFA for \\((a \\cup b)^* aba\\)\n\n- Start state (also accept state) \u2192 (\u03b5) \u2192 NFA for \\((a \\cup b)^*\\) \n- NFA for \\((a \\cup b)^*\\) has \u03b5-transitions to NFA for `a` and `b` as above \n- From the accept state of \\((a \\cup b)^*\\), \u03b5-transition to the start of NFA for `aba` \n- NFA for `aba` as described above \n- Accept state at the end of `aba`\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1342, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "27c87490-8903-4584-91e9-0b20309c8153": {"__data__": {"id_": "27c87490-8903-4584-91e9-0b20309c8153", "embedding": null, "metadata": {"page_number": 47, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "14924ae2-a3e0-4214-aff8-6d7ca98b05ec", "node_type": "4", "metadata": {"page_number": 47, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "ee471815c0b8a4dfb6cad914370d66117222541a1e5c97ff7bbd9d94214d2b50", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Expression to NFA\n\n* Convert the regular expression \n $$(a \\cup b)^* aba$$ \n to an NFA.\n\n----\n\n- NFA for symbol **a**:\n\n (start) --a--> (accept)\n\n- NFA for symbol **b**:\n\n (start) --b--> (accept)\n\n----\n\n- NFA for union **a \u222a b**:\n\n (start) --\u03b5--> (state) --a--> (accept) \n (start) --\u03b5--> (state) --b--> (accept)\n\n----\n\n- NFA for Kleene star **(a \u222a b)\\***:\n\n (start, accept) --\u03b5--> (state) \n (state) --\u03b5--> (state) --a--> (accept) \n (state) --\u03b5--> (state) --b--> (accept) \n (accept) --\u03b5--> (start, accept)\n\n----\n\n- NFA for concatenation **aba**:\n\n (start) --a--> (state) --\u03b5--> (state) --b--> (state) --\u03b5--> (state) --a--> (accept)\n\n----\n\n- NFA for full expression **(a \u222a b)^* aba**:\n\n (start) --\u03b5--> (state) \n (state) --\u03b5--> (state) --a--> (accept) \n (state) --\u03b5--> (state) --b--> (accept) \n (accept) --\u03b5--> (state) --a--> (state) --\u03b5--> (state) --b--> (state) --\u03b5--> (state) --a--> (accept)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 04", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1000, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "480243ec-e1e0-4398-9e00-d017797b6b28": {"__data__": {"id_": "480243ec-e1e0-4398-9e00-d017797b6b28", "embedding": null, "metadata": {"page_number": 48, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "52baa816-2fe8-40e5-8a39-b5f4cf652398", "node_type": "4", "metadata": {"page_number": 48, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "691ce43542a2c24e930b62724d8cecf26f9321b59e7737fabadfda145cdc9d6c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Useful Tool\n\n* Recall that the set of all valid floating-point representation is expressed by a regular expression\n\n$$\n(+ \\cup - \\cup \\varepsilon)(D^{+} \\cup D^{+}.D^{*} \\cup D^{*}.D^{+})\n$$\n\nwhere \n* \\( D = \\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\\} \\)\n\n* Now, we can easily convert the above regular expression into an NFA, construct an equivalent DFA, and turn the DFA into a program \n - This process is done by computer \n - Often used in compiler", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 448, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4c5fd6e1-d7da-4f95-8906-68dbe58cab01": {"__data__": {"id_": "4c5fd6e1-d7da-4f95-8906-68dbe58cab01", "embedding": null, "metadata": {"page_number": 49, "file_name": "data/finite_automata_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "18804887-8c4a-4b35-ab3b-a9dfd1dc5514", "node_type": "4", "metadata": {"page_number": 49, "file_name": "data/finite_automata_04_handout.pdf"}, "hash": "6c7176dda93216a6415d57df0cbcbe0e6a1b997710052a084341b6a826e5a549", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Conclusion\n\n* A regular expression expresses a regular language \n* We have a tool to convert a regular expression into an equivalent NFA \n* What is next? \n - We still do not know whether every regular language can be expressed by a regular expression", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 257, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2600ac1f-ffb8-4399-a063-6f84fe276171": {"__data__": {"id_": "2600ac1f-ffb8-4399-a063-6f84fe276171", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b1386fb6-85ad-4fab-93b0-ed37d18f9451", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "6fee2cf05a776496b13c8b3ed159c37a793a362471ab244e4e804791ca7a6206", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L14 Dynamic Modeling\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 157, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b6c4ed74-24a8-46b8-ad0a-14801321d1ab": {"__data__": {"id_": "b6c4ed74-24a8-46b8-ad0a-14801321d1ab", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ce49c018-3db7-4d65-9830-422c565a4817", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "ffeab17bfd67aec32881b660864fbbf87f92764877cd09bf4b7d33d858ddaead", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet.\n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes.\n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n* Material from these notes is obtained from various sources, including, but not limited to, the following:\n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994.\n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011.\n - http://scrum.org/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1362, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6e08f00b-6b41-4dff-acfb-6ffb4b3ae436": {"__data__": {"id_": "6e08f00b-6b41-4dff-acfb-6ffb4b3ae436", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "00161289-efef-4d60-b690-5ff8816fae25", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "9732273dfeb3edccb4ee4e1ce2ebcd215314f87964c01e15bd187cf6a0b49c28", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You can model an UML activity diagram \n* You can model an UML state chart diagram \n* You understand the purpose of a UML communication diagram", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 165, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "56400739-3c26-44c0-8bd2-7142c261ba75": {"__data__": {"id_": "56400739-3c26-44c0-8bd2-7142c261ba75", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "88d5f645-9e47-4148-84c0-be27114c5d59", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "bedfefed02abe8c17c4e423d6369f8d116539cc1ea0906eb74630138242c7e1e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Battery\n\n* Design Goal 1: Battery Capacity (Range) \n - Maximize the battery capacity to provide an extended driving range for electric vehicles, allowing users to travel longer distances on a single charge.\n\n* Design Goal 2: Battery Weight and Size (Efficiency) \n - Minimize the weight and size of the battery pack to improve vehicle efficiency and reduce energy consumption.\n\n* Design Goal 3: Battery Lifespan (Longevity) \n - Design the battery to have a long lifespan, reducing the frequency and cost of battery replacements for EV owners.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 560, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2db5d772-2787-4f10-bc00-566545abef0a": {"__data__": {"id_": "2db5d772-2787-4f10-bc00-566545abef0a", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7c78a765-cdcf-45c9-b74d-4cf52f493248", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "a84c0952d17a090760b49a34e99d0f15c2cf8bb1f5add7dc54754efcbda20352", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] SIMCity\n\n* DG Usability: After completing a 10-minute tutorial, \u2265 80% of users can independently navigate the main menu and recall the core functions of the system.\n* DG2 Reliability: The system ensures end-to-end data integrity by synchronizing verified sinkhole status changes across all clients within 5 minutes.\n* NFRs\n - NFR1 Usability (Learnability): The system should provide a 10min tutorial to help users understand its core features (\u2026).\n - NFR2 Usability (Navigation): Users should be able to access the menu within two steps.\n - NFR3 Usability (Accessibility): The system should support text-to-speech for improved accessibility.\n - NFR4 Robustness: The system should handle increased traffic (+ 60%) during rush hours, with higher loads in winter than in summer (+ 70%).\n - NFR5 Performance: The map should reflect new and updated reports within five minutes.\n - NFR6 Reliability: The sinkhole status should be updated within five minutes after verifying a sinkhole and after removing a sinkhole.\n - NFR7 Portability: The system should be available as a mobile app.\n - NFR8 Availability: The system should require and verify Internet connectivity for (\u2026) functionality.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1203, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "879b5a55-51d6-4e52-9fd5-f0886a7c0dff": {"__data__": {"id_": "879b5a55-51d6-4e52-9fd5-f0886a7c0dff", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "377e8077-b608-4dcb-a58e-d01210294205", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "3a3a37c3719553f8f8064ef752ab0a10f64b21154f9dda0500fc6fb8edbf9779", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# System design concepts \u2014 Overview\n\n[x] Design goals \n\u2192 Control flow \n* Subsystem decomposition \n* HW/SW mapping \n* Data management \n* Access control \n* Boundary conditions", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 180, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0911a226-1745-42da-8b71-ecd4c5a79d47": {"__data__": {"id_": "0911a226-1745-42da-8b71-ecd4c5a79d47", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "90127588-2851-43ad-bfdc-7b4ee5ff6f31", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "3eb82c627805228cfed6a3eeb1f55597dc10c820f06d200c5b61a9bf4a7956fe", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Please complete the \n## **Midterm Survey** \nThank you!\n\nCS 1530 - SOFTWARE ENGINEERING - 1000 - Lecture \nStudents \nhttps://go.blueja.io/XXDCWA7Ltkii1npCrtobcA\n\n[The image shows a QR code next to the text above.]\n\nUniversity of Pittsburgh (logo)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 251, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "80b44619-c59c-4c0f-88b6-c3cfb1b041ea": {"__data__": {"id_": "80b44619-c59c-4c0f-88b6-c3cfb1b041ea", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f888be40-ef31-4678-ada5-3f4e9ba312d4", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "17fcb4b87efa1671a1c8cc7153a273a85d73da3e7ceca1e6ee36473862810511", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* **Dynamic modeling**\n - Overview\n - Modeling workflows (UML Activity Diagram)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 101, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6695fdc7-383b-4e6a-816c-46ff4b5b994d": {"__data__": {"id_": "6695fdc7-383b-4e6a-816c-46ff4b5b994d", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4a480917-fbdc-4394-b2f9-c10c69209118", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "8fad5cf96a7d0614fa4040b5ec724138f91662a269f1a0c612c0b433d9c7dd2d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Dynamic modeling\n\n* Describes the **dynamic behavior** of parts (components) of the system\n* Typically, we focus on **interesting behavior**\n - e.g., specific workflows involving the user/system with many actions\n* Dynamic model can be described in many ways\n - An entity\u2019s state\n - An entity\u2019s internal behavior / behavior with the system / behavior with other entities", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 376, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0a59c23a-2c1b-4806-835d-3a530b468048": {"__data__": {"id_": "0a59c23a-2c1b-4806-835d-3a530b468048", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f4d4f92b-2a1d-4201-bfb2-eb009729cf89", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "de4197e5df4d7c5c830b8e232c61892a55526ea8a3fd59fde6d15fb5b17cdc26", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Dynamic modeling tools\n\n* **Activity Diagram** \n - Purpose: Represent workflows within use cases \n - Usage: Visualize complex user interactions with multiple actions/decision points\n\n* **State Chart Diagram** \n - Purpose: Model the dynamic states and transitions of a single entity or object \n - Usage: Effective for illustrating how an object changes states in response to events\n\n* **Communication Diagrams** \n - Purpose: Illustrate the interactions and messages exchanged among multiple entities \n - Usage: Useful for modeling collaboration and communication patterns in a system\n\n* **Sequence Diagrams** \n - Purpose: Visualize the interactions between objects in a system over time \n - Usage: Show message sequence exchanged between objects to perform a specific function", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 794, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6eeb919d-3ee1-4967-98c1-ed8556a4d76e": {"__data__": {"id_": "6eeb919d-3ee1-4967-98c1-ed8556a4d76e", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "425d87cc-2396-4503-8651-83b94db81b45", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "40a6c1909cfcd6365c1af43901b8f1d1bff53665b97011a9627acbaadb0e8a59", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML activity diagrams\n\n* Organize and represent the flow of activities and actions, grouping them by the interacting system or actor\n* Help to more easily understand complex workflows\n* Show the order of execution, enabling modeling of both simple and complex behaviors", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 272, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ba2c4128-8dd1-4854-9011-e157887e0a9c": {"__data__": {"id_": "ba2c4128-8dd1-4854-9011-e157887e0a9c", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4c48cbe9-d0ee-4a2a-85e8-51433af36bc5", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "d13e97d778df5117faaaca2e636bc929d41a779fafcdde2919784fba920756c4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML activity diagrams\n\n* Consist of nodes and edges\n* **Nodes** describe activities and objects\n - Control nodes\n - Executable nodes\n - Object nodes (an object, e.g., a document, a SLF)\n* An **edge** is a directed connection between nodes\n\n----\n\n### Diagram (University of Pittsburgh)\n\n- **Start node** \n (black filled circle)\n\n- **Action node** \n Rectangle with rounded corners labeled: \n `View Calendar`\n\n- **Object node** \n Rectangle labeled: \n `Calendar`\n\n- Rectangle with rounded corners labeled: \n `View available appointments`\n\n- Rectangle with stacked rectangles labeled: \n **Available appointments** \n (Multiple objects)\n\n- **Edge** \n Directed arrows connecting the nodes in the order shown above\n\n- **End node** \n (black filled circle with surrounding ring)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 793, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "542af333-5cc0-46a8-a2e2-a4ce683caff8": {"__data__": {"id_": "542af333-5cc0-46a8-a2e2-a4ce683caff8", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3a9f053a-b3ea-4cbb-8c2a-527a9290fff6", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "355836ac4d48d59370e34485410bfdebbf328df1a348a340b2f2d5aaba0f288f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML activity diagram syntax\n\n* **Start or initial node** \n \u25cf (solid black circle)\n\n* **End or final node** \n \u25ef (black circle with white center)\n\n* **Action node** \n Describes an action \n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n \u2502 Action node \u2502 \n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n* **Object node** \n Describes an object \n (often hints at data) \n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n \u2502 Object node \u2502 \n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n* **Control flow:** action A is followed by action B \n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2192 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n \u2502 Action node A \u2502 \u2502 Action node B \u2502 \n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n----\n\n## Decision node \n**Decide on the control flow** \n- Diamond shape \n- Example: \n ```\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2192 \u25c7 \u2500\u2500\u25ba\u2502 Action node\u2502\n \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u2514\u2500[true condition]\n ```\n\n## Merge node \n**If the different control flows merge again** \n- Diamond shape with multiple incoming arrows and one outgoing arrow\n\n## Fork node \n**Concurrent actions (order is not important)** \n- Thick vertical bar splitting into multiple parallel flows \n- Example: \n ```\n \u2503\n \u2503 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2503 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2503 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2503 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n ```\n\n## Join node \n**Indicates the end of the concurrent actions** \n- Thick vertical bar joining multiple parallel flows into one\n\n----\n\n### Diagram example combining decision and merge nodes:\n\n```\n\u2192 \u25c7 \u2500\u2500[true condition]\u2500\u25ba \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2500\u2500\u25ba \u25c7 \u2500\u25ba\n \u2502 \u2502 Action node \u2502\n \u2514\u2500[false condition]\u2500\u25ba \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Action node \u2502\n```\n\n### Diagram example combining fork and join nodes:\n\n```\n\u2192 \u2503 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2500\u2500\u25ba \u2503 \u2500\u25ba\n \u2503 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2500\u2500\u25ba \u2503 \u2500\u25ba\n```\n\n----\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L14 Dynamic Modeling \nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1731, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b0f2ba1f-464d-4bea-b877-0c15413e1ff0": {"__data__": {"id_": "b0f2ba1f-464d-4bea-b877-0c15413e1ff0", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "162622bb-e6e3-4ea2-a206-05017df4dccf", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "68a491638195f12d2e95d57f766cb2758635f061fe1191885850cd90f26d1b68", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Activity diagrams can use **swimlanes**\n\n* Purpose: **Group actions** by viewpoint/role to indicate **responsibilities within a process or workflow**\n* A swimlane within an activity diagram represents a **boundary**\n - Helps in separating responsibilities and interactions\n* Swimlanes combine the system's high-level logic with responsibilities and interactions\n\n\n \n \n\n \n
PatientThe Patient\u2019s (actor) actions
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 537, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "14ce5567-2462-4a6b-9ed2-6550067a22b0": {"__data__": {"id_": "14ce5567-2462-4a6b-9ed2-6550067a22b0", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7ea18c94-16a4-433b-b258-afafb3325928", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "d45ab8e8b340625ae20c22b29cfe60aceb89e135cc7f44b7546a151a3d08ce8f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Swimlanes\n\n> \"Depth\" of the model depends on the context!\n\n----\n\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n\n\n \n \n
PatConnect
System\u2019s responsibilityPatient
Actor\u2019s responsibility\n
\n
\n Check for next available date\n
\n
\n
\n Possible Appointment\n
\n
\n
\n [reject appointment]\n
\n
\n
\n
\n
\n Select new appointment\n
\n
\n
\n [select appointment]\n
\n
\n
\n Confirm appointment\n
\n
\n
\n Appointment\n
\n
\n
\n\n----\n\n> **Swimlane:** Describe the activities from one actor\u2019s or system\u2019s point of view", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1670, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "91803b6d-c0fb-421b-b469-46557b520786": {"__data__": {"id_": "91803b6d-c0fb-421b-b469-46557b520786", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "28116bfc-9dbd-4646-b790-3515969c56fa", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "c1101dae229600b849cbebab4fc66e514e5dabef247741d5fd540e4316a06fc4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** Dynamic model - activity diagram\n\n> **Activity**\n\n\u25cf (Initial node / start) \n\u2192 Receive feedback \n\u2192 Occupant feedback \n\u2192 Sense thermal environment \n\u2192 Thermal environment sensation \n\u2192 Update occupant model \n\u2192 Updated occupant model \n\u2192 (Decision node) \n\u2003\u2003- [occupant feedback != comfortable] \u2192 Change thermal actuator state \n\u2003\u2003\u2003\u2003\u2192 (Merge node) \n\u2003\u2003\u2003\u2003\u2003\u2003\u2192 (Final node / end) \n\u2003\u2003- [occupant feedback == comfortable] \u2192 (Merge node) \n\u2003\u2003\u2003\u2003\u2192 (Final node / end) \n\n> **Initial node / start** \n> **Condition** \n> **Decision node** \n> **Object node** \n> **Merge node** \n> **Final node / end**\n\nUniversity of Pittsburgh \n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L14 Dynamic Modeling", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 700, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cb9e4f26-8949-4aae-b263-31624afd9754": {"__data__": {"id_": "cb9e4f26-8949-4aae-b263-31624afd9754", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5b79bcd2-ef15-4a11-94f8-d60efa66e83f", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "f1ee1573cbb6569fcd9958ba42a42f804c4c0cddad9e562e496f9322f08750ab", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# How to model an activity diagram\n\n* Activity diagrams serve to illustrate various workflows, such as:\n - User-specific workflows\n - System workflows\n - Logical workflows\n - \u2026\n* These workflows are frequently derived from:\n - The flow of events within use cases\n - Associations found in the analysis object model", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 320, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8469eb3d-384c-4412-9763-6ae57f3911c9": {"__data__": {"id_": "8469eb3d-384c-4412-9763-6ae57f3911c9", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3e0e87d6-522a-46c4-93a6-541a6d01ffae", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "753390fb0be38f433bd8f93beb711095ded0dfae31e19470f413f299529eb6cb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** Login Activity\n\n```mermaid\nflowchart TD\n Start(( ))\n Start --> A[Enter username]\n A --> B[Enter password]\n B --> C[Submit login details]\n C --> D[User Login]\n D --> E{Login details match user record?}\n E -- yes --> F[Approved Login]\n F --> End(( ))\n E -- no --> G{Try again?}\n G -- yes --> A\n G -- no --> End(( ))\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 365, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b06faa2f-2108-4bea-b2a9-48a9f2d5b42e": {"__data__": {"id_": "b06faa2f-2108-4bea-b2a9-48a9f2d5b42e", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "620974e6-9c9c-45be-b6c5-5db4d79733ef", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "70028510582b21d844ae8213bc89cf26d3611d56dc0a8a03eb4ee9a1573a08b4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Login Activity\n\n```mermaid\nflowchart TD\n Start(( ))\n A[Enter username]\n B[Enter password]\n C[Submit login details]\n D{Login details valid?}\n E[Valid Login Details]\n F[Send 2FA notification]\n G[2FA Notification]\n H{Login approved?}\n I{Try again?}\n J[Approved Login]\n End(( ))\n\n Start --> A --> B --> C --> D\n D -- no --> A\n D -- yes --> E --> F --> G --> H\n H -- no --> I\n H -- yes --> J --> End\n I -- no --> End\n I -- yes --> A\n F --> E\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 513, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "786a6ff9-7b09-4514-b924-b95874f53c2b": {"__data__": {"id_": "786a6ff9-7b09-4514-b924-b95874f53c2b", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "77a9814c-c35e-452d-974b-e5515c763f50", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "f7dc581419842caf724e7a694edefe6276c151c3e72d3c5dc5823e36838bd5a3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Login Activity (2FA)\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n
Authentication-DeviceUser
\u25cf
Enter username
Enter password
Submit login details
Login Details
\n \n\n\n \n \n\n \n
yesno
\n\n Login details valid?\n
Request authentication code
Generate authentication code
Authentication CodeEnter authentication code
User Authentication Code
\n \n\n\n \n \n\n \n
yesno
\n\n Login valid?\n
Approved Login
\n \n\n\n \n \n \n\n \n \n
no
yes
\n\n Try again?\n
\n\nUniversity of Pittsburgh\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L14 Dynamic Modeling", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1389, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4a0d0678-7365-41bc-97cf-bef5e5d5bf42": {"__data__": {"id_": "4a0d0678-7365-41bc-97cf-bef5e5d5bf42", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4d1f5928-bda4-4c0b-984f-f109d0da0903", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "c7cae95ccf74ede004df06b3bbea805dfe5934a77a6a59d566693d0ea49a0f36", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L14 \u2014 In-class: Activity diagram \u23f3 20 min \ud83e\uddd1\ud83d\udcbb\ud83e\uddd1\ud83d\udcbb Pairs\n\nModel a UML activity diagram to describe an **interesting**, non-trivial workflow, e.g.:\n\n* The enduser\u2019s workflow to submit a report\n* The city official\u2019s workflow to confirm a report\n* \u2026 (pick your own workflow!)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 271, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bf7bdd8d-f1a4-4747-b68a-d8ea0a6a3155": {"__data__": {"id_": "bf7bdd8d-f1a4-4747-b68a-d8ea0a6a3155", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "00794d28-190b-4000-a8db-e4576a615c22", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "e96fd4b308ac10b43f1506c7c96d36732a73268be108308c31b2ccb69cdd6dce", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# References\n\n* Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n* Object Management Group. Unified Modeling Language. Version 2.5.1, 2017", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 193, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "01fe24b7-4d1d-476a-bae6-b47510460ece": {"__data__": {"id_": "01fe24b7-4d1d-476a-bae6-b47510460ece", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8217f657-4b06-4560-9387-9a9ea32eb7f6", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L14 Dynamic Modeling.pdf"}, "hash": "0fb4f06299c012231661ec1d5159ba7c35cd4496dccd80ffccea60d79ff52323", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L14 Dynamic Modeling\n\nCS 1530 Software Engineering\n\nNadine von Frankenberg", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 77, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "96071e48-6285-4eca-b7b7-6200394b6670": {"__data__": {"id_": "96071e48-6285-4eca-b7b7-6200394b6670", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1201afc4-3036-4df6-bf35-e670a682b8f1", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "f22915a71411ecb40ad50e82ffee7b440ffb2e9e70f46adf5ceb14d55901e4f7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine 02\n\nThumrongsak Kosiyatrakul \n`tkosiyat@cs.pitt.edu`", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 71, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a03c8cf9-47a9-4aaf-89c0-51176e780611": {"__data__": {"id_": "a03c8cf9-47a9-4aaf-89c0-51176e780611", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d60d05cf-c748-4bb6-853f-888add44bd73", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "5c0a7539395a10c7d7beb6fe0c98f08cbdd7d1c7d093a287e1afe1ab6dcb8f81", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine Example\n\n* Design a Turing machine that recognizes the language \\( B \\) where \n $$\n B = \\{ w \\# w \\mid w \\in \\Sigma^* \\}\n $$\n\n* On input string \\( w \\):\n 1. Zig-zag across the tape to corresponding positions on either side of the \\# symbol to check whether those positions contain the same symbol. If they do not, or if no \\# is found, *reject*. Cross off symbols as they are checked to keep track of which symbols correspond.\n 2. When all symbols to the left of the \\# have been crossed off, check for any remaining symbols to the right of the \\#. If any symbols remain, *reject*; otherwise, *accept*.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 626, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "63bfe296-32d0-47b9-ae54-06b9084a44fb": {"__data__": {"id_": "63bfe296-32d0-47b9-ae54-06b9084a44fb", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "53ec7105-a5c5-497c-9bdf-510a748c9911", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "4d0f923147637515724486f6114dbe2314bd363c645c0d6495079bfeb95f1526", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine \\( M_1 \\)\n\n* A Turing machine that decides \n $$\n B = \\{ w \\# w \\mid w \\in \\Sigma^* \\}.\n $$\n\n```mermaid\nstateDiagram-v2\n [*] --> q1\n q1 --> q2: 0 \u2192 x, R\n q1 --> q3: 1 \u2192 x, R\n q1 --> q8: # \u2192 R\n\n q2 --> q2: 0,1 \u2192 R\n q2 --> q4: # \u2192 R\n\n q4 --> q4: x \u2192 R\n q4 --> q6: 0 \u2192 x, L\n\n q3 --> q3: 0,1 \u2192 R\n q3 --> q5: # \u2192 R\n\n q5 --> q5: x \u2192 R\n q5 --> q6: 1 \u2192 x, L\n\n q6 --> q6: 0,1,x \u2192 L\n q6 --> q7: # \u2192 L\n\n q7 --> q7: 0,1 \u2192 L\n q7 --> q2: x \u2192 R\n\n q8 --> q8: x \u2192 R\n q8 --> qaccept: \u2423 \u2192 R\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 549, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3b72e02b-b704-4510-8b8f-c3fcfa00ddd2": {"__data__": {"id_": "3b72e02b-b704-4510-8b8f-c3fcfa00ddd2", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b1fc1513-a205-4f29-9d32-a431aa6be6b7", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "7729c1e027cd51f26ecb28a1b58fdf60920e3c9c80b008d6f0473de1edb38c4a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine \\( M_1 \\)\n\n* \\( \\Sigma = \\{0, 1, \\#\\} \\)\n* \\( \\Gamma = \\{0, 1, \\#, x, \\sqcup\\} \\)\n* \\( 1 \\to x, R \\) \n - Read 1, write x, and move the tape head to the right direction\n* \\( \\# \\to R \\) \n - A shorthand notation for \\( \\# \\to \\#, R \\) \n - Read \\(\\#\\), write \\(\\#\\), and move the tape head to the right direction\n* \\( 0, 1 \\to L \\) \n - A shorthand notation representing two transitions: \n - \\( 0 \\to L \\) which is \\( 0 \\to 0, L \\) \n - \\( 1 \\to L \\) which is \\( 1 \\to 1, L \\)\n* \\( q_{\\text{reject}} \\) is **omitted** \n - All missing exiting arrows go to \\( q_{\\text{reject}} \\) \n - Assume that it moves the tape head to the right direction before entering \\( q_{\\text{reject}} \\) without writing a symbol (writing the same symbol it read)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 772, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "22cc71d0-97d4-48f4-a111-423f3628af9b": {"__data__": {"id_": "22cc71d0-97d4-48f4-a111-423f3628af9b", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fc9653a0-fb91-484c-8945-f46af6b63c09", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "25c8060b926d3533aaef7265ceae1c4e936b60b53cef952cd1f59acffdfa1c3f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine \\( M_1 \\)\n\n## Computing `01#01`\n\n```mermaid\nstateDiagram-v2\n [*] --> q_1\n q_1 --> q_2: 0 \u2192 x, R\n q_1 --> q_3: 1 \u2192 x, R\n q_1 --> q_8: # \u2192 R\n\n q_2 --> q_2: 0, 1 \u2192 R\n q_2 --> q_4: # \u2192 R\n\n q_4 --> q_4: x \u2192 R\n q_4 --> q_6: 0 \u2192 x, L\n\n q_6 --> q_6: 0, 1, x \u2192 L\n q_6 --> q_7: # \u2192 L\n\n q_7 --> q_7: 0, 1 \u2192 L\n q_7 --> q_1: x \u2192 R\n\n q_3 --> q_3: 0, 1 \u2192 R\n q_3 --> q_5: # \u2192 R\n\n q_5 --> q_5: x \u2192 R\n q_5 --> q_6: 1 \u2192 x, L\n\n q_8 --> q_accept: \u2294 \u2192 R\n q_8 --> q_8: x \u2192 R\n```\n\n### Computation trace for input `01#01`\n\n```\nq_1 01#01\nx q_2 1#01\nx 1 q_2 #01\nx 1 # q_4 01\nx 1 q_6 # x 1\nx q_7 1 # x 1\nq_7 x 1 # x 1\nx q_1 1 # x 1\nx x q_3 # x 1\nx x # q_5 x 1\nx x # x q_5 1\nx x # q_6 x x\nx x q_6 # x x\nx q_7 x # x x\nx x q_1 # x x\nx x # q_8 x x\nx x # x q_8 x\nx x # x x q_8 \u2294\nx x # x x \u2294 q_accept\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 842, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5bb19f60-a4b3-45a3-9bf0-f2ae85b2ae72": {"__data__": {"id_": "5bb19f60-a4b3-45a3-9bf0-f2ae85b2ae72", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b9053f8d-0a5a-4446-9739-ab5072c96ad0", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "e0bfa06f27ab3504b87dabc5277edb908cf02bf87a2214ec1bad81c098055174", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine \\( M_1 \\)\n\n## Computing `01#10`\n\n```mermaid\nstateDiagram-v2\n [*] --> q1\n q1 --> q2: 0 \u2192 x, R\n q1 --> q3: 1 \u2192 x, R\n q1 --> q8: # \u2192 R\n q2 --> q2: 0,1 \u2192 R\n q2 --> q4: # \u2192 R\n q4 --> q4: x \u2192 R\n q4 --> q6: 0 \u2192 x, L\n q3 --> q3: 0,1 \u2192 R\n q3 --> q5: # \u2192 R\n q5 --> q5: x \u2192 R\n q5 --> q6: 1 \u2192 x, L\n q6 --> q6: 0,1,x \u2192 L\n q6 --> q7: # \u2192 L\n q7 --> q7: 0,1 \u2192 L\n q7 --> q1: x \u2192 R\n q8 --> q8: x \u2192 R\n q8 --> qaccept: \u2423 \u2192 R\n```\n\n### Computation trace for input `01#10`:\n\n- \\( q_1 01\\#10 \\)\n- \\( x q_2 1\\#10 \\)\n- \\( x 1 q_2 \\#10 \\)\n- \\( x 1 \\# q_4 10 \\)\n- \\( x 1 \\# 1 q_{reject} 0 \\)\n\n----\n\nThumrongsak Kosiyatrakul `tkosiyat@cs.pitt.edu` \nTuring Machine 02", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 710, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6eb26b5b-09e5-4998-b563-d12ea60b6cc3": {"__data__": {"id_": "6eb26b5b-09e5-4998-b563-d12ea60b6cc3", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "56e57d9d-6b90-4e60-bc1b-cc1c605370c9", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "c242b486713aaa5ccec6c194995df820535e4c4e604f40724abb31e2ede2cbc9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine \\( M_1 \\)\n\n## Computing 01 (no \\# symbol)\n\n```mermaid\nstateDiagram-v2\n [*] --> q1\n q1 --> q2: 0 \u2192 x, R\n q1 --> q3: 1 \u2192 x, R\n q1 --> q8: # \u2192 R\n\n q2 --> q2: 0,1 \u2192 R\n q2 --> q4: # \u2192 R\n\n q4 --> q4: x \u2192 R\n q4 --> q6: 0 \u2192 x, L\n\n q3 --> q3: 0,1 \u2192 R\n q3 --> q5: # \u2192 R\n\n q5 --> q5: x \u2192 R\n q5 --> q6: 1 \u2192 x, L\n\n q6 --> q6: 0,1,x \u2192 L\n q6 --> q7: # \u2192 L\n\n q7 --> q7: 0,1 \u2192 L\n q7 --> q1: x \u2192 R\n\n q8 --> q8: x \u2192 R\n q8 --> qaccept: \u2423 \u2192 R\n```\n\n### Tape configurations during computation of input `01`:\n\n- \\( q_1 0 1 \\)\n- \\( x q_2 1 \\)\n- \\( x 1 q_2 \\sqcup \\)\n- \\( x 1 \\sqcup q_{reject} \\)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nTuring Machine 02", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 715, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6f3c6cb6-f870-4130-aaa4-3a9c69532492": {"__data__": {"id_": "6f3c6cb6-f870-4130-aaa4-3a9c69532492", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "53fbc237-cfad-41fa-a81e-e4391be04eda", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "6599c114ea96aaa1f558ae56385a8921df3087a22d627d529a346657ae426694", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine Example\n\n* Design a Turing machine that recognizes the language \\( A \\) where \n $$\n A = \\{0^{2^n} \\mid n \\geq 0\\}\n $$\n\n* On input string \\( w \\): \n 1. Sweep left to right across the tape, crossing off every other 0 \n 2. If in stage 1 the tape contained a single 0, *accept* \n 3. If in stage 1 the tape contained more than a single 0 and the number of 0s was odd, *reject* \n 4. Return the head to the left-hand end of the tape \n 5. Go to stage 1", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 476, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "135c0270-a941-4e15-b615-704cc24a99d7": {"__data__": {"id_": "135c0270-a941-4e15-b615-704cc24a99d7", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "67846276-9d0f-4984-9f17-6c94abea1215", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "ca11fa1ee9035bdec449d8ba2feac1627787a9406f7dbe6d1f42eba120e71d41", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Moving the Tape Head Back\n\n* Suppose we want to move the tape head back to the left most end of the tape\n - Need a state to do that\n\n ```\n 0, 1, x \\to L\n ```\n\n - This will result in an infinite loop\n\n* Recall that if the tape head is at the left-most square and the transition is \\( L \\), it will stay at the same place\n - There is no signal telling a TM that its tape head is currently at the left-most square\n\n* The trick is to mark the left-most symbol (depending on \\(\\Gamma\\))\n - Turn 0 or 1 to \\(\\sqcup\\)\n - Turn 0 to \\(\\dot{0}\\) or \\(x\\)\n - Turn 1 to \\(\\dot{1}\\) or \\(\\sqcup\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 600, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4e6aec91-1f7d-4a50-8394-a523bc2154d0": {"__data__": {"id_": "4e6aec91-1f7d-4a50-8394-a523bc2154d0", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7aa7e20e-6184-49b8-babd-79f086856f9a", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "8dcf1557ae0d54431aff4bb0e6b3c276c50aaa4128a7f2edbde2c8017365c11f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine \\( M_2 \\)\n\n* A Turing machine that decides \n $$\n A = \\{0^{2^n} \\mid n \\geq 0\\}.\n $$\n\n```mermaid\nstateDiagram-v2\n [*] --> q_1\n q_1 --> q_2: 0 \u2192 \u2423, R\n q_1 --> q_{reject}: \u2423 \u2192 R, x \u2192 R\n q_2 --> q_5: \u2423 \u2192 L, \u2423 \u2192 R\n q_2 --> q_3: 0 \u2192 x, R\n q_2 --> q_{accept}: \u2423 \u2192 R\n q_3 --> q_4: 0 \u2192 x, R\n q_3 --> q_3: x \u2192 R\n q_3 --> q_2: \u2423 \u2192 L\n q_4 --> q_3: 0 \u2192 R\n q_4 --> q_4: x \u2192 R\n q_4 --> q_{reject}: \u2423 \u2192 R\n q_5 --> q_5: 0 \u2192 L, x \u2192 L\n q_5 --> q_2: \u2423 \u2192 R\n```\n\n- States:\n - \\(q_1\\) is the start state.\n - \\(q_{reject}\\) is the reject state.\n - \\(q_{accept}\\) is the accept state.\n- Transitions:\n - From \\(q_1\\):\n - On reading `0`, write blank (\u2423), move right, go to \\(q_2\\).\n - On reading blank (\u2423) or `x`, move right, go to \\(q_{reject}\\).\n - From \\(q_2\\):\n - On reading blank (\u2423), move right, go to \\(q_{accept}\\).\n - On reading `0`, write `x`, move right, go to \\(q_3\\).\n - On reading blank (\u2423), move left, go to \\(q_5\\).\n - From \\(q_3\\):\n - On reading `0`, write `x`, move right, go to \\(q_4\\).\n - On reading `x`, move right, stay in \\(q_3\\).\n - On reading blank (\u2423), move left, go to \\(q_2\\).\n - From \\(q_4\\):\n - On reading `0`, move right, go to \\(q_3\\).\n - On reading `x`, move right, stay in \\(q_4\\).\n - On reading blank (\u2423), move right, go to \\(q_{reject}\\).\n - From \\(q_5\\):\n - On reading `0` or `x`, move left, stay in \\(q_5\\).\n - On reading blank (\u2423), move right, go to \\(q_2\\).\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nTuring Machine 02", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1553, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b52e53d7-6073-4744-a0b8-6ded95795e70": {"__data__": {"id_": "b52e53d7-6073-4744-a0b8-6ded95795e70", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "651ef24f-fe22-4ef5-acfa-f7bdb8341b3d", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "b5e8886c72d4944447a58816edcaa179c9de3edf4f75ae9301b26e9554cd3080", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine \\( M_2 \\)\n\n## Computing 0000\n\nMermaid diagram representing the Turing machine states and transitions:\n\n```mermaid\nstateDiagram-v2\n [*] --> q_1\n q_1 --> q_reject: \u2423 \u2192 R, x \u2192 R\n q_1 --> q_2: 0 \u2192 \u2423, R\n q_2 --> q_accept: \u2423 \u2192 R\n q_2 --> q_2: x \u2192 R\n q_2 --> q_5: 0 \u2192 x, R\n q_3 --> q_3: 0 \u2192 R\n q_3 --> q_4: 0 \u2192 x, R\n q_3 --> q_5: x \u2192 R\n q_4 --> q_4: x \u2192 R\n q_4 --> q_3: 0 \u2192 R\n q_4 --> q_reject: \u2423 \u2192 R\n q_5 --> q_5: 0 \u2192 L, x \u2192 L\n q_5 --> q_2: \u2423 \u2192 R\n q_5 --> q_3: \u2423 \u2192 L\n```\n\n### State transitions and tape configurations during computation of input `0000`:\n\n```\nq_1 0000\n\u2423 q_2 000\n\u2423 x q_3 00\n\u2423 x 0 q_4 0\n\u2423 x 0 x q_3 \u2423\n\u2423 x 0 q_5 x\n\u2423 x q_5 0 x\nq_5 \u2423 x 0 x\n\u2423 q_2 x 0 x\n\u2423 x q_2 0 x\n\u2423 x x q_3 x\n\u2423 x x x q_3 \u2423\n\u2423 x x q_5 x\n\u2423 x q_5 x x\n\u2423 q_5 x x x\nq_5 \u2423 x x x\n\u2423 q_2 x x x\n\u2423 x q_2 x x\n\u2423 x x q_2 x\n\u2423 x x x q_2 \u2423\n\u2423 x x x \u2423 q_accept\n```\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nTuring Machine 02", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 951, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "381f303a-acbb-4544-ab90-dd4f3a4663a8": {"__data__": {"id_": "381f303a-acbb-4544-ab90-dd4f3a4663a8", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "70a96e39-d6f9-4fa3-a802-95cd305f4ff1", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "5dac4826e5bca226750489621d7749eddcb88ab096808b0634b9dc10ffc9da75", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine \\( M_2 \\)\n\n## Computing 000\n\n```mermaid\nstateDiagram-v2\n [*] --> q_1\n q_1 --> q_{reject} : \\sqcup \\to R, x \\to R\n q_1 --> q_2 : 0 \\to \\sqcup, R\n\n q_2 --> q_{accept} : \\sqcup \\to R\n q_2 --> q_5 : x \\to R\n q_2 --> q_2 : x \\to R\n\n q_5 --> q_5 : 0 \\to L, x \\to L\n q_5 --> q_2 : \\sqcup \\to R\n q_5 --> q_3 : \\sqcup \\to L\n\n q_3 --> q_4 : 0 \\to R\n q_3 --> q_3 : x \\to R\n q_3 --> q_5 : \\sqcup \\to L\n\n q_4 --> q_4 : x \\to R\n q_4 --> q_3 : 0 \\to x, R\n q_4 --> q_{reject} : \\sqcup \\to R\n```\n\n### Computation steps (partial):\n\n- \\( q_1 000 \\)\n- \\( \\sqcup q_2 00 \\)\n- \\( \\sqcup x q_3 0 \\)\n- \\( \\sqcup x 0 q_4 \\sqcup \\)\n- \\( \\sqcup x 0 \\sqcup q_{reject} \\)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nTuring Machine 02", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 777, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e89873b8-26a2-43bf-a108-34c00eeea315": {"__data__": {"id_": "e89873b8-26a2-43bf-a108-34c00eeea315", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f497ee38-6c98-4e34-b262-3c9489a5a5e4", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "245ddc3a4a27ae395285996799a9b54464607b379796ed7303038f10f3a0b8d5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing a TM\n\n* Designing a TM in a form of a state diagram is hard\n - Need to keep in mind out the content of the tape\n - Need to worry about moving tape head\n* But for a simple problem, it is not that bad\n* Let\u2019s create a TM that shift all symbols on the tape to the right by one square by inserting the blank symbol at the left-most square and move the tape head back to the left-most square\n - Let $$ \\Sigma = \\{0,1\\} $$ and $$ \\Gamma = \\{0,1,\\sqcup\\} $$\n - Here are some input/output (on the tape)\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n
InputOutput
01101\u242301101
0\u24230
111\u2423111
\u03b5\u03b5
\n\n* Note that this TM always accepts all strings over $$ \\Sigma $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 890, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d6215dcd-ad20-4e6b-b5c9-f96eca613e6c": {"__data__": {"id_": "d6215dcd-ad20-4e6b-b5c9-f96eca613e6c", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/turing_machine_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7c49de1e-9f22-47ad-926e-cc265a113ecc", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/turing_machine_02_handout.pdf"}, "hash": "e6249cb0c7ed3468f681784ff6c426c0574f06b83a35a81080607caf2befd608", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing a TM\n\n* Solution\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0 --> q1: 0 \u2192 \u2423, R\n q0 --> q2: 1 \u2192 \u2423, R\n q0 --> qaccept: \u2423 \u2192 L\n q1 --> q1: 0 \u2192 R\n q1 --> q2: 1 \u2192 0, R\n q2 --> q2: 1 \u2192 R\n q2 --> q1: 0 \u2192 1, R\n q1 --> q3: \u2423 \u2192 0, L\n q2 --> q3: \u2423 \u2192 1, L\n q3 --> q3: 0, 1 \u2192 L\n q3 --> qaccept: \u2423 \u2192 L\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 338, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "087227f5-a237-4266-bb56-0f25d2cc9018": {"__data__": {"id_": "087227f5-a237-4266-bb56-0f25d2cc9018", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a23060d3-7fc0-44c1-935f-bf717ab30ed6", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "a08f286b0773f5d109e3db630ffb427a60545f09f4a765e42020ed69e585d90c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata 01\n\nThumrongsak Kosiyatrakul \n`tkosiyat@cs.pitt.edu`", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 72, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "40b64948-51ce-44b7-8876-7b44d5152ffd": {"__data__": {"id_": "40b64948-51ce-44b7-8876-7b44d5152ffd", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e72add08-a51c-4cc5-9399-9ce9efdd9b78", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "a79dc509484f525c53fb8a4a2725b8fa13ed6ffedd4d7b7ecaa0f9bf513e68be", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata\n\n* Suppose you are asked to write a software to control an automatic door as shown below:\n\n```\n \u25cf\n +---------+ +---------+\n | front | | rear |\n | pad | | pad |\n +---------+ +---------+\n door\n```\n\n* Assume we have the following methods:\n - `getFrontPad()`: returns true if there is a person standing on the front pad. Otherwise, it returns false.\n - `getRearPad()`: returns true if there is a person standing on the rear pad. Otherwise, it returns false.\n - `openDoor()`: when called it will open the door.\n - `closeDoor()`: when called it will close the door.\n\n* How the write the program in Java?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 670, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ebed8870-e638-4290-bdef-302394fb5c98": {"__data__": {"id_": "ebed8870-e638-4290-bdef-302394fb5c98", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a9ba1f44-d982-4669-9fca-ce7b7000beb3", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "cf7fd3b198b69643d0b457211ebe406f0e6b01cbe678dfab6fada2513e6393c6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata\n\n* Program to control the automatic door:\n\n```java\npublic class DoorController {\n public static void main(String[] args) {\n boolean isDoorOpen = false;\n\n while(true) {\n if(getFrontPad() && !getRearPad() && !isDoorOpen) {\n openDoor();\n isDoorOpen = true;\n }\n if(!getFrontPad() && !getRearPad() && isDoorOpen) {\n closeDoor();\n isDoorOpen = false;\n }\n }\n }\n}\n```\n\n* The variable `isDoorOpen` of type boolean is used to record the status of the door (1 bit of memory is required).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 626, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0aaccdbd-bb70-4c75-8044-6a4835b7d237": {"__data__": {"id_": "0aaccdbd-bb70-4c75-8044-6a4835b7d237", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "aa136feb-6535-4523-88bd-e76550c00f9e", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "962562e9802ab9642dd6c1ded1da128abcd2a8a7e81305d41d3f0604fb87310f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata\n\n* `getFrontPad()` and `getRearPad()` together acts as external input to the program:\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
getFrontPad()getRearPad()Input
truetrueBoth
truefalseFront
falsetrueRear
falsefalseNeither
\n\n* We can define the behavior of our program based on its input as well as the status of the door whether it is current open or close", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 659, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "27f5085f-cb67-4f53-9d85-82e0b952990e": {"__data__": {"id_": "27f5085f-cb67-4f53-9d85-82e0b952990e", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "75886ffe-9a16-4591-b4f7-5452f85b58df", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "63bc6f8c1259341e5679b7e765db93f665b9a993c84bb9151428606f9754c7f0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Representations\n\n* The program can be represented in two standard ways \n * State Diagram:\n\n Rear Rear\n\n Both Closed Open Both\n\n Front\n\n Neither\n\n Neither Front\n\n * State Transition Table:\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n \n\n\n\n\n \n \n
NeitherFrontRearBoth
ClosedClosedOpenClosedClosed
OpenClosedOpenOpenOpen
\n\n* But how to represent these in a mathematical way?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 843, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2a0a2b3c-b914-416f-88e0-92c83b08be43": {"__data__": {"id_": "2a0a2b3c-b914-416f-88e0-92c83b08be43", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4f6d7880-bd44-4a73-ab9b-daeb57812aa1", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "9d04fef5852b323ffcc70b2186cff1f6cebfd56e545ebd0044a1b5215cadb8ec", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite State Machine\n\n* Consider the following finite state machine \\( M_1 \\):\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0 --> q0: 0\n q0 --> q1: 1\n q1 --> q1: 1\n q1 --> q2: 0\n q2 --> q1: 0,1\n state q1 {\n <>\n }\n```\n\n* Machine \\( M_1 \\) consists of:\n - Three **states**: \\( q_0 \\), \\( q_1 \\), and \\( q_2 \\)\n - The **start state** \\( q_0 \\) (arrow pointing to it from nowhere)\n - An **accept state** \\( q_1 \\) (double circle)\n * All single circle states are called non-accept state\n - Arrows represent **transition functions**\n - The label 0, 1 represents two transitions\n\n```mermaid\nstateDiagram-v2\n q1 --> q2: 0\n q2 --> q1: 1\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 687, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7dc7abe3-3450-456f-a4a0-75a585904414": {"__data__": {"id_": "7dc7abe3-3450-456f-a4a0-75a585904414", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "21809133-b190-4792-8c9f-632c9340f90c", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "d6cc70a455fa54ccc00f57b0aed20f419fc800d751397a0b057e10d2f4952faa", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite State Machine\n\n* Consider the following finite state machine \\( M_1 \\):\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0: 0/0, 1/1\n q1: 0/0, 1/1\n q2: 0/0, 1/1\n q0 --> q0: 0\n q0 --> q1: 1\n q1 --> q1: 1\n q1 --> q2: 0\n q2 --> q1: 0,1\n state q1 <>\n```\n\n* When an input string is given to this machine, it returns either **accept** or **reject**.\n\n * `1101`: accept \n $$\n q_0 \\xrightarrow{1} q_1 \\xrightarrow{1} q_1 \\xrightarrow{0} q_2 \\xrightarrow{1} q_1 \\quad \\text{(an accept state)}\n $$\n\n * `0010`: reject \n $$\n q_0 \\xrightarrow{0} q_0 \\xrightarrow{0} q_0 \\xrightarrow{1} q_1 \\xrightarrow{0} q_2 \\quad \\text{(a non-accept state)}\n $$\n\n * `0100`: accept \n $$\n q_0 \\xrightarrow{0} q_0 \\xrightarrow{1} q_1 \\xrightarrow{0} q_2 \\xrightarrow{0} q_1 \\quad \\text{(an accept state)}\n $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 834, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2a0452cd-194c-4dfd-9357-1e56b85665f9": {"__data__": {"id_": "2a0452cd-194c-4dfd-9357-1e56b85665f9", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ffd3a7d7-069c-4ecf-a4b8-dbe55bb64b01", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "636503e106a205dd0b718407deb2b634fb98d1dfaacfd1ac9ec0c41867935479", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite State Machine\n\n* Consider the following finite state machine \\( M_1 \\):\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0: \\(q_0\\)\n q1: \\(q_1\\)\n q2: \\(q_2\\)\n q0 --> q0: 0\n q0 --> q1: 1\n q1 --> q1: 1\n q1 --> q2: 0\n q2 --> q1: 0,1\n```\n\n* Can we define the set of inputs that is accepted by the above machine?\n - \\( M_1 \\) accepts any strings that end with a 1\n - \\( M_1 \\) also accepts a string that ends with a 0 but it needs to have even number of 0s after the last 1\n\n* The set of all strings accepted by this machine is\n\n $$\n \\{ x \\mid x \\text{ ends with a } 1 \\text{ and } x \\text{ is a string that ends with an even number of 0s following the last } 1 \\}\n $$\n\n* The above set is called the **language** of the machine \\( M_1 \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 767, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5180a6c2-bc69-4b09-941b-42b8267d0bf3": {"__data__": {"id_": "5180a6c2-bc69-4b09-941b-42b8267d0bf3", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "abfe0c50-9e30-4175-b51d-5f07b502f632", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "d19dc9f2fda933982741926d84b257e6f443189762202b440af373a70c29d56f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite-State Automaton\n\n* A finite state machine \\( M \\) can be defined as five tuple\n\n$$\nM = (Q, \\Sigma, \\delta, q_0, F)\n$$\n\n* \\( Q \\) is a non-empty finite set of states \n - \\( M \\) must have at least one state \n* \\( \\Sigma \\) is an alphabet (a finite set of symbols) \n* \\( \\delta : Q \\times \\Sigma \\to Q \\) is the transition functions \n - We generally use a table to represent \\( \\delta \\) \n* \\( q_0 \\in Q \\) is the starting state \n - A finite automata can only have **exactly one** start state \n* \\( F \\subseteq Q \\) is the set of accept states \n - \\( F \\) can be \\(\\emptyset\\) \\(\\Rightarrow\\) \\( M \\) can have no accept state (rejects all strings) \n - \\(|F|\\) can be more than 1 \\(\\Rightarrow\\) \\( M \\) has more than one accept states", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 756, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e0a3b9aa-176a-449d-b2bc-6b96007f9cae": {"__data__": {"id_": "e0a3b9aa-176a-449d-b2bc-6b96007f9cae", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "43fac8c0-4b29-4cef-a6ac-7d1f35fce8c8", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "87240bd0566810f4dc2c5ef2580d3bd4f40773cfbeefbb28dd1c2f9bee741d97", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example: Machine \\( M_1 \\)\n\n```\n 0 1\n\n q_0 1 q_1 0 q_2\n 0, 1\n```\n\n* \\( M_1 = (Q, \\Sigma, \\delta, q_0, F) \\)\n * \\( Q = \\{ q_0, q_1, q_2 \\} \\)\n * \\( \\Sigma = \\{0, 1\\} \\)\n * \\( \\delta \\) can be defined using the table below:\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
\\(\\delta\\)01
\\(q_0\\)\\(q_0\\)\\(q_1\\)
\\(q_1\\)\\(q_2\\)\\(q_1\\)
\\(q_2\\)\\(q_1\\)\\(q_1\\)
\n\n* \\( q_0 \\) is the start state\n* \\( F = \\{ q_1 \\} \\)\n\n* The state diagram and its formal definition are equivalent", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 828, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "26ba0906-e8cf-4cf8-abea-c7b2050930b7": {"__data__": {"id_": "26ba0906-e8cf-4cf8-abea-c7b2050930b7", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4fb978c0-d241-4981-aec2-ca2db0fcaeaf", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "247267b6bf5f7f70f7621c4724b7608fa849193df89c0ca86c4d5354e5c183a5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Formal Definition of Machine \\( M_1 \\)\n\n* \\( M_1 = (\\{q_0, q_1, q_2\\}, \\{0,1\\}, \\delta, q_0, \\{q_1\\}) \\) where \\(\\delta\\) is as follows:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\\(\\delta\\)01
\\(q_0\\)\\(q_0\\)\\(q_1\\)
\\(q_1\\)\\(q_2\\)\\(q_1\\)
\\(q_2\\)\\(q_1\\)\\(q_1\\)
\n\n* The above formal definition allows use to precisely answer questions about \\( M_1 \\):\n\n - Is 0101 a valid input for this machine?\n - Yes. \\(0 \\in \\{0,1\\}\\) and \\(1 \\in \\{0,1\\}\\).\n - Is 01a0 a valid input for this machine?\n - No. \\(a \\notin \\{0,1\\}\\).\n - Is input 010 accepted by this machine?\n - No. \\(q_0 \\xrightarrow{0} q_0 \\xrightarrow{1} q_1 \\xrightarrow{0} q_2\\) and \\(q_2 \\notin \\{q_1\\}\\).\n - Is input 101 accepted by this machine?\n - Yes. \\(q_0 \\xrightarrow{1} q_1 \\xrightarrow{0} q_2 \\xrightarrow{1} q_1\\) and \\(q_1 \\in \\{q_1\\}\\).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 988, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ce3f448c-0cae-491b-8a24-64fd97bae219": {"__data__": {"id_": "ce3f448c-0cae-491b-8a24-64fd97bae219", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "29578f41-64e3-48e5-9024-8a54483e265b", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "04af448cb3c58cce22d9538e4ca661de610bd9c965677a7a8acdc29c82a9ad7d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Language Recognized\n\n* A string \\( w = w_1 w_2 \\ldots w_n \\) is **accepted** by \\( M \\) if and only if after processing each symbol \\( w_i \\) of \\( w \\), where \\( 1 \\leq i \\leq n \\), \\( M \\) finds itself in an accept state (a state belonging to \\( F \\)). Otherwise, we say \\( w \\) is rejected by \\( M \\).\n\n* If \\( A \\) is the set of **all strings** accepted by \\( M \\), we say \\( A \\) is the **language of finite-state machine** \\( M \\), denoted by\n\n$$\nL(M) = A\n$$\n\nWe say that \\( M \\) **recognizes** \\( A \\).\n\n* A machine may accept several strings but it always recognizes only one language.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 596, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b98e5633-abfb-40e3-9cc7-f0c28f3fb9a4": {"__data__": {"id_": "b98e5633-abfb-40e3-9cc7-f0c28f3fb9a4", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4c979f28-6faf-45d1-bd31-3366faa35b11", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "909f794864631ad28069a12d92ff4a7be2c07a7e4f29c649f75b2393be6735fb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\nThe diagram shows a finite automaton with two states:\n\n- States: \\( q_1 \\) and \\( q_2 \\)\n- Alphabet: \\( \\{0, 1\\} \\)\n- Transitions:\n - From \\( q_1 \\):\n - On input 0, stay in \\( q_1 \\)\n - On input 1, go to \\( q_2 \\)\n - From \\( q_2 \\):\n - On input 0, go to \\( q_1 \\)\n - On input 1, stay in \\( q_2 \\)\n- Start state: \\( q_1 \\)\n- Accept state: \\( q_2 \\)\n\n$$\nM_2 = (Q, \\Sigma, \\delta, \\text{start state}, F)\n$$\n\nWhat is the formal definition of the above machine and the language that it recognises?\n\n* \\( Q = \\{ q_1, q_2 \\} \\)\n* \\( \\Sigma = \\{ 0, 1 \\} \\)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\\(\\delta\\)01
\\(q_1\\)\\(q_1\\)\\(q_2\\)
\\(q_2\\)\\(q_1\\)\\(q_2\\)
\n\n* The start state is \\( q_1 \\)\n* \\( F = \\{ q_2 \\} \\)\n* \\( L(M_2) = \\{ w \\mid w \\text{ ends in a } 1 \\} \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 910, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d6be9560-b049-4c4d-8633-4e4388933db8": {"__data__": {"id_": "d6be9560-b049-4c4d-8633-4e4388933db8", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e1cb3f9a-e7de-47fa-afb6-e01d58ccd4b9", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "14dd6b4258b705a3d02ba854c31ee9b91ade4bc84c67a2de6e3e5e98f9410d02", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n$$\nM_3 = (Q, \\Sigma, \\delta, \\text{start state}, F)\n$$\n\nWhat is the formal definition of the above machine and the language that it recognises?\n\n* \\( Q = \\{ q_1, q_2 \\} \\)\n* \\( \\Sigma = \\{ 0, 1 \\} \\)\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n \n
\\(\\delta\\)01
\\(q_1\\)\\(q_1\\)\\(q_2\\)
\\(q_2\\)\\(q_1\\)\\(q_2\\)
\n\n* Start state is \\(q_1\\)\n* \\( F = \\{ q_1 \\} \\)\n* \\( L(M_3) = \\{ w \\mid w \\text{ is the empty string } \\varepsilon \\text{ or ends in a } 0 \\} \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 643, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4d404ef2-14e2-4016-9160-ae1b12f2e9a9": {"__data__": {"id_": "4d404ef2-14e2-4016-9160-ae1b12f2e9a9", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c5266d44-a3d6-42cf-82dd-0836f0f7105e", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "a58ccc59ad7ed66edad3ce057ab0bdecd3344a4cde8557a8f0fa29a605d05022", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n$$Q = \\{s, q_1, q_2, r_1, r_2\\}$$ \n$$\\Sigma = \\{a, b\\}$$ \n**Transition Functions:**\n\n\n\n \n \n \n \n \n\n\n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n
\u03b4ab
sq_1r_1
q_1q_1q_2
q_2q_1q_2
r_1r_2r_1
r_2r_2r_1
\n\n$$M_4 = (Q, \\Sigma, \\delta, \\text{start state}, F)$$\n\n* Start state is \\(s\\) \n* \\(F = \\{q_1, r_1\\}\\) \n* \\(L(M_2) = \\{ w \\mid w \\text{ starts and ends with the same symbol} \\}\\)\n\nWhat is the formal definition of the above machine and the language that it recognises?\n\n[The diagram shows a finite automaton with states \\(s, q_1, q_2, r_1, r_2\\). The start state is \\(s\\). The accepting states are \\(q_1\\) and \\(r_1\\). Transitions are labeled with input symbols \\(a\\) and \\(b\\) as follows:\n\n- From \\(s\\):\n - on \\(a\\) to \\(q_1\\)\n - on \\(b\\) to \\(r_1\\)\n- From \\(q_1\\):\n - on \\(a\\) loops to itself\n - on \\(b\\) to \\(q_2\\)\n- From \\(q_2\\):\n - on \\(a\\) to \\(q_1\\)\n - on \\(b\\) loops to itself\n- From \\(r_1\\):\n - on \\(a\\) to \\(r_2\\)\n - on \\(b\\) loops to itself\n- From \\(r_2\\):\n - on \\(a\\) loops to itself\n - on \\(b\\) to \\(r_1\\)]\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 01", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1393, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "97ad144d-dd6f-4975-8f99-e204ddd97cd6": {"__data__": {"id_": "97ad144d-dd6f-4975-8f99-e204ddd97cd6", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "67766adf-526c-473f-b29d-bc8b38fa515a", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "ba2d6a0d5113648c76a8aa3113168f8980791941f1bcc5868d6af154b44041f5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n$$\nM_5 = (Q, \\Sigma, \\delta, \\text{start state}, F)\n$$\n\nWhat is the formal definition of the above machine and the language that it recognises?\n\n----\n\n### Formal definition:\n\n* \\( Q = \\{ q_0, q_1, q_2 \\} \\)\n* \\( \\Sigma = \\{ 0, 1, 2, \\langle \\text{RESET} \\rangle \\} \\)\n* Transition Functions:\n\n\n\n \n \n \n \n \n \n \n\n\n \n \n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n\n\n\n \n\n
\\(\\delta\\)012<RESET>
\\(q_0\\)\\(q_0\\)\\(q_1\\)\\(q_2\\)\\(q_0\\)
\\(q_1\\)\\(q_1\\)\\(q_2\\)\\(q_0\\)\\(q_0\\)
\\(q_2\\)\\(q_2\\)\\(q_0\\)\\(q_1\\)\\(q_0\\)
\n\n* Start state is \\( q_0 \\)\n* \\( F = \\{ q_0 \\} \\)\n* Language recognized by \\( M_2 \\):\n\n$$\nL(M_2) = \\{ w \\mid w \\text{ is the empty string } \\varepsilon \\text{ or ends with } \\langle \\text{RESET} \\rangle \\text{ or sum of input is multiple of 3 after the last } \\langle \\text{RESET} \\rangle \\}\n$$\n\n----\n\n### State diagram description (from image):\n\n- States: \\( q_0, q_1, q_2 \\)\n- Arrows labeled with input symbols 0, 1, 2, and showing transitions between states.\n- Self-loops on states for certain inputs.\n- transitions from \\( q_1 \\) and \\( q_2 \\) back to \\( q_0 \\).\n- Start state \\( q_0 \\) is double circled indicating it is also the accepting state.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 01", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1516, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e0f220a3-71cb-437c-ba0c-a174b3668b84": {"__data__": {"id_": "e0f220a3-71cb-437c-ba0c-a174b3668b84", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1239ecc3-4088-499b-a4be-e881a437770f", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "f89033abfd9abfc1f2d8d28469f954c85d24878e42677b46003cfdec2638c664", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing a Finite-State Machine\n\n* A computation model simulates a set of algorithms \n* Designing a finite-state machine is the same as writing a program \n - Use states to capture state-of-minds \n * I just see a 1 \n * I just see two consecutive 0s \n * I already saw 00 or 11 \n* Do not force yourself to use the least number of states \n - Nobody asks you to write a shortest possible program \n - Unless you are asked to do so", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 448, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "40cbf2fd-29e2-4ff0-b6dd-07c0060d9ea4": {"__data__": {"id_": "40cbf2fd-29e2-4ff0-b6dd-07c0060d9ea4", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d7cbe54f-6253-4253-a605-c578eceabd98", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "00b110c9342217e686824bc2b679637ff557dffbe9d5496c098d71da66c24c00", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing Finite Automata\n\n> Suppose the alphabet \\(\\Sigma\\) is \\(\\{0,1\\}\\). Create a machine such that its language is the set of all strings that contain either 11 or 00 as a substring.\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0 --> q1: 1\n q0 --> q2: 0\n q1 --> q3: 1\n q1 --> q2: 0\n q2 --> q3: 0\n q2 --> q1: 1\n q3 --> q3: 0,1\n note right of q3\n (accepting state)\n end note\n```\n\n* Common mistakes:\n * \\(\\delta(q_1, 0) = q_0\\)\n * \\(\\delta(q_2, 1) = q_0\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 494, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7b5ebe00-44fb-4f5b-9a01-66cf702fc1c2": {"__data__": {"id_": "7b5ebe00-44fb-4f5b-9a01-66cf702fc1c2", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1915f845-6e52-49d1-97d2-b62d0c552310", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "598f0794110564d8b0b40b1fabc7c9963dc58067443e93975913f4e4b9e0e64c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing Finite Automata\n\n> Suppose the alphabet \\(\\Sigma\\) is \\(\\{0,1\\}\\). Create a machine such that its language is the set of all strings that contain 011 as a substring.\n\n```mermaid\nstateDiagram-v2\n [*] --> qs\n qs --> qs: 1\n qs --> q0: 0\n q0 --> q0: 0\n q0 --> q01: 1\n q01 --> q0: 0\n q01 --> q011: 1\n q011 --> q011: 0\n q011 --> q011: 1\n```\n\n* Common mistakes:\n - \\(\\delta(q_0, 0) = q_s\\)\n - \\(\\delta(q_{01}, 0) = q_s\\)\n\n* **Hint:** Name of a state can be used to indicate a state-of-mind\n - \\(q_{01}\\) means \u201cI just see a 0 immediately followed by a 1\u201d", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 590, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bd0e6f61-5219-4b4f-8892-27bab60550eb": {"__data__": {"id_": "bd0e6f61-5219-4b4f-8892-27bab60550eb", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/finite_automata_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "aeb70f03-ef30-43cb-8d7b-034826b0320f", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/finite_automata_01_handout.pdf"}, "hash": "039ba7aa5d20247c37f5788c5b84f0a8175a56b29cf81db48a24ac5acd1e1193", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing Finite Automata\n\n> Suppose the alphabet \\(\\Sigma\\) is \\(\\{0,1\\}\\). Create a machine such that its language is the set of all strings that ends with 0110.\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0 --> q1: 0\n q1 --> q1: 0\n q1 --> q2: 1\n q2 --> q1: 0\n q2 --> q3: 1\n q3 --> q4: 0\n q4 --> q1: 0\n q4 --> q2: 1\n```\n\n* Common mistakes:\n * \\(\\delta(q_2, 0) = q_0\\)\n * \\(\\delta(q_4, 0) = q_0\\)\n * \\(\\delta(q_4, 1) = q_0\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 456, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d2838f67-36f4-4831-a014-b857337be30b": {"__data__": {"id_": "d2838f67-36f4-4831-a014-b857337be30b", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "33bff7e8-f3c8-46ae-aca6-500cc2e861c0", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "44a77232a58a1c16eebe1329b975dca8eacbcda30afaec732dfe03d76e28b151", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata 02\n\nThumrongsak Kosiyatrakul \n`tkosiyat@cs.pitt.edu`", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 72, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ed39f245-795a-4ec8-9158-da35347232c5": {"__data__": {"id_": "ed39f245-795a-4ec8-9158-da35347232c5", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "33537690-b4d2-446c-b019-e412a21967ad", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "840076912dcf93a2d873fc396b6fcc8f3ac4fb704948d493a9e77a111ddbcf87", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata\n\n* The computational model called finite automata can be used to simulate a set of **simple** algorithms\n - Check whether a string starts with 010\n - Check whether a string ends with 111\n - Check whether a string contains 0101 as a substring\n - Check whether a string contains substrings 000 and 111 where 000 comes before 111\n\n* It is a powerful tool in compiler\n - Accept or reject your source code based on a programming syntax\n - Example: the `for` statement:\n * starts with `for`\n * followed by `(`\n * followed by assignment statement(s)\n * followed by `;`\n * followed by conditional statement(s)\n * followed by `;`\n * followed by assignment statement(s)\n * followed by `)`", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 727, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2e0f219a-fbfc-4c6f-a38e-19e2889727c7": {"__data__": {"id_": "2e0f219a-fbfc-4c6f-a38e-19e2889727c7", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "268a753e-cd35-48fb-87f4-2e85619cdbfe", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "9b96cc32b444a7667e5e381b3ded8cafcc11b15ff2d02d275a073c559f0c43de", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Formal Definition of Computation\n\n* Let \\( M = (Q, \\Sigma, \\delta, q_0, F) \\) be a finite automaton and let \n \\( w = w_1 w_2 \\ldots w_n \\) be a string where each \\( w_i \\) is a member of the alphabet \\( \\Sigma \\). \n * \\( M \\) accepts \\( w \\) if a sequence of states \\( r_0, r_1, \\ldots, r_n \\) in \\( Q \\) exists with three conditions: \n 1. \\( r_0 = q_0 \\) \n 2. \\( \\delta(r_i, w_{i+1}) = r_{i+1} \\), where \\( i = 0, \\ldots, n-1 \\) \n 3. \\( r_n \\in F \\) \n\n* Think in terms of processing the input string \\( w \\):\n\n$$\nr_0 \\xrightarrow{w_1} r_1 \\xrightarrow{w_2} r_2 \\xrightarrow{w_3} r_3 \\xrightarrow{w_4} r_4 \\xrightarrow{w_5} \\ldots \\xrightarrow{w_{n-1}} r_{n-1} \\xrightarrow{w_n} r_n\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 705, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "54893ab6-15da-47c9-9580-cd8a73e0b774": {"__data__": {"id_": "54893ab6-15da-47c9-9580-cd8a73e0b774", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "be119211-3583-4fc9-aa84-6f25bbe0590b", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "cf6491dd96e7dbd33f536c4bebe10d2a0d64f165683524fcf4fc823ecea87d69", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Languages\n\n* A language \\( L \\) over an alphabet \\(\\Sigma\\) is said to be a **regular language** if some finite-state automaton recognizes it.\n* Consider the following machine \\( M \\):\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0: q0\n q1: q1\n q0 --> q0: 0\n q1 --> q1: 0\n q0 --> q1: 1\n q1 --> q0: 1\n state q1 {\n <>\n }\n```\n\n* What is the language of this machine?\n * \\( L(M) = \\{ w \\mid w \\text{ contains an odd number of 1s} \\} \\)\n* \"The set of all strings consisting of an odd number of 1s\" is a **regular language**\n* \\( L(M) \\) is a regular language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 602, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9354e623-9464-430a-85c1-ed1a0a685825": {"__data__": {"id_": "9354e623-9464-430a-85c1-ed1a0a685825", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b47aa7d7-b12d-4c11-8bee-de58e5f3cf99", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "546f4746c096a6a662aa9c906e3c008dabc920d03b0fd5ef7b9d0f96b95f2df5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Languages\n\n* Why regular language is important in our discussion?\n * **Definition**: A language is regular if some finite-state machines recognize it.\n * If we can prove that a language is **regular**\n - We must be able to construct a finite-state machine to recognize it\n - It maybe hard to build but I know that it exists\n * If we can prove that a language is **not regular**\n - We cannot construct a finite-state machine to recognize it\n* This is an example of a limitation of this computational model", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 527, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1d42ac74-e520-4691-8b0c-98c26f6390bf": {"__data__": {"id_": "1d42ac74-e520-4691-8b0c-98c26f6390bf", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "da03ca81-8f56-44a7-ad5a-4b3bc91da4ba", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "12a47552f187dbb0504e90b3631288b4c9249be834bcd68d06a5f156e53fcc7d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem and Language\n\n* In theory of computation, a problem is represented as a language \n - A problem of determining whether a string contains 011 as a substring \n\n $$\n L(M) = \\{ x \\mid x \\text{ contains } 011 \\text{ as a substring} \\}\n $$\n\n* We already see a Deterministic Finite Automaton (DFA) \\( M \\) that accepts all strings that contain 011 as a substring and reject those that do not contain 011 as a substring \n* It means this problem is **solvable** by the algorithm captured by the previous DFA \n* In case of algorithm in a form of DFA (not all algorithms) \n - if \\( L(M) \\) is regular, the problem represented by \\( L(M) \\) is solvable \n - if \\( L(M) \\) is not regular, no DFA exists, the problem represented by \\( L(M) \\) is unsolvable", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 763, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "08d1d904-bd85-476c-ba49-7549b52c143f": {"__data__": {"id_": "08d1d904-bd85-476c-ba49-7549b52c143f", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3416562b-b5c6-4c1f-a58c-645041792890", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "6ec0bffd7c05d0c5c287795f4100a2dbcd04230f7ab4817e0bf6b565f28f3c74", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problems and Languages\n\n* Solvable problems that we see so far\n * The problem of determining whether a string ends with a 1\n\n $$\n \\{ x \\mid x \\text{ ends with a } 1 \\}\n $$\n\n * The problem of determining whether a string is an empty string or ends in a 0\n\n $$\n \\{ x \\mid x \\text{ is an empty string or ends in a } 0 \\}\n $$\n\n * The problem of determining whether a string starts and ends with the same symbol\n\n $$\n \\{ x \\mid x \\text{ starts and ends with the same symbol} \\}\n $$\n\n * The problem of determining whether a string contains either 11 or 00 as a substring\n\n $$\n \\{ x \\mid x \\text{ contains either } 11 \\text{ or } 00 \\text{ as a substring} \\}\n $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 674, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a355cba3-44bc-4b3a-83cc-7e65eb817512": {"__data__": {"id_": "a355cba3-44bc-4b3a-83cc-7e65eb817512", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0e1c4cce-b403-4faa-a41d-13d9dee922d5", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "45255ea7181f88747297783f83d06cbbdb5b48e8087a47a44ace4a618d34c8d2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problems and Languages\n\n* Solvable problems that we see so far (continue) \n * The problem of determining whether a string contains 011 as a substring \n $$\\{ x \\mid x \\text{ contains } 011 \\text{ as a substring} \\}$$ \n * The problem of determining whether a string ends with 0110 \n $$\\{ x \\mid x \\text{ ends with } 0110 \\}$$ \n * The problem of determining whether a string contains an odd number of 1s \n $$\\{ x \\mid x \\text{ contains an odd number of } 1s \\}$$ \n\n* Each of the above languages is regular since we can construct a DFA that recognizes it. \n * But if a language is very complicate, it will be difficult to construct a DFA that recognizes it \n\n* We need tools to help us to determine whether a language is regular or not", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 756, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bf5ff473-f3bd-45ec-9e7a-0eeca807cf7e": {"__data__": {"id_": "bf5ff473-f3bd-45ec-9e7a-0eeca807cf7e", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2ee7c1f1-08ad-466c-a7a8-5a529b8e6ee6", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "eed3aca9e1d09dd4bff19ed7481b31b1b0d11690313d6a06447c32183f7d5e81", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Regular Operations\n\n* In arithmetic:\n - Objects are numbers\n - Tools are operations for manipulating numbers (e.g., \\(+\\) and \\(\\times\\))\n * \\(1 + 1\\) gives you a new number which is 2\n\n* In the theory of computation,\n - Objects are languages (sets of strings)\n - Tools are operations for manipulating languages\n\n> **Definition 1.23** \n> Let \\(A\\) and \\(B\\) be languages. We define the regular operations as follows: \n> * **Union:** \n> \\[\n> A \\cup B = \\{ x \\mid x \\in A \\text{ or } x \\in B \\}\n> \\]\n> * **Concatenation:** \n> \\[\n> A \\circ B = \\{ xy \\mid x \\in A \\text{ and } y \\in B \\}\n> \\]\n> * **Star:** \n> \\[\n> A^* = \\{ x_1 x_2 \\ldots x_k \\mid k \\geq 0 \\text{ and each } x_i \\in A \\}\n> \\]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 707, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8cd5aa21-0241-4f9f-b8ca-cc2f8ef438f8": {"__data__": {"id_": "8cd5aa21-0241-4f9f-b8ca-cc2f8ef438f8", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "49118fc0-c987-4507-addb-73640285d570", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "8bb7fc808ff1f21a8a023e6134075c71b28551efea0cef8d12e2807a1ce87b65", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Examples (Union)\n\n* Let \\(\\Sigma = \\{0, 1\\}\\)\n* Consider the following languages \\(A\\) and \\(B\\)\n - \\(A = \\{00, 11\\}\\)\n - \\(B = \\{010, 101\\}\\)\n* The union operation is identical to the set\u2019s union operation:\n\n$$\nA \\cup B = \\{ x \\mid x \\in A \\text{ or } x \\in B \\}\n$$\n\n* From the above definition:\n\n$$\nA \\cup B = \\{00, 11, 010, 101\\}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 340, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "69dae294-3216-4119-a10a-c7bb69dd35f1": {"__data__": {"id_": "69dae294-3216-4119-a10a-c7bb69dd35f1", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "02d0ce3f-56e9-4966-bc7b-fd1d2589d295", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "585cd94647e5923d3fbaef12cb48caadf263269d3ac2358205df462094b96906", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Examples (Concatenation)\n\n* Let \\(\\Sigma = \\{0, 1\\}\\)\n* Consider the following languages \\(A\\) and \\(B\\)\n - \\(A = \\{00, 11\\}\\)\n - \\(B = \\{010, 101\\}\\)\n* The definition of concatenation is defined as\n\n$$\nA \\circ B = \\{ xy \\mid x \\in A \\text{ and } y \\in B \\}\n$$\n\n* From the above definition:\n\n$$\nA \\circ B = \\{00010, 00101, 11010, 11101\\}\n$$\n\n* For simplicity, sometimes we write \\(AB\\) instead of \\(A \\circ B\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 415, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "90d939d0-f4a0-41b4-a27a-4c47a0f636ef": {"__data__": {"id_": "90d939d0-f4a0-41b4-a27a-4c47a0f636ef", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "275bed04-9789-4330-92b4-64cc8e7d3a29", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "002a8050657c749a47eb3af9d63813fc80020f2f6456a7a19548044c7a85408d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Examples (Star)\n\n* Let \\(\\Sigma = \\{0, 1\\}\\)\n* Consider the following language \\(A\\)\n - \\(A = \\{00, 11\\}\\)\n* The definition of star is defined as\n\n$$\nA^* = \\{x_1 x_2 \\ldots x_k \\mid k \\geq 0 \\text{ and } x_i \\in A \\}\n$$\n\n* If \\(k = 0\\), the above definition becomes\n\n$$\n\\{ \\mid 0 \\geq 0 \\} = \\{\\varepsilon\\}\n$$\n\n* If \\(k = 1\\), the above definition becomes\n\n$$\n\\{ x_1 \\mid 1 \\geq 0 \\text{ and } x_i \\in A \\} = \\{00, 11\\}\n$$\n\n* If \\(k = 2\\), the above definition becomes\n\n$$\n\\{ x_1 x_2 \\mid 2 \\geq 0 \\text{ and } x_i \\in A \\} = \\{0000, 0011, 1100, 1111\\}\n$$\n\n* If \\(k = 3\\), the above definition becomes\n\n$$\n\\{ x_1 x_2 x_3 \\mid 3 \\geq 0 \\text{ and } x_i \\in A \\} = \\{000000, 000011, \\ldots, 111111\\}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 705, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "18f7c5e8-a326-43fa-9320-7f64b85b3a91": {"__data__": {"id_": "18f7c5e8-a326-43fa-9320-7f64b85b3a91", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b9b439b9-66bc-47ad-b55c-efeb8d18490c", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "bf82ee5bd6b8e6e71b2595157fff32de71d9090a3beeaf4ed827ccde0afcc38c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Examples (Star)\n\n* Let \\(\\Sigma = \\{0, 1\\}\\)\n* Suppose \\(A = \\{00, 11\\}\\), what is \\(A^*\\)?\n\n $$\n A^* = \\{\\varepsilon, 00, 11, 0000, 0011, 1100, 1111, 000000, \\ldots \\}\n $$\n\n* Suppose \\(A = \\{011\\}\\), what is \\(A^*\\)?\n\n $$\n A^* = \\{\\varepsilon, 011, 011011, 011011011, 011011011011, \\ldots \\}\n $$\n\n* Suppose \\(A = \\{0, 1\\}\\), what is \\(A^*\\)?\n\n $$\n A^* = \\{\\varepsilon, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, \\ldots \\}\n $$\n\n This is the set of all strings over \\(\\{0, 1\\}\\)\n\n* Suppose \\(A = \\emptyset\\), what is \\(A^*\\)?\n\n $$\n A^* = \\{\\varepsilon\\}\n $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 576, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6e93af0b-1548-4d2a-ab0d-1543a6e22af9": {"__data__": {"id_": "6e93af0b-1548-4d2a-ab0d-1543a6e22af9", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f0703d5c-6799-4917-90a1-103fad71995c", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "5d10d6d53637d169226f18761040ba49fee382cd5c41fe103559b06ec60db00b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Definition of Closed Under Operations\n\n* Let \\( A \\) be a set of objects (a collection of object) \n* We say that \\( A \\) is closed under operation \\(\\triangle\\) if for any \\( x \\in A \\) and \\( y \\in A \\), \\( x \\triangle y \\) is also in \\( A \\). \n* Example: Let \\(\\mathbb{N}\\) be the set of natural number \n - \\(\\mathbb{N}\\) is closed under addition \n * For any two natural numbers \\( x \\) and \\( y \\), \\( x + y \\) is a natural number \n - \\(\\mathbb{N}\\) is closed under multiplication \n * For any two natural numbers \\( x \\) and \\( y \\), \\( x \\times y \\) is a natural number \n - \\(\\mathbb{N}\\) is **not** closed under subtraction \n * \\( 5 - 7 \\) is not a natural number", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 691, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e8013bd5-990e-4d6c-af0b-41662875b89e": {"__data__": {"id_": "e8013bd5-990e-4d6c-af0b-41662875b89e", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fb90d954-52f2-440d-bf2a-3d472c8126b5", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "07dd99af9f00630532e63bb72cfd3cb70e44640cdf7d0c22cb7d5ecd4afdfe3b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Definition of Closed Under Operations\n\n* Let \\(\\mathbb{L}\\) be the set of all **regular languages**\n - This is a set of sets\n* Recall that we have three operations, union, concatenation, and star\n* Is \\(\\mathbb{L}\\) closed under **union** operation?\n - For any regular languages \\(A\\) and \\(B\\), is \\(A \\cup B\\) a regular language?\n* Is \\(\\mathbb{L}\\) closed under **concatenation** operation?\n - For any regular languages \\(A\\) and \\(B\\), is \\(A \\circ B\\) a regular language?\n* Is \\(\\mathbb{L}\\) closed under **star** operation?\n - For any regular language \\(A\\), is \\(A^*\\) a regular language?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 602, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2335c1bd-979a-4955-a866-19da3c341988": {"__data__": {"id_": "2335c1bd-979a-4955-a866-19da3c341988", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "42522ea5-c891-4f9c-b164-fd0c950ddac0", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "f617e6a3c1b13a435eb229c3380f99507af4130c75b5f426b95ee85617b54997", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \\( \\mathcal{L} \\) is regular under union operation\n\n* Let \\( A \\) be a set of strings over \\(\\{0,1\\}\\) that contain a **00** as a substring \n* Is \\( A \\) a regular language? \n* Can you construct a DFA that recognizes the language \\( A \\)? \n* One of the machines that recognizes \\( A \\) can be as follows:\n\n```mermaid\nstateDiagram-v2\n [*] --> q_a\n q_a: qa\n q_b: qb\n q_c: qc (accepting)\n q_a --> q_a: 1\n q_a --> q_b: 0\n q_b --> q_a: 1\n q_b --> q_c: 0\n q_c --> q_c: 0,1\n```\n\n* Because there exists a DFA that recognizes \\( A \\), \\( A \\) is a regular language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 588, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ae3dbe2a-c5e2-4c6d-b147-a384b340e9e8": {"__data__": {"id_": "ae3dbe2a-c5e2-4c6d-b147-a384b340e9e8", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e27e0b80-9c95-4db7-a28f-d1bad7cf1e4a", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "b7abd3ceea753cb1994f24ff45caca3c06168d7f999b79c29dbf0dd21cd5ed18", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \ud835\udcdb is regular under union operation\n\n* Let \\( B \\) be a set of strings over \\(\\{0, 1\\}\\) that end with a 1 \n* Is \\( B \\) a regular language? \n* Can you construct a DFA that recognizes the language \\( B \\)? \n* One of the machines that recognizes \\( B \\) can be as follows:\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0 --> q0: 0\n q0 --> q1: 1\n q1 --> q0: 0\n q1 --> q1: 1\n state q1 {\n <>\n }\n```\n\n* Because there exists a DFA that recognizes \\( B \\), \\( B \\) is a regular language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 519, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "10ad9e4e-1e48-4b92-b804-d134f671fc21": {"__data__": {"id_": "10ad9e4e-1e48-4b92-b804-d134f671fc21", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "02dedd44-c93f-451f-90c8-c93c4619bcee", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "d85c393142d728202bbea539da4a9656156f3b2f76bc04c5fb1fb64d35a42a72", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \ud835\udcdb is regular under union operation\n\n* We have \\( A = \\{ x \\mid x \\text{ contains } 00 \\text{ as a substring} \\} \\) is regular \n* We have \\( B = \\{ x \\mid x \\text{ ends with a } 1 \\} \\) is regular \n* How about \\( A \\cup B \\)? \n \\[\n A \\cup B = \\{ x \\mid x \\text{ contains } 00 \\text{ as a substring or } x \\text{ ends with a } 1 \\}\n \\] \n* It is quite straightforward to construct a machine that recognizes \\( A \\cup B \\) (try to build one yourself)\n\nMermaid diagram representing the finite automaton:\n\n```mermaid\nstateDiagram-v2\n [*] --> S0\n S0 --> S1: 1\n S0 --> S2: 0\n S1 --> S1: 1\n S1 --> S2: 0\n S2 --> S3: 0\n S2 --> S0: 1\n S3 --> S3: 0,1\n state S1 {\n <>\n }\n state S3 {\n <>\n }\n```\n\n* This does not prove that if \\( A \\) and \\( B \\) are regular, \\( A \\cup B \\) is regular \n - This is just one example out of infinite many instances of regular languages", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 928, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "64c67597-ebd6-494d-8dc9-4b3ac4a18833": {"__data__": {"id_": "64c67597-ebd6-494d-8dc9-4b3ac4a18833", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2004be53-d697-4701-b9e9-4e860e877b1b", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "e11ce36a8a44d06d4ec9be762ae424356c73e01da85432b8e3eb12465cf60544", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \ud835\udcdb is regular under union operation\n\n* We need to show that for any two regular languages \\( A \\) and \\( B \\), \n \\( A \\cup B \\) is regular \n* Given a regular language \\( A \\) over a \\(\\Sigma\\), what do we know about the language \\( A \\)? \n - There exists a DFA \\( M_A \\) that recognizes \\( A \\) \\((L(M_A) = A)\\) \n - \\( M_A = (Q_A, \\Sigma, \\delta_A, q_A, F_A) \\) for some \\( Q_A, \\delta_A, q_A, \\) and \\( F_A \\) \n* Similarly, given a regular language \\( B \\) over a \\(\\Sigma\\): \n - There exists a DFA \\( M_B \\) that recognizes \\( B \\) \\((L(M_B) = B)\\) \n - \\( M_B = (Q_B, \\Sigma, \\delta_B, q_B, F_B) \\) for some \\( Q_B, \\delta_B, q_B, \\) and \\( F_B \\) \n* To show that \\( A \\cup B \\) is regular for any regular languages \\( A \\) and \\( B \\), we need to construct a DFA that recognizes \\( A \\cup B \\) from \\( M_A \\) and \\( M_B \\) \n - To understand the process, we are going to work on a specific example", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 916, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "874c2b98-79a1-48a7-bcea-cde96aa66863": {"__data__": {"id_": "874c2b98-79a1-48a7-bcea-cde96aa66863", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "90e56275-c3e3-40a1-9482-8550ba5323f0", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "028ae8a4cac2a20539e368c16c999a93469de3c197c435ded161512ddafdd3f0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \\( L \\) is regular under union operation\n\n* Recall the previous two regular languages and its DFAs where \n \\[\n \\Sigma = \\{0, 1\\}\n \\]\n\n* \\( A = \\{ x \\mid x \\text{ contains } 00 \\text{ as a substring} \\} \\)\n\n```mermaid\nstateDiagram-v2\n [*] --> q_a\n q_a --> q_a: 1\n q_a --> q_b: 0\n q_b --> q_c: 0\n q_b --> q_a: 1\n q_c --> q_c: 0,1\n state q_c {\n <>\n }\n```\n\n\\[\nM_A = (Q_A, \\Sigma, \\delta_A, q_A, F_A) \\quad \\text{and} \\quad L(M_A) = A\n\\]\n\n* \\( B = \\{ x \\mid x \\text{ ends with a } 1 \\} \\)\n\n```mermaid\nstateDiagram-v2\n [*] --> q_0\n q_0 --> q_0: 0\n q_0 --> q_1: 1\n q_1 --> q_0: 0\n q_1 --> q_1: 1\n state q_1 {\n <>\n }\n```\n\n\\[\nM_B = (Q_B, \\Sigma, \\delta_B, q_B, F_B) \\quad \\text{and} \\quad L(M_B) = B\n\\]\n\n* Given a string \\( w \\) and these two DFAs, how to check whether \n \\( w \\in A \\cup B \\)?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 862, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "62f33d6a-d279-4ba8-98cc-89a9c3fd415f": {"__data__": {"id_": "62f33d6a-d279-4ba8-98cc-89a9c3fd415f", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e1692368-fbc4-4cce-8e92-31446be6d163", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "44ee3adc2702ebcd6bf40899cad9b7be852ed7b3da02dc8300cc62ba1f768c8e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \ud835\udcdb is regular under union operation\n\n* Recall that \\( A = L(M_A) \\) and \\( B = L(M_B) \\) \n - Thus, \\( A \\cup B = L(M_A) \\cup L(M_B) \\)\n\n* \\( w \\in A \\cup B \\) \n iff \\( w \\in A \\) or \\( w \\in B \\) \n iff \\( w \\in L(M_A) \\) or \\( w \\in L(M_B) \\) \n iff \\( M_A \\) accepts \\( w \\) or \\( w \\in L(M_B) \\) \n iff \\( M_A \\) accepts \\( w \\) or \\( M_B \\) accepts \\( w \\)\n\n* In other words, \n $$\n w \\in A \\cup B \\text{ if and only if } M_A \\text{ accepts } w \\text{ or } M_B \\text{ accepts } w\n $$\n\n* To check whether \\( w \\in A \\cup B \\): \n - Run both \\( M_A \\) and \\( M_B \\) on input \\( w \\) \n - If one of them or both accepts \\( w \\), then \\( w \\in A \\cup B \\) \n - If both reject \\( w \\), then \\( w \\notin A \\cup B \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 728, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f0095c55-0c0d-430f-8445-dcfe95b820b9": {"__data__": {"id_": "f0095c55-0c0d-430f-8445-dcfe95b820b9", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f5d499ab-869a-40d6-94ae-93acf0a76d5f", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "4fd0b3635e772156121868d75985336c698c11c545a5e92355a2bc6a1e8028f6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \ud835\udcdb is regular under union operation\n\n* We can run both machines simultaneously\n\n Diagram of two automata:\n\n - First automaton:\n \n States: \n - \\( q_a \\) (initial) \n - \\( q_b \\) \n - \\( q_c \\) (accepting) \n \n Transitions: \n - \\( q_a \\xrightarrow{0} q_b \\) \n - \\( q_b \\xrightarrow{0} q_c \\) \n - \\( q_a \\xrightarrow{1} q_a \\) (loop) \n - \\( q_b \\xrightarrow{1} q_a \\) \n - \\( q_c \\xrightarrow{0,1} q_c \\) (loop) \n\n - Second automaton:\n \n States: \n - \\( q_0 \\) (initial) \n - \\( q_1 \\) (accepting) \n \n Transitions: \n - \\( q_0 \\xrightarrow{0} q_0 \\) (loop) \n - \\( q_0 \\xrightarrow{1} q_1 \\) \n - \\( q_1 \\xrightarrow{0} q_0 \\) \n - \\( q_1 \\xrightarrow{1} q_1 \\) (loop) \n\n* Let state \\((p, q)\\) represent the situation where \n - The current state of \\( M_A \\) is \\( p \\) \n - The current state of \\( M_B \\) is \\( q \\) \n\n* With the new notion of states, we have the combined automaton:\n\n States and transitions:\n\n - \\((q_a, q_0)\\) (initial) \n - \\(\\xrightarrow{0} (q_b, q_0)\\) \n - \\(\\xrightarrow{1} (q_a, q_1)\\) \n\n - \\((q_b, q_0)\\) \n - \\(\\xrightarrow{0} (q_c, q_0)\\) \n - \\(\\xrightarrow{1} (q_a, q_1)\\) \n\n - \\((q_c, q_0)\\) (accepting) \n - \\(\\xrightarrow{0} (q_c, q_0)\\) (loop) \n - \\(\\xrightarrow{1} (q_c, q_1)\\) \n\n - \\((q_a, q_1)\\) (accepting) \n - \\(\\xrightarrow{0} (q_b, q_1)\\) \n - \\(\\xrightarrow{1} (q_a, q_1)\\) (loop) \n\n - \\((q_b, q_1)\\) (accepting) \n - \\(\\xrightarrow{0} (q_c, q_1)\\) \n - \\(\\xrightarrow{1} (q_a, q_1)\\) \n\n - \\((q_c, q_1)\\) (accepting) \n - \\(\\xrightarrow{0} (q_c, q_1)\\) (loop) \n - \\(\\xrightarrow{1} (q_c, q_1)\\) (loop) \n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 02", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1746, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "12441627-7081-4502-aa8c-a48eb0f873c3": {"__data__": {"id_": "12441627-7081-4502-aa8c-a48eb0f873c3", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "66271a71-762d-41d1-a48a-b64ecccc8575", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "6a9fe84d5c7549189b80a2941dc5d6938863a4d60e203c95f1637bd32f90ec1b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \ud835\udcdb is regular under union operation\n\n* Let \\( M_A \\) recognizes \\( A \\), where \\( M_A = (Q_A, \\Sigma, \\delta_A, q_A, F_A) \\) \n* Let \\( M_B \\) recognizes \\( B \\), where \\( M_B = (Q_B, \\Sigma, \\delta_B, q_B, F_B) \\) \n* Machine \\( M = (Q, \\Sigma, \\delta, q_0, F) \\) that recognizes \\( A \\cup B \\) can be constructed as follows: \n 1. \\( Q = \\{(r_1, r_2) \\mid r_1 \\in Q_A \\text{ and } r_2 \\in Q_B \\} \\) \n 2. For each \\((r_1, r_2) \\in Q\\) and \\(a \\in \\Sigma\\) \n $$\n \\delta((r_1, r_2), a) = (\\delta_A(r_1, a), \\delta_B(r_2, a))\n $$ \n 3. \\( q_0 = (q_A, q_B) \\) \n 4. \\( F = \\{(r_1, r_2) \\mid r_1 \\in F_A \\text{ or } r_2 \\in F_B \\} \\) \n\n* To recognize \\( A \\cap B \\), simply change the set of accept states to \n$$\nF = \\{(r_1, r_2) \\mid r_1 \\in F_A \\text{ and } r_2 \\in F_B \\}\n$$\n\n* If \\( A \\) and \\( B \\) are regular languages, \\( A \\cup B \\) is regular", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 861, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b281dca1-cd39-4065-a83b-8a211768ca28": {"__data__": {"id_": "b281dca1-cd39-4065-a83b-8a211768ca28", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/finite_automata_02_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bb822432-da73-4cb8-aa49-791fdade5749", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/finite_automata_02_handout.pdf"}, "hash": "5dd972e802556fab0775f26360267cc53a05b2c2222006c2fb084cb5cc5758aa", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Conclusions\n\n* A language is regular if it is recognized by some finite-state machines \n - If you can prove that a language is regular: \n * there exists a finite-state machine that recognizes it \n - If you can prove that a language is **not** regular: \n * there is no finite-state machine that recognizes it \n* In formally, we show that if \\( A \\) and \\( B \\) are regular languages, \n \\( A \\cup B \\) is a regular language \n* To prove the closure of concatenation and star operators, we need a sightly different computational model", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 549, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "32028989-b629-4e4e-ab5c-c5551c1ac592": {"__data__": {"id_": "32028989-b629-4e4e-ab5c-c5551c1ac592", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f5741d7c-21a6-41f5-9738-575ca347de0c", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "2ee956496f717e8e2b7440f1efb581fbc75d219f574d239ec543b9b13cd3a2c5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L13 Intro to System Design\n\nCS 1530 Software Engineering \nNadine von Frankenberg \n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 165, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e49ddd5d-01f3-48f1-9ac6-c9dc783179a3": {"__data__": {"id_": "e49ddd5d-01f3-48f1-9ac6-c9dc783179a3", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c7de38fd-d9aa-4c33-88ec-a44be9ff7b9d", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "e3aa022a4aa5ac4c39b3b978b39521cacde57835cbc7994f32e5fe17c5f613fe", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet.\n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes.\n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n* Material from these notes is obtained from various sources, including, but not limited to, the following:\n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994.\n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011.\n - http://scrum.org/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1362, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4dc4830f-ff65-450e-b281-feb4d5e76249": {"__data__": {"id_": "4dc4830f-ff65-450e-b281-feb4d5e76249", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fcd0446e-c5a4-4381-9364-3d1156892065", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "24ee041541c5c61d1338f30bfda13897bf542e2135f6c2e5230048e118f7e04e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* Understand the purpose of system design \n* You can formulate design goals \n* You understand the purpose of modeling a workflow", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 149, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b1e59573-5fad-48ae-9ddd-3c070c6f789a": {"__data__": {"id_": "b1e59573-5fad-48ae-9ddd-3c070c6f789a", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d859ca18-b279-4b2c-9da1-f2f307c69980", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "1b3fd721fcf6c0f698a078f96547b34a19fbd316a1d496ef6503efbca16080d4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Recap: Analysis\n - Analysis object model\n - Modeling access\n* System design overview\n* Design goals\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 149, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1c277a74-fc74-4126-bf3b-05ba93e183fc": {"__data__": {"id_": "1c277a74-fc74-4126-bf3b-05ba93e183fc", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "68f97990-1b07-476b-b1aa-dcde472bf156", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "b596d601e15e3b601806544930b2ba95534d1ce3feb3913d8d5422cfdd90a839", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# I12 Pizza ordering system \ud83d\udc40 Review\n\n**Problem statement \u2014 Design a pizza ordering system**\n\n> \u201cStudents can order pizzas with varying sizes and choose from various toppings. After selecting their pizzas, they confirm the delivery type (pickup or dorm delivery) and pay. Once an order is placed, the pizza baker receives it and confirms the order. Students can then check the expected time until the pizza is ready (for pickup) or until delivery. In addition to regular pizzas (Margherita, Pepperoni, Mushroom), the pizza baker can also prepare two special types of pizzas: Hawaiian or Yinzer.\"\n\n**Your task:** Model this system using a UML class diagram.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 657, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "473e6e07-1bb8-4d52-bb09-3f90a64fdfd5": {"__data__": {"id_": "473e6e07-1bb8-4d52-bb09-3f90a64fdfd5", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8715f287-f413-404e-89b7-7d16ac6ff86f", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "4e40f6490850e2b5b60844285f64c643e8b95f01b8f1c16908db4d0a5395671a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Pizza ordering system\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n \n\n \n\n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n\n\n\n\n \n\n \n\n\n\n\n\n \n\n \n\n\n\n\n\n \n \n
BakerPizzaTopping
nameanchovyLoversizename
makePizza()priceamount
bake()isVegetarian()
StudentcalculateExpectedTime()
nameisHungryorder()
isVegetarian
eat()
\n\n\n \n \n \n \n \n \n \n \n \n\n \n \n
HawaiianPizzaYinzerPizza
addExtraPineapple()addExtraFries()
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1257, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0b025cc9-77e7-44f5-9cd3-de54d0a6aad4": {"__data__": {"id_": "0b025cc9-77e7-44f5-9cd3-de54d0a6aad4", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ff6839ec-42bd-4037-96c8-bafd3557384e", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "2d66c7e680afd3f57b4bdac9eecb29012951c3de66cb12fa128091d2d0ba5f58", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** Pizza ordering system\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n\n \n\n \n\n \n\n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n
BakerOrderPizza
name*totalPrice\n \n\n\n \n \n\n\n\n\n\n\n\n \n
name
description
size
toppings[]: Topping
isVegetarian()
addTopping()
removeTopping()
\n\n
anchovyLoverdeliveryType
makePizza()
Student*complete()
namecalculateExpectedTime()
emailcreate()
address
notify()
\n\n\n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
Payment
methodHawaiianPizzaYinzerPizza
amountaddExtraPineapple()addExtraFries()
status
processPayment()
\n\n* Relationships and multiplicities:\n - Baker to Order: *\n - Student to Order: *\n - Order to Pizza: 1..10\n - Student to Payment (paymentMethods): 0..3", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1784, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1118c353-18fb-483a-8671-6a195dfa9e0f": {"__data__": {"id_": "1118c353-18fb-483a-8671-6a195dfa9e0f", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "826ce114-e57e-492d-9d36-db999b785c38", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "e7bedc25f36d8613bb4d46e56bc7a6f3f80e383a4cd461856b42eac7d49eaee2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Identifying access\n\n\n \n \n \n \n \n \n \n \n\n \n \n
InvestmentManager
nameaddress
\n\n> Owner and InvestmentManager can view the balance. Owner can withdraw money.\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
OwnerBankAccount
namewithdraw() >number
addressbalance
creditScoreviewBalance()
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 671, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1022f269-ec9e-43d7-9430-c959108fbf5b": {"__data__": {"id_": "1022f269-ec9e-43d7-9430-c959108fbf5b", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "34562b9e-41b0-4c55-b91c-a8e68e78c5de", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "cd33f2968b18302f6e7ea6ceb03a3272467d50c9b2d2d26dc92a4c665532cc1d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Identifying access - Detailed\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n
OwnerInvestmentManager
BankAccountviewBalance()
withdraw()
viewBalance()
\n\n> Access matrix\n\n----\n\n\n \n \n \n \n \n \n \n \n \n\n \n \n
InvestmentManager
name
address
\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n \n
OwnerBankAccount
name
address
creditScore
number
balance
viewBalance()
withdraw(): Money
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 876, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "64a55c16-2ca8-46f2-9df6-f0446a1f8a4d": {"__data__": {"id_": "64a55c16-2ca8-46f2-9df6-f0446a1f8a4d", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "652b823a-51d6-4dd5-8a32-a9439ec86d14", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "deab65b02a737161b573f80796191716b8c6fc2440a19a9c8924675247377d72", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Access Matrix\n\n* Access control: Defines access permissions for entities and objects \n* Permissions: Provides detailed, fine-grained access control \n* Security: Forms the basis for system security analysis and policies \n* The rows of the matrix represents the actors of the system \n* The column represent classes whose access we want to control \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OwnerInvestmentManager\n
\n An entry in the access matrix represents an **access right** \n Lists the operations that can be executed by the actor on instances of the class\n
\n
BankAccount\n viewBalance()
\n withdraw()\n
viewBalance()
SupportDeskcontact()
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 866, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ec1ea724-9db0-4b4c-bc81-3033ca2aa3a9": {"__data__": {"id_": "ec1ea724-9db0-4b4c-bc81-3033ca2aa3a9", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5c97d1bd-fb04-4323-85fc-1cb5de8a908e", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "61c25cabda3f2b7e78f5d7b41016e68ae0b9c1571d42c8be6ecb2a456cceb8b9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Recap: Analysis\n* System design overview\n* Design goals", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 77, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "16ccf850-39d9-468a-a6c7-e101b61a4fa7": {"__data__": {"id_": "16ccf850-39d9-468a-a6c7-e101b61a4fa7", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f2b5f1a1-6867-41fc-8227-8ec99b6cea22", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "9cec7b62cb943fa693965166fde883dd465cd8262b77d5bb7a5f0062eab8a356", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing software systems\n\n> *There are two ways of constructing a software design.* \n> *One way is to make it so simple* \n> *that there are obviously no deficiencies.* \n> *And the other way is to make it so complicated* \n> *that there are no obvious deficiencies.* \n> \u2014 C.A.R. Hoare", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 292, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0511dd64-02e5-435d-8358-a45954132916": {"__data__": {"id_": "0511dd64-02e5-435d-8358-a45954132916", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "177e0539-83a6-4ee6-b85b-8120da8f2bcd", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "2cb6eb21a63d0fa9603ccc61ea36dc1bab62afdb394ab5e46cd511da6c566239", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing software systems\n\n* Design is a dynamic and creative problem-solving activity\n* It is difficult - there is no concrete recipe or one-size-fits-all approach\n* It requires adaptability and tailoring to the specific context\n* The quality of a system's design and its designer directly impacts the system's performance, longevity, and overall success", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 359, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4eb73dd6-245f-4699-be61-33c5dcad8f6d": {"__data__": {"id_": "4eb73dd6-245f-4699-be61-33c5dcad8f6d", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5d4ffcbd-0aa5-4ecc-8f27-26f90df73d2d", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "cc87d8939e06b517c72245cda9dfb4bc0b5d5fe84edf730eb8e258da2c99e449", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# System Design\n\n* For each feature, there are many variants to accomplish the desired behavior\n - What are the differences between the variants?\n - Which variant should we choose?\n\n**Example** \nFR11 Search for Product: The consumer can search for a product.\n\n> Which one to pick?\n\nSimple Search\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003Search Engine \n\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003\u2003(e.g., ElasticSearch)\n\n**It depends!** on the goals \non the context", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 437, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "be86bcee-6fd6-45f8-a723-7136f6d86f33": {"__data__": {"id_": "be86bcee-6fd6-45f8-a723-7136f6d86f33", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "14b3ded6-2db4-4f6a-8be6-d6092bcfce2a", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "308f0c3cc5807a9ef89af7b435a20ffd452f9a57773ed67bb1301f9ba6160c91", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# How to implement a system?\n\n* System design bridges the gap between requirements analysis and implementation\n* Goal: Allocate the requirements to hardware and software components\n - It helps to translate abstract ideas into concrete, organized systems\n* Comprises three main steps:\n 1. Choose a **high-level strategy for solving-problem**\n 2. Decide how to **organize the system** into subsystems\n 3. **Map subsystems to** HW and SW **components**\n - Decide on the \"tech stack\"\n - Decide on \"build or buy\"\n - \u2026\n\n----\n\n**Diagram:**\n\nProblem", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 558, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d5bdcc19-7352-42fe-bb3f-6515f67612f8": {"__data__": {"id_": "d5bdcc19-7352-42fe-bb3f-6515f67612f8", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d224812f-ed2c-48b6-8b0d-4b85b6056a6d", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "e34e2bb2863000d0f683e839d62036aa2a0341344eb9e611f44cfa9a2b445176", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing Software Systems\n\n* Object-Oriented Requirements **Analysis**\n - Understand the problem\n - Identify the key concepts and their relationships\n - Build a (visual) vocabulary\n - Create an application domain model (conceptual model) ![Analysis Object Model]\n\n* Object-Oriented **Design**\n - Assign responsibilities (attributes, methods)\n - Explore behavior with interaction diagrams\n - Explore design alternatives\n\n* **Implementation**\n - Map designs to code, implementing classes and methods", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 509, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "13ab6c13-c02c-4a99-9110-5dfafca14a4b": {"__data__": {"id_": "13ab6c13-c02c-4a99-9110-5dfafca14a4b", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "65ffad4d-a233-48b3-a13e-ecf477ded187", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "79c778afc6dec75d40cb69ff02c10e6ec2880fb0cec8a0f82188b72845cad9ec", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Important system design principles\n\n1. **Separation of concerns** \n * Divide the system into separate aspects or concerns \n * Helps to keep the system organized\n\n2. **Abstraction** hides complex implementation details, simplified interfaces\n\n3. **Modularity** promotes code reusability and simplifies maintenance\n\n4. **Encapsulation** restricts direct access to data (data integrity) \n * Makes changes to the implementation easier without affecting other parts of the system\n\n5. **Consistency** promotes readability, maintainability, integrity\n\n6. **Simplicity** reduces complexity", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 593, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "251c8e79-c925-4387-9cad-7462c94f0383": {"__data__": {"id_": "251c8e79-c925-4387-9cad-7462c94f0383", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "19341d89-e6ff-4743-940c-b22f9a3293e5", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "05eca7e35569e929614a597ee1043f34831b085b9967c8f8163076bdbce379e7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# System design concepts \u2014 Overview\n\n* Design goals \n* Control flow \n* Subsystem decomposition \n* HW/SW mapping \n* Data management \n* Access control \n* Boundary conditions", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 178, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "878b61fa-d1d7-4c4e-936c-ec9995cc92d7": {"__data__": {"id_": "878b61fa-d1d7-4c4e-936c-ec9995cc92d7", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e8c640c8-7e65-4cca-9734-1bd2a956f7e7", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "9a79dd4b16340a7830099dee6d6693e5d23e8933cc4c571818b1f999086e1145", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Recap: Analysis\n* System design\n* Design goals\n - Types\n - Trade-offs", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 93, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a6ba10e8-ee3c-4199-98f2-a3406d8f17a6": {"__data__": {"id_": "a6ba10e8-ee3c-4199-98f2-a3406d8f17a6", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e614d752-bcf5-49a5-9fc9-7883c532d2d9", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "9d1b2e574a13148b300d9b5af6a0634b4ad1013c2f3a082a9be5bd953d52fbad", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# So far \u2026\n\n* Identified requirements\n* Analysis object model (domain model)\n\n* Now, define the concrete messages and behavior of/between objects\n* How?\n - How should concepts be implemented by classes? \n - How should the objects interact exactly? Time-frame?\n\n> This is a critical, important, and non-trivial task!", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 319, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c0b8b459-ef0b-4173-b93d-cfa855c0d6e9": {"__data__": {"id_": "c0b8b459-ef0b-4173-b93d-cfa855c0d6e9", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dc2a682f-573e-40c2-9bcf-343269d2a6dc", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "712994a3ad6a0a1242651c166d96d7a958db06a458b3a1051e9a8581c7275063", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Goal of Software (Software Quality)\n\n* Functional correctness\n* Robustness\n* Flexibility\n* Reusability\n* Efficiency\n* Scalability\n* Security", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 143, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9d03caec-492b-42c8-a666-597aed8a1ff6": {"__data__": {"id_": "9d03caec-492b-42c8-a666-597aed8a1ff6", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "94174a27-1550-49dd-bc2e-f888f9496523", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "a66c311348c35c885fce6e003efc556cf8426c2557295551ec2dccaee18157a4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing for change\n\n* *\u2026 accept the fact of change as a way of life, rather than an untoward and annoying exception* \n \u2013 Brooks, 1974\n* *Software that does not change becomes useless over time* \n \u2013 Belady and Lehman\n\n* The biggest cost is typically not building the system but evolving the system! \n - Reducing the cost of change is important when designing software systems\n\n\n \n \n\n\n\n\n \n\n \n \n
implementation & maintenance by single personcomprehensible by a single personcomplex system
Design for division of labor
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 679, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "024d6068-4e46-43d9-8a3b-7c1598e98d50": {"__data__": {"id_": "024d6068-4e46-43d9-8a3b-7c1598e98d50", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6db89246-18d0-47d7-85af-16b2dc31cd15", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "018c3f40cf83fb1495d598bc78c4762ac780bcd432696f93f25ac2c1b16ac807", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Design goals\n\nDesign goals identify and describe the **qualities the system should focus on**\n\n* Often phrased as statements a team makes about the quality of experience they would like a system to attain\n* Design goals can be **inferred from the non-functional requirements** or from the application domain\n - Design goals are often generalized non-functional requirements\n - Active Elicitation: Some design goals must be actively elicited through conversations with clients or stakeholders; metrics, design methodologies, and implementation goals are valuable sources", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 574, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6c5e7bcc-e38e-47c6-b36b-cbb890ca402f": {"__data__": {"id_": "6c5e7bcc-e38e-47c6-b36b-cbb890ca402f", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d84d45e6-be5a-42db-a647-b6cc84755468", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "4504dc772b48f8ba8004994fc569a7db0d9ce65bdcf8e78106ab0d0f78df7029", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Design goals (cont.)\n\n* Typically non-prescriptive and more abstract\n* Focus on the concerns of designers, architects, and developers\n* Often a prioritization of non-functional requirements: **trade-offs** guide the development\n* Design goals describe the overarching objectives for the system's architecture and design", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 322, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ebed2dc9-9faf-4ec0-97b7-917c0f01cfda": {"__data__": {"id_": "ebed2dc9-9faf-4ec0-97b7-917c0f01cfda", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5eb418ed-3041-4ad6-8bd9-b8129cae2861", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "8ac0ed3169f2b35bcfd29d6407bcf27fbb098d03ccfa64a763d175c5cb8acc33", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Types of design goals \u2014 Customer\n\n* Cost\n - **Development cost** \u2014 Cost of developing the (initial) system\n - **Deployment cost** \u2014 Cost of installing the system and training the users\n - **Upgrade cost** \u2014 Expenses associated with data migration and backward compatibility requirements\n - **Maintenance cost** \u2014 Resources needed to handle future bug fixes and enhancements to the system\n - **Administration cost** \u2014 Cost required for administering and managing the system", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 480, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6f40f275-021e-4f4a-a7ef-8c12671097f0": {"__data__": {"id_": "6f40f275-021e-4f4a-a7ef-8c12671097f0", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d01b286d-3cce-46f2-a9ae-f0708d27e75d", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "5c9e4c3ca41cdedeeb5b579f3c885461b3cd6d43f70619a1addb5659d27e7c2d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Types of design goals \u2014 Customer\n\n* Maintenance\n - **Extensibility** \u2014 How easy is it to add functionality or new classes to the system?\n - **Modifiability** \u2014 How easy is it to change the functionality of the system?\n - **Adaptability** \u2014 How easy is it to port the system to different application domains?\n - **Portability** \u2014 How easy is it to port the system to different platforms?\n - **Readability** \u2014 How easy is it to understand the system from reading the code?\n - **Traceability of requirements** \u2014 How easy is it to map the code to specific requirements?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 574, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e445d215-3d9f-4f88-8b66-b54af187dbfb": {"__data__": {"id_": "e445d215-3d9f-4f88-8b66-b54af187dbfb", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bf16fd0c-21c0-41d5-93fe-5b78e601078a", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "f8e27d73f9c3be1898f7ce222b5126cbd11a6adda96c8ccae9e29ca4d7200892", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Types of design goals \u2014 End-user\n\n* **Utility** \u2014 How well does the system support user tasks and goals? \n* **Usability** \u2014 How easy is it for the user to interact with the system? \n* **Cost** \u2014 How much does it cost to use the system? (free vs one-time payment vs future costs)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 283, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "86d1181b-979c-456a-ad72-4c6db3942256": {"__data__": {"id_": "86d1181b-979c-456a-ad72-4c6db3942256", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a37f829a-0fd3-494b-b314-c279ba3c2d65", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "bfa34e30b870043f94ee68c68ce55dc01cadc558afd1277d3813c5370414437c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Types of design goals \u2014 Developer\n\n* Performance \n - **Response time** \u2014 How quickly does the system respond after receiving a user requests? \n - **Throughput** \u2014 How many tasks can the system accomplish within a fixed time frame? \n - **Memory** \u2014 How much space is necessary for the system to operate efficiently? \n\n* Dependability \n - **Robustness** \u2014 Ability to handle invalid user input \n - **Reliability** \u2014 Difference between specified and actual behavior \n - **Availability** \u2014 Percentage of time the system is available for normal tasks without downtime \n - **Fault tolerance** \u2014 Ability to continue operating in the presence of errors or failures \n - **Security** \u2014 Ability to protect against malicious attacks, unauthorized access, data breaches \n - **Safety** \u2014 System's ability to prevent endangering human lives, even in the presence of errors and failures", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 891, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e06064ef-047e-4e1e-bf8e-47ed84133f39": {"__data__": {"id_": "e06064ef-047e-4e1e-bf8e-47ed84133f39", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b9d7d631-e605-4c87-91b3-8f92585b11f5", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "7ee17a241574c5ad349236dc30377d528f726a06f5d8719e0063df6b90f6c59d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "Design goals interests overlap University of\n (Example) Pittsburgh\n\n Portability\n Portability\n Customer Developer\n\n Reliability\n Reliability\n Reliability\n\n Usability Consistency\n Usability Consistency\n\n End-user\n\n\u00a9 2025 Nadine von Frankenberg CS 1530 - L13 Intro to System Design 29", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 424, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "62861af4-7d71-4d9a-9a3b-a03f2506e9ae": {"__data__": {"id_": "62861af4-7d71-4d9a-9a3b-a03f2506e9ae", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1d8e5a67-9ec0-4f33-afd8-5a97a8e192c9", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "55a88f98a58c5822106a49c22a77681431af887dfebda5f99960129ab3d05abe", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Requirements vs design goals\n\n**Requirements** define **what the software system must do** \n* \"What does the system need to accomplish in terms of functionality, features, and constraints?\" \n* Typically detailed and specific, providing clear instructions on how the system should behave \n* Focus on addressing the needs and expectations of stakeholders, including end-users, clients, and regulators \n* Early stage definition (requirements elicitation, analysis) \n\n**Design goals** identify and describe the **qualities the system should focus on** \n* What should be prioritized? \n* What is the overarching goal of the entire system?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 642, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7b42f4d8-434d-4f8f-a038-86e5566150d0": {"__data__": {"id_": "7b42f4d8-434d-4f8f-a038-86e5566150d0", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bb591a49-da5c-4f82-9898-0d2a0d9ae501", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "25fc0ecc774db5e1a2ae575bd1c7a561daeb415d840f9ddcadd2a0c832469889", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example]\n\n* Functional Requirements *simplified\n - **FR1 Access Lab Result:** Patients should be able to securely access their lab test results.\n - **FR2 Book Appointment:** Patients should be able to book an appointment with their healthcare provider.\n - **FR3 Authenticate:** Patients and doctors must authenticate themselves to protect patient data.\n\n* Non-functional Requirements *simplified\n - **NFR 1 Security:** Ensure patient data privacy and compliance with healthcare data regulations (HIPAA).\n - **NFR 2 Usability:** Design an intuitive and user-friendly interface for patients of all technical skill levels, so that they can navigate it without needing a manual.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 683, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3b894284-4fab-4e8e-bb3d-3b9d35e1b2b0": {"__data__": {"id_": "3b894284-4fab-4e8e-bb3d-3b9d35e1b2b0", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d4f282e5-53b9-4e70-9933-c9dbe963e10b", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "147e4a46d341a0409745f570cc6708d6fac0af9888eea485fe2c1d9507603d58", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example]\n\n## Design Goals\n\n* **DG1 Usability and User Experience:** Ensure the app is easy to navigate, with a clean and intuitive user interface to provide a positive user experience for patients, reducing the learning curve and frustration.\n* **DG2 Security and Privacy:** Implement robust security measures to protect patient data to maintain patient trust and comply with healthcare data privacy regulations.\n* **DG3 Scalability:** Design a scalable architecture to handle increased user loads to accommodate the number of patients using the system without performance degradation.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 589, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9c693b31-9619-4fe7-aefd-3fdf2228f520": {"__data__": {"id_": "9c693b31-9619-4fe7-aefd-3fdf2228f520", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d25d7bf1-7339-488a-8b46-bb0749a5166f", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "7f1bf49f5e9db23a4a225afd10023cedd2d7bb821b22c43cc8124e5ecbbafb8d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Designing Software Systems\n\n* Object-Oriented Requirements **Analysis**\n - Understand the problem\n - Identify the key concepts and their relationships\n - Build a (visual) vocabulary\n - Create an application domain model (conceptual model)\n\n* Object-Oriented **Design**\n - Assign responsibilities (attributes, methods)\n - Explore behavior with interaction diagrams\n - Explore design alternatives\n\n* **Implementation**\n - Map designs to code, implementing classes and methods", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 484, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c0ec1376-4987-438a-a9a4-177dad514475": {"__data__": {"id_": "c0ec1376-4987-438a-a9a4-177dad514475", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "58e2f8d2-0842-4902-8e5a-b73208e12a9e", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "28d95d76f2c2e5fcf95c781fccc28c45035f839875b7f8df939b74e6c0fd7ea6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Design vs Architecture\n\n**Architecture questions** \n* How does the user choose to view a map? \n* How should the user\u2019s location data be protected? \n* What other functionalities are connected to viewing a map? \n* What are the interfaces between objects? \n\n**Design questions** \n* How do I include the Google Maps API? \n* How does the device\u2019s built-in encryption work? \n* What threads exist and how do they coordinate? \n* What are the interfaces between subsystems and third-party systems? \n\n> **Architecture** defines what the system\u2019s major components are and how they interact. \n> **Design** defines how each component is implemented and behaves internally.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 673, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dc8e23af-ecc1-41b4-adad-ef806f7725d3": {"__data__": {"id_": "dc8e23af-ecc1-41b4-adad-ef806f7725d3", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8ac57253-6f5f-4cfa-a9ec-2ea74903388e", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "b6a154d84fa90f26325e672f3890d2ad369fa392fb558f0a81fa63a0a5d0cb51", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Identifying design goals\n\n* **Analyze requirements** \u2014 identify implicit design goals within these requirements \n* **Stakeholder input** \u2014 insights and expectations regarding system quality and performance \n* **Benchmark existing systems** \u2014 industry standards and best practices \n* **Risk assessment** \u2014 potential risks and challenges associated with the project", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 369, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cadb9337-db01-4690-859d-636e48de1412": {"__data__": {"id_": "cadb9337-db01-4690-859d-636e48de1412", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "57a131dd-3f13-475a-9428-926232d89fb6", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "99319ce6d5c51a91fb8dc5dc14dbbbc393de9fd6079df5ce99c2c2f8420ea282", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Identifying design goals (cont.)\n\n* **Technical feasibility** \u2014 design goals need to align with the chosen technology stack and infrastructure\n* Prioritize and refine design goals based on their importance to stakeholders: specific, measurable, achievable, relevant, and time-bound (**SMART**)\n* **Iterate and collaborate**\n - Involve **cross-functional teams** in goal derivation and validation\n - **Iterate on design goals** as the project progresses and new insights emerge", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 481, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "56c22d83-d5bf-4bae-a42b-88e30e05a718": {"__data__": {"id_": "56c22d83-d5bf-4bae-a42b-88e30e05a718", "embedding": null, "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dd01422e-34d1-47ca-a0f3-c80b3ff6d0fe", "node_type": "4", "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "952f05a63a7a385cd47f6b74946d58383d7f84639d6a5fd75123d0564fe0269d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# SMART\n\n* Specific \n* Measurable \n* Achievable \n* Relevant \n* Time-bound", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 78, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d849bfcb-e3c9-4ea3-9353-5bcee8f6ee11": {"__data__": {"id_": "d849bfcb-e3c9-4ea3-9353-5bcee8f6ee11", "embedding": null, "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6a6baab4-2547-4cbe-b1fe-465c0d949762", "node_type": "4", "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "704e3c0df134e822d4504fc391fe090806f74bbf27fdab01a840e3ee6759213b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Design goal trade-offs\n\n* Design goals are often conflicting\n* Typical trade-offs\n - Functionality vs. usability\n - Cost vs. robustness\n - Efficiency vs. portability\n - Rapid development vs. functionality\n - Cost vs. reusability\n - Backward compatibility vs. readability", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 279, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f148cc4e-f8d4-466e-823d-fa133585c6fd": {"__data__": {"id_": "f148cc4e-f8d4-466e-823d-fa133585c6fd", "embedding": null, "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2bae00d6-f4c5-4561-84c3-5307560822fd", "node_type": "4", "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "cf272c733dc4fc341e6958e4819c6a43514ba3d3d7a9b4f2ea99c2fe6675cf5c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Battery\n\n* Design Goal 1: Battery Capacity (Range) \n - Maximize the battery capacity to provide an extended driving range for electric vehicles, allowing users to travel longer distances on a single charge.\n\n* Design Goal 2: Battery Weight and Size (Efficiency) \n - Minimize the weight and size of the battery pack to improve vehicle efficiency and reduce energy consumption.\n\n* Design Goal 3: Battery Lifespan (Longevity) \n - Design the battery to have a long lifespan, reducing the frequency and cost of battery replacements for EV owners.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 560, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3ac097ec-9d99-44ff-b398-253cd94d58ae": {"__data__": {"id_": "3ac097ec-9d99-44ff-b398-253cd94d58ae", "embedding": null, "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0ab8f1e7-1fb0-4774-9f93-2894a8287369", "node_type": "4", "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "83686128cec12613b31f9e96b5028e0393b0e94413a93a45f5332287cb40c601", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] SIMCity\n\n* DG Usability: Any user (regardless of skill level) can navigate through the system and recall the main features (...) of the system after following a tutorial.\n* DG2 Reliability: The system should ensure data integrity by accurately reflecting sinkhole status updates in a timely manner.\n* NFRs\n - NFR1 Usability (Learnability): The system should provide a 10min tutorial to help users understand its core features (...).\n - NFR2 Usability (Navigation): Users should be able to access the menu within two steps.\n - NFR3 Usability (Accessibility): The system should support text-to-speech for improved accessibility.\n - NFR4 Robustness: The system should handle increased traffic (+ 60%) during rush hours, with higher loads in winter than in summer (+ 70%).\n - NFR5 Performance: The map should reflect new and updated reports within five minutes.\n - NFR6 Reliability: The sinkhole status should be updated within five minutes after verifying a sinkhole and after removing a sinkhole.\n - NFR7 Portability: The system should be available as a mobile app.\n - NFR8 Availability: The system should require and verify Internet connectivity for (\u2026) functionality.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1188, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "53f6fb90-0138-4383-9dc5-2fe86404337e": {"__data__": {"id_": "53f6fb90-0138-4383-9dc5-2fe86404337e", "embedding": null, "metadata": {"page_number": 41, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f839c0d4-a929-4b35-93db-418d7729f6bf", "node_type": "4", "metadata": {"page_number": 41, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "90c5a1eb9a1444f475e3c68369ec2fcefc59b77b0618fdfa179bfbce32ddcd76", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Take Away: Designing good systems is hard!\n\n* Typically, systems are divided into smaller, manageable pieces to deal with complexity\n* Design goals guide decisions made by developers\n* Design goals encompass the entire system to be able to realize the different parts independently\n* Trade-offs between design goals need to be addressed\n - E.g., \"a user can navigate to every functionality using at most 2 clicks from the home page\" vs. \"a user must be able to use the system without needing a manual\"", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 505, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "85f80be4-2340-4355-a9ea-39edaf419b00": {"__data__": {"id_": "85f80be4-2340-4355-a9ea-39edaf419b00", "embedding": null, "metadata": {"page_number": 42, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "010435cb-5b2e-4b28-b5e8-54c284e1a5e3", "node_type": "4", "metadata": {"page_number": 42, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "00a478db4aae89eb67ce9b00b5c1448252f7c8468d0dad945b1806fedabbe84d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# References\n\n* Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n* Object Management Group. Unified Modeling Language. Version 2.5.1, 2017", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 193, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8b484003-2a3b-4c7f-9e7d-8ff656f5d12f": {"__data__": {"id_": "8b484003-2a3b-4c7f-9e7d-8ff656f5d12f", "embedding": null, "metadata": {"page_number": 43, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "80490ea4-ef44-4b7a-bf3f-5dbb4800cd23", "node_type": "4", "metadata": {"page_number": 43, "file_name": "data/Fall25 1530 - L13 Intro to System Design.pdf"}, "hash": "889c8027d810280755b1018bad4429cd465dcc7d2b711b1ac255f88e7bfbbb68", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L13 Intro to System Design\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu\n\nFall 2025", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 174, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "517dd0e2-62dd-43eb-9626-26fd6ebff32e": {"__data__": {"id_": "517dd0e2-62dd-43eb-9626-26fd6ebff32e", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e6f6b118-d604-46b6-bb81-dd86f1c4adb2", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "5d60459967b6dff2301904b9289d0d521a3bf79ff165b68decc552dad476ac3e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine 04\n\nThumrongsak Kosiyatrakul \ntkosiyat@cs.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 69, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "18d0ebe2-2ed2-4c55-9156-c7725997e9bd": {"__data__": {"id_": "18d0ebe2-2ed2-4c55-9156-c7725997e9bd", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3a11fae2-a59c-4767-9fa0-186aee0f6b3f", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "ca14130c6d08fc47158e52d3ebe762fd60c5c2eba3d56a5163f14281c5e0c24d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Recognizable and Decidable\n\n* Given a language \\( R \\), if some Turing machines accept every string \\( s \\in R \\) and **does not accept** (either reject or loop indefinitely) every string \\( s \\notin R \\), we say that **\u201c\\( R \\) is recognizable\u201d**\n - Note that these machines must accept on all input \\( s \\in R \\)\n - However, if \\( s \\notin R \\), these machines either reject or loop infinitely\n\n* Given a language \\( D \\), if some Turing machine accept every string \\( s \\in D \\) and rejects every string \\( s \\notin D \\), we say that **\u201c\\( D \\) is decidable\u201d**\n - Note that these Turing machines must be deciders\n - These machines either accept or reject on all input strings\n - These machines will not loop indefinitely on any strings\n - If \\( D \\) is decidable, \\( D \\) is also recognizable", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 806, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ff45e917-6a6f-4e6c-9984-56af5f016d18": {"__data__": {"id_": "ff45e917-6a6f-4e6c-9984-56af5f016d18", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8606e7a6-1ab0-405e-8b62-e0fc6586d593", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "d1f8808ce30a794f979d5059ae550be6584adb26996d0710d59375e1098de0dd", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Decidable Language\n\n* Following languages are examples of decidable languages:\n * $$ A = \\{0^{2n} \\mid n \\geq 0\\} $$\n * $$ B = \\{w \\# w \\mid w \\in \\Sigma^* \\} $$\n* We already demonstrated that there exists Turing machines (deciders) that decide above languages\n* There are some languages that are recognizable but not decidable\n * Suppose $$ R $$ is recognizable but not decidable\n * There are TMs that **accept** all strings in $$ R $$ and **does not accept** all strings not in $$ R $$\n * No TM can **accept** all strings in $$ R $$ and **reject** all strings not in $$ R $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 588, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "aab1507b-06bc-4478-bf03-7caa448ebf84": {"__data__": {"id_": "aab1507b-06bc-4478-bf03-7caa448ebf84", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "76196a68-7981-4c7d-945c-a04499e66762", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "e1ba2a40783fff2f56293eec8cf477c0e7d04c6c05a6cb3dc6d670f829f565d4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Undecidable Language\n\n* Consider a polynomial: \n $$6x^3 y z^2 + 3 x y^2 - x^3 - 10$$\n\n * A **root** of a polynomial is an assignment to its variables which results in that value of polynomial is 0 \n * A polynomial has an integral root if all variables are assigned integer values \n * The above polynomial has an integral root \\(x = 5\\), \\(y = 3\\), and \\(z = 0\\)\n\n* Given a polynomial **with an integral root**, can you find out its root? \n - Yes, brute force\n\n* Given a polynomial, can you find out whether it has an integral root? \n - Not always \n - Hilbert\u2019s tenth problem stated that there is no algorithm that tests whether a polynomial has an integral root.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 678, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "66fac2da-c6fb-4393-b8ad-f46a29563380": {"__data__": {"id_": "66fac2da-c6fb-4393-b8ad-f46a29563380", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d02f9b46-091b-4c7b-aae2-fd39ccae1af6", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "8436cfa258c631b9a7d331688cf145d1495c76f6707889470556fe1fc28e6e40", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Undecidable Language\n\n* Let $\\langle x \\rangle$ be a string representation of the object $x$\n* Let $D$ be the set of all string representations of polynomials that have integral root\n* Formally\n\n$$\nD = \\{\\langle p \\rangle \\mid p \\text{ is a polynomial with an integral root}\\}\n$$\n\n* Given $\\langle p \\rangle$ (a string representation of a polynomial $p$), if a Turing machine can **decide** whether\n - $\\langle p \\rangle \\in D$ (polynomial $p$ has an integral root) or\n - $\\langle p \\rangle \\notin D$ (polynomial $p$ does not have an integral root)\n\n then $D$ is decidable\n\n* Hilbert\u2019s tenth problem simply stated that $D$ is **not** decidable.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 650, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b321d392-42e9-44a5-a351-9d695a62bd1e": {"__data__": {"id_": "b321d392-42e9-44a5-a351-9d695a62bd1e", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2f203be7-76b2-46a3-8f4e-3444a0b499a2", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "3d047dddcbe3e7773c1f0dbdb1491ee8517970a686251469d6143c4eac15a5ac", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Undecidable Language\n\n* Consider polynomials with one variable (e.g., \\(2x^2 + x - 7\\))\n* Let \n $$D_1 = \\{\\langle p \\rangle \\mid \\langle p \\rangle \\text{ is a polynomial over } x \\text{ with an integral root}\\}$$\n* Is \\(D_1\\) recognizable? \n - Yes, if there exists a Turing machine that accepts every \\(\\langle p \\rangle \\in D_1\\) and does not accept every \\(\\langle p \\rangle \\notin D_1\\)\n* Example: \\(M_1\\) that recognizes \\(D_1\\) using a brute force algorithm in high-level definition \n \\(M_1 =\\) \"On input \\(\\langle p \\rangle\\) where \\(p\\) is a polynomial over the variable \\(x\\): \n 1. Evaluate \\(p\\) with \\(x\\) set successively to the value 0, 1, -1, 2, -2, 3, -3, \\ldots\\). If at any point the polynomial evaluates to 0, *accept*\"\n* Note that \\(M_1\\) accepts all \\(\\langle p \\rangle \\in D_1\\) and loops indefinitely on all \\(\\langle p \\rangle \\notin D_1\\)\n* Therefore, \\(D_1\\) is recognizable.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 910, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "559f7ea0-9b39-422c-8dfd-e8b4ee970962": {"__data__": {"id_": "559f7ea0-9b39-422c-8dfd-e8b4ee970962", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "daed4d87-e851-41f4-98a6-f0653081d48b", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "340021a9c4a0823bc705c20567ab851865ae0012ce8aec5b08ec8e564abe65f1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Undecidable Language\n\n* Consider polynomials with one variable (e.g., \\(2x^2 + x - 7\\))\n* Let \n $$D_1 = \\{\\langle p \\rangle \\mid \\langle p \\rangle \\text{ is a polynomial over } x \\text{ with an integral root}\\}$$\n* Is \\(D_1\\) decidable? \n - Yes, if there exists a Turing machine that accepts every \\(\\langle p \\rangle \\in D_1\\) and rejects every \\(\\langle p \\rangle \\notin D_1\\)\n* Luckily there is an upper/lower bound of the value of \\(x\\) that a machine needs to test: \n $$\n \\pm k \\frac{c_{\\max}}{c_1}\n $$\n where \\(k\\) is the number of terms in the polynomial, \\(c_{\\max}\\) is the coefficient with the largest absolute value, and \\(c_1\\) is the coefficient of the highest order term\n* Change \\(M_1\\) such that it rejects after testing value goes out-of-bound\n* Therefore, \\(D_1\\) is decidable", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 806, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2d8abc21-9c87-4ca7-bea9-1a92153d3060": {"__data__": {"id_": "2d8abc21-9c87-4ca7-bea9-1a92153d3060", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "665a0a77-502b-4c27-9467-9d5874b27483", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "1bdfdc123ed6cb88910fba6de621d1fb063c799910df5819531e3e8b6d4f42ce", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Undecidable Language\n\n* Let \\( D \\) be the set of all polynomials that have integral root \n $$\n D = \\{\\langle p \\rangle \\mid \\langle p \\rangle \\text{ is a polynomial with an integral root}\\}\n $$\n* We can create a machine that tries all possible assignment values starting from 0s \n - For example, in case of two variables \\( x \\) and \\( y \\), try the following values \\([x, y]\\): \n \\[\n [0,0], [0,1], [1,0], [1,1], [0,-1], [-1,0], [-1,-1], [0,2], \\ldots\n \\]\n - If a polynomial \\( p \\) has an integral root, eventually it will be evaluated to 0\n* Therefore, \\( D \\) is recognizable\n* Unfortunately, there is no bound that we can check and machine may loop infinitely \n - If the polynomial \\( p \\) does not have an integral root, we will keep trying new values of \\([x,y]\\) forever (loop indefinitely)\n* \\( D \\) is not decidable", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 847, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5c9d901b-9fa1-48e1-b569-6b714e9545cd": {"__data__": {"id_": "5c9d901b-9fa1-48e1-b569-6b714e9545cd", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ecc51507-0ff9-4e49-a19f-5af643f641ac", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "d2678ff6150e18b2081db607a73c348a520d3c8bc36d428b96d73b3b6bc2427d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Describing Turing Machines\n\n* A description of a Turing machine can be huge even for a very simple algorithm\n* Example, compare two strings $$\\{ w \\# w \\mid w \\in \\{0,1\\}^* \\}$$\n\n```mermaid\nstateDiagram-v2\n [*] --> q1\n q1 --> q2: 0 \u2192 R\n q1 --> q3: 1 \u2192 x, R\n q1 --> q8: # \u2192 R\n\n q2 --> q2: 0,1 \u2192 R\n q2 --> q4: # \u2192 R\n\n q4 --> q4: x \u2192 R\n q4 --> q6: 0 \u2192 x, L\n\n q3 --> q3: 0,1 \u2192 R\n q3 --> q5: # \u2192 R\n\n q5 --> q5: x \u2192 R\n q5 --> q6: 1 \u2192 x, L\n\n q6 --> q6: 0,1,x \u2192 L\n q6 --> q7: # \u2192 L\n\n q7 --> q7: 0,1 \u2192 L\n q7 --> q2: x \u2192 R\n\n q8 --> q8: x \u2192 R\n q8 --> qaccept: \u2294 \u2192 R\n```\n\n* The above state diagram represents the **formal description** in a form of state diagram of a Turing machine", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 727, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ab1f283c-43ec-40bc-ad7c-d82404678886": {"__data__": {"id_": "ab1f283c-43ec-40bc-ad7c-d82404678886", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "636b8d85-8dcc-48f6-acbe-d300c630e506", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "6f5dcfb32b38e4d86a81328d305d7098116e9e22817510ecbdee3987c41c8a1e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Describing Turing Machines\n\n* An **implementation description** of the previous Turing machine that decides \n $$\\{ w \\# w \\mid w \\in \\{0,1\\}^* \\}$$ \n is shown below\n* On input string *w*:\n 1. Zig-zag across the tape to corresponding positions on either side of the `#` symbol to check whether those positions contain the same symbol. If they do not, or if no `#` is found, *reject*. Cross off symbols as they are checked to keep track of which symbols correspond.\n 2. When all symbols to the left of the `#` have been crossed off, check for any remaining symbols to the right of the `#`. If any symbols remain, *reject*; otherwise, *accept*.\n* Note that the above description describes the way the Turing machine moves its head and store data (cross off symbols)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 769, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4dde2cd1-a05d-445d-9aa7-d4354549166d": {"__data__": {"id_": "4dde2cd1-a05d-445d-9aa7-d4354549166d", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ab0fbfe6-9386-4a48-90e1-730abead36de", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "f234fd7e61fe9586682fbf9103b2dd4b2fbfd916450f74dfdf8c1d4123a4e40c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Describing Turing Machines\n\n* An **high-level description** of the previous Turing machine that decides \n $$\\{ w \\# w \\mid w \\in \\{0,1\\}^* \\}$$ \n is shown below:\n\n $$\n M = \\text{\u201cOn input } s \\text{ where } s = x \\# y \\text{ for some string } x \\text{ and } y:\n $$\n\n 1. Compare whether the string \\( x \\) is identical to the string \\( y \\). \n 2. If they are identical, *accept*; otherwise, *reject*.\u201d\n\n* Note that the **where** clause behaves like a filter \n - Any string that does not satisfy the **where** clause will be rejected immediately\n\n* What a TM can do? \n - From the Church-Turing thesis, if there is an algorithm to do something, a TM can do the same thing \n - Examples: \n - Compare two strings \n - Check whether the length of a string is a power of 2 \n - Addition, subtraction, multiplication, division, modulo \n - Any algorithms discussed in Chapter 1", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 898, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "56d2de3b-929d-478b-a3e7-59240cf8a2c2": {"__data__": {"id_": "56d2de3b-929d-478b-a3e7-59240cf8a2c2", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "33c4be35-9853-4469-8d78-c9ab83e01723", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "275d9d6838b6cb6157d692621f1db778d2d06be248a1f5de6a5ebea52ada1c61", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Describing Turing Machines\n\n* High-level description of a Turing machine is suitable for describing universal Turing machine\n* Consider the following language:\n\n$$\nA = \\{ x_1 \\# x_2 \\# \\ldots \\# x_n \\mid x_i = x_j \\text{ for every } i \\text{ and } j \\}\n$$\n\n* The following machine \\( M' \\) decides \\( A \\) using TM \\( M \\) as a subroutine:\n\n> \\( M' = \\) \"On input \\( s \\) where \\( s = x_1 \\# x_2 \\# \\ldots \\# x_n \\):\n> 1. For every \\( i \\) where \\( 1 \\leq i \\leq n - 1 \\):\n> 2. \\quad Run \\( M \\) on input \\( x_i \\# x_{i+1} \\).\n> 3. \\quad If \\( M \\) rejects, reject.\n> 4. Accept\"", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 581, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "03050609-6a20-4dde-881e-6297414e5970": {"__data__": {"id_": "03050609-6a20-4dde-881e-6297414e5970", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/turing_machine_04_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "78bdb8dd-4de2-43a5-b2a3-d860c7695619", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/turing_machine_04_handout.pdf"}, "hash": "dae6a8aaaff4cf118b3c09d7d573fa6800289666a8c09d3af65b8c638133fccb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Conclusions\n\n* Algorithm and Turing Machine are consider equivalent \n - Anything that an algorithm can do, there exists a TM that can do the same thing \n * Simply convert the algorithm to TM \n - Anything that a Turing machine can do, there exists an algorithm that can do the same thing \n * Simply convert the TM to algorithm \n* Because of this, if there is a problem that a TM cannot solve, no algorithm can solve the same thing", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 445, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4e1937f5-e3ab-4d63-93e4-fd0b94677198": {"__data__": {"id_": "4e1937f5-e3ab-4d63-93e4-fd0b94677198", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f744805b-9538-4ab1-a894-c961027efb75", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "4ca7f21cbe2ab0e6486ba4b78a02020cceb6972f1b4a42bc4771a6bbf3ed4125", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L03 Scrum\n\nCS 1530 Software Engineering \nFall 2025 \n\nNadine von Frankenberg \n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 161, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2699b800-cda3-489c-a834-9a8efd56d419": {"__data__": {"id_": "2699b800-cda3-489c-a834-9a8efd56d419", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ce9169a6-62a6-4cec-94d0-508cac215a6b", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "0c82830c01be222809c244532be3d97e8e27deb8a7eb74a538aeb3fb22796d7b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet.\n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes.\n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n* Material from these notes is obtained from various sources, including, but not limited to, the following:\n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994.\n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011.\n - [http://scrum.org/])(http://scrum.org/)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1384, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5d0d1fb4-423d-49c4-835d-91c15be1a38b": {"__data__": {"id_": "5d0d1fb4-423d-49c4-835d-91c15be1a38b", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "78548f55-5957-4fe2-83aa-ec57754083a8", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "eae1f3db76d3557fe0f1c37af333886a452a1c27c202b87fbac479a5c54bbf74", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You have a better overview of the software development lifecycle\n* You understand the roles, artifacts, events, and meetings of Scrum", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 154, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "15f4e7e6-1912-4d52-a2a4-375c25cdf137": {"__data__": {"id_": "15f4e7e6-1912-4d52-a2a4-375c25cdf137", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5771ff67-72bf-4251-930b-833d1764632b", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "af3766270ba9d6782044f9d549033cd83df10da5ee508b040f972a50ea6239b4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Software lifecycle overview\n* Scrum", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 57, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "72b44502-e75f-4b73-ab8b-07667bcfd5a5": {"__data__": {"id_": "72b44502-e75f-4b73-ab8b-07667bcfd5a5", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bca8fedc-c8f0-422d-a4b8-65ae810bce59", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "706e22cff5681d668e891de7c5b3bf0e6b04fdfea450234bf2a262fe57d51105", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] SDLC\n\n* A **software (development) life cycle (SDLC)** describes the **process of how software is developed**\n - **Set of activities** and their relationships to each other to support the development of a software system\n - Activities include, e.g., requirements elicitation, requirements analysis, system design, implementation, testing & validation, configuration management, delivery, maintenance\n* Defining a SDLC is necessary:\n - Establish a shared understanding (communication)\n - Creates a plan (releases / delivery)\n - Incorporate all aspects (testing, documentation, maintenance)\n - \u2026\n\n> There will be a more detailed lecture on software lifecycle models!", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 681, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b1b920ab-3a0b-462a-9076-88709bc3b42b": {"__data__": {"id_": "b1b920ab-3a0b-462a-9076-88709bc3b42b", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f4bd7278-bc46-4029-a1f9-914ffd8a4b2f", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "2b9f69b335d093595821d03b009e66ea1fe4faeee130e6387c050615d4de0810", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Overview of the SDLC\n\n**Planning** \nWhat is the system\u2019s purpose? Who is the enduser? What is the scope?\n\n\u2192\n\n**Requirements Engineering** \nWhat is the problem?\n\n\u2192\n\n**System Design** \nWhat is the solution?\n\n\u2193\n\n**Object Design** \nWhat is the best approach to implement the solution?\n\n\u2193\n\n**Testing & Validation** \nIs the problem solved?\n\n\u2192\n\n**Deployment** \nHow do we deliver the system to the enduser?\n\n\u2192\n\n**Maintenance** \nHow will are updates and bugs fixed in the future?\n\n\u2192\n\nBack to **Planning**\n\n----\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 537, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "61d06b67-33f4-4d8c-a89d-34ee655714ab": {"__data__": {"id_": "61d06b67-33f4-4d8c-a89d-34ee655714ab", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "02c96afc-6870-4d9f-90f4-a3ae2e6820cc", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "f83d4c206b443dbad8c36cbccb45a7366e5a74a1642e204bd7e5fc99333d9a5d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Software lifecycle overview\n* Scrum", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 57, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d3bfdd2b-27c9-4125-b1c7-6213fcb87e2d": {"__data__": {"id_": "d3bfdd2b-27c9-4125-b1c7-6213fcb87e2d", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a373aa68-e184-4dab-85df-867937dcdb98", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "a5079defc305a95f8ac53c829e4d275a1cd95b0ba9d235dd3de9f46945c82a6f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# History of agile models \u2014 Scrum\n\n* In 1986, Takeuchi and Nonaka published *\"The New New Product Development Game\"* in the *Harvard Business Review*\n* Equates creative processes (e.g., Honda, 3M, HP, ..) to the sport of rugby\n* Describes a scalable, flexible, cross-functional, self-organized team-based approach to product development\n\n> \"shift from a linear to an integrated approach encourages trial and error and challenges the status quo\"\n\n### EXHIBIT 1 \nSequential (A) vs. overlapping (B and C) phases of development\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n \n \n
Phase123456
Type APhase\u25a0\u25a0\u25a0\u25a0\u25a0\u25a0
Type BPhase\u25e0\u25e0\u25e0\u25e0\u25e0\u25e0
Type CPhase\u25e0\u25e0\u25e0\u25e0\u25e0\u25e0
\n\n[Source: https://hbr.org/1986/01/the-new-new-product-development-game]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1391, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d4a85794-44ea-46dd-aee5-0382241a20ac": {"__data__": {"id_": "d4a85794-44ea-46dd-aee5-0382241a20ac", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "319afecd-f575-4d19-8c70-94ef80042c83", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "61d358b3637f64739fd9afe18a1b9010fdbf16687b78079e4b86ff809bf9c767", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "History of agile models \u2014 Scrum University of\n Pittsburgh\n \u2022 In 1986, Takeuchi and Nonaka published \"The New New Product Development\n Game\" in the Harvard Business Review\n \u2022 1987 \"SCRUM development process\"\n \u2022 1995 Jeff Sutherland and Ken Schwaber\n analyzed common software development processes\n \u2022 \"The Scrum development process\" at OOPSLA\n \u2022 \"Systems development [\u2026] is an unpredictable and\n complicated process that can only roughly be described\n as an overall progression\" Jeff Sutherland Ken Schwaber\n \u2022 2001 The Agile Manifesto\n \u2022 2002 Scrum Alliance (Mike Cohn, Esther Derby, Ken Schwaber)\n\n\u00a9 2025 Nadine von Frankenberg CS 1530 - L03 Scrum & intro to abstraction 9", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 845, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "394f9e67-46a2-406c-a455-accb5443e4b5": {"__data__": {"id_": "394f9e67-46a2-406c-a455-accb5443e4b5", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1b085ac9-c481-4f39-bb59-45942753f3d1", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "5562aacd976f9c5e096d77e75f9b0a1f02bfb9c863cd0ce8d980585937b2726c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Scrum\n\n* Framework for developing and sustaining complex products \n* Scrum defines roles, events, artifacts, and the rules that bind them together \n* \"The Scrum Guide\" written by Ken Schwaber and Jeff Sutherland \n - First version in 2010, latest updated version 2020 \n\n[Rugby] **Scrum** is a **way to restart the game after an interruption:** Players pack closely together with their heads down to gain possession of the ball \n\u2192 Requires coordination, joint effort, strategic planning", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 493, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "44459b47-9047-4395-853a-6e36b2b1e41b": {"__data__": {"id_": "44459b47-9047-4395-853a-6e36b2b1e41b", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3f412286-2258-4001-a60d-c422d6a67fcd", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "4e6bd2cab7ac5480d43c223d473e1fc34f9b287c0ce1d5bf66a85623f504608f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Overview: Scrum as an agile model\n\n* Short, iterative cycles (**Sprints**), typically 2-4 weeks long \n* Emphasizes collaboration, functioning software, and flexibility to changing requirements \n* Roles: **Scrum Master, Product Owner, Development Team** \n* Promotes transparency, inspection, and adaptation throughout the process", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 334, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "55909789-5a47-427a-999c-93cdc3b2b209": {"__data__": {"id_": "55909789-5a47-427a-999c-93cdc3b2b209", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f7d6531d-80dc-46c7-8574-0931175abba8", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "98b1014fd7fe02e3ac946172f07c80c4d5a773141723b7ff4b543588419406c3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Scrum\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
Product BacklogSprint BacklogPotentially Shippable Product Increment
\n
\n
\n
\n
\n
Box
\n
\n
\n Daily Scrum Meeting
\n 24 Hours\n
\n
\n 2-4 Weeks\n
\n
\n\n[The diagram shows the Scrum process flow starting from Product Backlog, moving to Sprint Backlog, then through Daily Scrum Meetings (every 24 hours), and finally resulting in a Potentially Shippable Product Increment after 2-4 weeks.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1064, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9ad11277-0150-498a-bd2f-ceba9d200658": {"__data__": {"id_": "9ad11277-0150-498a-bd2f-ceba9d200658", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "233401e6-f50b-47ac-a580-ec26f54046c1", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "9cb8627cc647e6f7296d058707110ebd4da9a7b0edf910ca8cfb9ba25604920d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Scrum Team - Roles\n\n## Scrum Team\n\n### Scrum Master \n\ud83d\udc51 \n- Responsible for the process \n- Removes impediments \n- Ensures Scrum is followed \n\n### Product Owner \n\ud83d\udccb \n- Accountable for managing the product backlog \n\n### Developers \n\ud83e\uddd1\ud83d\udcbb\ud83d\udc69\ud83d\udcbb\ud83d\udc68\ud83d\udcbb \n- Create the sprint backlog \n- Adhere to the definition of done \n- Adapt their plan each day toward the sprint goal \n\n----\n\n### Customer \n\ud83d\udcac \n\n----\n\n### Other Scrum teams \nScrum team: \n- Scrum Master \ud83d\udc51 \n- Product Owner \ud83d\udccb \n- Developers \ud83e\uddd1\ud83d\udcbb\ud83d\udc69\ud83d\udcbb\ud83d\udc68\ud83d\udcbb \n\n----\n\n*University of Pittsburgh*", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 537, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "07981ea9-a543-4553-ad56-832cdbcc5071": {"__data__": {"id_": "07981ea9-a543-4553-ad56-832cdbcc5071", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b72b3a82-e2da-481a-869c-45dab9c4acf2", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "3e65c09ad89893ad8171be3f856ae42ec07532821634198dd2f0dae39efecd74", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Scrum Team\n\n* Consists of \n - One Scrum Master \n - One Product Owner \n - Developers \n* No sub-teams or hierarchies \n* Scrum Teams are cross-functional \n* Max. 10 team members \n* Accountable for creating a valuable Increment each Sprint", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 252, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fdea6b30-d46b-4b51-9f21-09c7f4b5d78f": {"__data__": {"id_": "fdea6b30-d46b-4b51-9f21-09c7f4b5d78f", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c289301e-a55b-477f-808c-d2e7a332b617", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "627b3c8285481741d6d5b9fec548c5bc2d70a94870c1f08bcc22b1346dcfd779", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Scrum Team - **Product Owner**\n\n* \"Owns\" the product \n* Accountable for maximizing the product\u2019s value \n* Tasks \n - Manages the Product Backlog \n - Develops and communicates the product goal \n - Creates and communicates Product Backlog Items \n - Orders Product Backlog Items \n - Ensures that the Product Backlog is transparent and understood \n* Can represent the needs of stakeholders in the Product Backlog", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 427, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "eb5c20d5-e5ee-4c2b-a06e-350899557cc7": {"__data__": {"id_": "eb5c20d5-e5ee-4c2b-a06e-350899557cc7", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fe91f5e5-47d9-4946-8247-4381d7af140f", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "5621f96148468ae63e31bc3adc877fc737e77d8d85c29160c6530e20b956ec76", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \ud83d\udc51 The Scrum Team - **Scrum Master**\n\n* Accountable for establishing Scrum \n* Serves the Scrum Team \n - Coaches team members \n - Removes impediments \n - Ensures that all Scrum events take place \n* Serves the Product Owner \n - Define Product Goal, Product Backlog definition \n - Establish empirical product planning \n - Facilitate stakeholder collaboration as needed", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 381, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "93ba9d86-f512-409b-aa4f-97ea0841f726": {"__data__": {"id_": "93ba9d86-f512-409b-aa4f-97ea0841f726", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1bd6ad7c-57a5-47e3-848c-5eff3697a2dd", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "504fb184c82b70686720fd200caa9376e470f16e3029047f0f096198f9c3946b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Scrum Team - **Developers**\n\n* Committed to creating any aspect of a usable increment each Sprint \n* Skills often vary by domain \n* Developers are accountable for \n - Creating the Sprint Backlog \n - Adhere to a Definition of Done \n - Adapt their plan daily towards the Sprint Goal", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 295, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "66367a1a-ef01-402d-aca3-aa13825f4ebb": {"__data__": {"id_": "66367a1a-ef01-402d-aca3-aa13825f4ebb", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ab69c291-5e76-470c-ae69-41db01d955a9", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "6616116c75a10dd6005bb14762bb2c904d32e034929352cc186b198e21b76f19", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Artifacts in Scrum represent work or value\n\n* Designed to maximize transparency of key information\n* **Product backlog**: list of requirements for the whole product\n* **Sprint backlog**: list of requirements to be completed in one iteration (sprint)\n* **Increment**: sum of all completed work in a Sprint, \n usable, \"potentially shippable\" piece of the product, \n must meet the DoD, \n each increment builds on the previous one \n release is optional\n\n----\n\n### Diagram of Scrum Artifacts and Flow\n\n```mermaid\nflowchart LR\n A[Product Backlog] --> B[Sprint Backlog]\n B --> C[Potentially Shippable Product Increment]\n C --> D[Daily Scrum Meeting]\n D --> B\n style A stroke:#ff007f,stroke-width:3px\n style B stroke:#ff007f,stroke-width:3px\n style C stroke:#ff007f,stroke-width:3px\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 810, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4da3fd16-b28b-4468-a2b5-6bad720fb220": {"__data__": {"id_": "4da3fd16-b28b-4468-a2b5-6bad720fb220", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6de3ff5c-dedd-43b3-8993-8f911cad9136", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "005057c8082876fa818f418177a92c18abf4cc7841bca544368e6f0dcc3ffc95", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Requirements in Scrum\n\n* All **requirements** are collected in the product backlog\n* The product owner elicits requirements from external stakeholders & prioritizes them\n* Typical requirements in Scrum\n - \"Technical\"/functional requirements\n - User stories\n - Scenarios\n - Use cases\n\n> More on requirements next lecture", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 326, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8a8e9d24-b160-4885-8ce0-ddb32f41cffb": {"__data__": {"id_": "8a8e9d24-b160-4885-8ce0-ddb32f41cffb", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "36fece7e-765a-40e7-afc6-a0c271429538", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "0ffcd61ae46b27d7514d1bd44f5efdcef6b377105f22dbc0c05b176772a8c120", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** User Story in Scrum\n\n* Sentence that describes what the user can do \n* Often written on a \"card\" \n* Users describe roles of the system \n* Defines a structure and simplifies the prioritization process \n* Facilitates categorization according to user roles \n\nAs ****, \nI can/want/need **** \nso that ****\n\n> \"I\"-perspective: developer can self-identify with the given user role\n\n> **[Example]** \n> As a student, I want to sign up for a course so that I can access course materials and participate in lectures.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 551, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8e533577-1f58-4510-a775-1a3d3aab5f54": {"__data__": {"id_": "8e533577-1f58-4510-a775-1a3d3aab5f54", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "51620b85-d294-4618-bc89-3360b5d96844", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "bba52d77acda465db7b4a8854ca9f853fb6813e0850a99a953e71ded7eb2ebdb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Product backlog\n\n* Ordered list of requirements (what is needed to improve the _whole_ product) \n - E.g., Epics, User Stories, Scenarios\n* _\"Single source of work undertaken by the Scrum Team\"_\n* **Product Backlog refinement** is the process of reviewing, updating, and prioritizing items in the product backlog \n - Goal: Ensure clarity, relevance, and value \n - Involves breaking down larger tasks, estimating efforts, and reordering items to align with the project's evolving goals and requirements\n* Commits to the **product goal** \n - The product goal is the long-term objective for the product, provides a target for the Scrum team to work towards", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 663, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "acfd7d91-933f-4983-8f9a-6125b45c8bbf": {"__data__": {"id_": "acfd7d91-933f-4983-8f9a-6125b45c8bbf", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bfed46f7-e04f-4383-b56c-5bbc6b261074", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "ecaf5051904f07313096c31ea85efd9903593393cf50d902738915754b67d2b2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** Product Backlog\n\n* User account creation: As a player, I want to create a personal account, so I can save my progress and scores.\n* Quiz category selection: As a player, I want to select a quiz category before I start the quiz, so I can choose a topic that interest me.\n* Difficulty levels: As a player, I want to choose different difficulty levels, so I can challenge myself appropriately.\n* Answering Questions: As a player, I want to answer multiple-choice questions, so I can engage with the quiz format that is familiar and straightforward.\n* Time-Limited questions: As a player, I want each question to be time-limited (max. 1min per question), so that the game is more challenging and fair.\n* Score tracking: As a player, I want the game to track my scores, so I can see how well I am doing.\n* Leaderboard Functionality: As a player, I want to view a leaderboard, so I can compare my scores with other players.\n* Accessibility: As a player with visual impairments, I need accessibility features (text-to-speech), so I can fully participate in the quizzes.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1077, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "051652dc-47a0-4ce0-83b9-8b57321a1fd7": {"__data__": {"id_": "051652dc-47a0-4ce0-83b9-8b57321a1fd7", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0cd0464b-2426-4762-a58f-49c3a35215e1", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "8524b17e2ba019f9d2c884a2a0c16742dc0f2d92eb6893b8280e469f71b98890", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Two main **events** & five **meeting types** in Scrum\n\n----\n\n| Product Backlog | Sprint Backlog | Potentially Shippable Product Increment |\n|-----------------|----------------|-----------------------------------------|\n| ![stack of blue blocks] | ![stack of blue blocks] | ![box] |\n\n----\n\n### Project **kickoff**\n\n### Sprint **planning**\n\n### Sprint **review**\n\n### Sprint **retrospective**\n\n----\n\n### Events:\n\n- **Sprint** (2-4 weeks)\n- **Daily Scrum** (24 hours)\n\n----\n\n*University of Pittsburgh*\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L03 Scrum & intro to abstraction", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 577, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0bc19176-b3c5-4d76-9931-28e2c5824b65": {"__data__": {"id_": "0bc19176-b3c5-4d76-9931-28e2c5824b65", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "931792e3-1793-4ba4-9d25-a5928d5be837", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "f071fd23b664df9d7106601f1959407903987691da075ec381e75a6e73083707", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Main events in Scrum\n\n* **Project kickoff:** Define the product backlog\n* **Sprint** _\"turns ideas into value\"_\n - Fixed length of **one month or less** to create consistency\n - A new sprint starts immediately after concluding the previous sprint\n - A sprint commits to the **sprint goal**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 295, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "562fb4f1-b811-4904-b989-38b54fe38cb0": {"__data__": {"id_": "562fb4f1-b811-4904-b989-38b54fe38cb0", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a4bd9921-3209-4389-a9a9-965f4f880848", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "1d0b2af7ad295a1f49f1523edfcb23f6b5f0647e5e52696d9ee7b13fe6e1e3b8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Sprint\n\n* The development team \n - Realizes the items in the sprint backlog \n - Uses, e.g., a task board to visualize the status of these items \n* The Scrum Master visualizes the progress\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n\n \n\n \n\n\n\n \n \n
ItemsTodoIn progressIn reviewDone
User Story 1TaskTaskTaskTask
TaskTaskTaskTask
User Story 2TaskTaskTaskTask
Task
User Story 3TaskTask
TaskTask
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1033, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "56d09198-2b4a-40b9-8132-d7972e4e39b5": {"__data__": {"id_": "56d09198-2b4a-40b9-8132-d7972e4e39b5", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9af38552-175d-47f3-a805-7633c6cf22d8", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "354c89752189dc502ca640cec2b074643940e050ff742568ddbdf620ac0272e5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# During a Sprint \u2026\n\n* Start of the Sprint: Sprint Planning meeting [max. 8h] \n - Create Sprint Backlog\n* Every day: Daily Scrum [max. 15min] \n - Share status, impediments and promises\n* End of each Sprint: Sprint Review [max. 4h] \n - Review the realized Sprint Backlog Items with Product Owner\n* After the Sprint: Sprint Retrospective [max. 3h] \n - Inspect the previous sprint \n - Create a plan for improvement (individuals, interactions, processes, tools, DoD) that will set the basis for the next Sprint", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 517, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c61cf55d-77fc-43ca-b28f-3bde05f6eb13": {"__data__": {"id_": "c61cf55d-77fc-43ca-b28f-3bde05f6eb13", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e74a7022-c0cd-4f44-9372-e7f14ab9b4ef", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "e84cba168abc2c4eb676bda8b0be9bf24962500c4d3e39ab98423d1e3f872c08", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Sprint Planning\n\n* Initiates the Sprint \n* Entire Scrum Team \n* Addresses three questions: \n - Why is this Sprint valuable? \n - What can be Done this Sprint? \n - How will the chosen work get done? \n* Often includes activities to estimate the size of a Backlog Item \n - E.g., Story points \n - T-Shirt Sizes", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 321, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5a338ade-d4f6-4e45-bc97-eae2f3119da0": {"__data__": {"id_": "5a338ade-d4f6-4e45-bc97-eae2f3119da0", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ad3f9dde-9beb-4e79-bbed-9df2a49c3517", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "ee5699c0ee6df8ea9464357835928b83d35db06549267ac6fb9930588d54c323", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Definition of Done (DoD)\n\n* Formal description of the state of the Increment\n* Describes when the Increment is \"done\" (meets quality requirements)\n* Whenever a Product Backlog Item meets the DoD, a new Increment is created\n* Creates a shared understanding of what work needs to be completed\n* An Increment cannot be released if the DoD is not met\n* The Scrum Team follows one DoD\n\n> If multiple scrum teams work together, they share a DoD", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 441, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "54cd775e-692f-4c7f-95ec-6d4e8b504067": {"__data__": {"id_": "54cd775e-692f-4c7f-95ec-6d4e8b504067", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "82927522-c49d-4a56-b7fa-5c7e73f63991", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "56cfe9ad283b2312032bbbf3d644276bbc84e56d461e3152445e0bc3de7d5c00", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Sprint\n\n* During the Sprint:\n - No changes are made that would endanger the Sprint Goal\n - Maintain quality\n - Refine the Product Backlog as needed\n - Scope may be clarified and renegotiated with the Product Owner, based on insights\n* A Sprint may be cancelled if the Sprint Goal is no longer relevant\n - The Product Owner has the sole authority to cancel a Sprint\n\n```mermaid\nflowchart LR\n A[Product Backlog] --> B[Sprint Backlog]\n B --> C[Daily Scrum Meeting]\n C --> B\n B --> D[Potentially Shippable Product Increment]\n\n subgraph Sprint\n direction TB\n B\n C\n end\n\n click C \"24 Hours\"\n click Sprint \"2-4 Weeks\"\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 671, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ba628075-6751-4052-8b1a-73c6489d90f8": {"__data__": {"id_": "ba628075-6751-4052-8b1a-73c6489d90f8", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dce37b19-836a-4c32-ac38-be196aca2032", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "cea21c7402f712e3b9dd8a473ece94cfb0a60b12b75a6ebcfc943797b91493d9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Daily Scrum\n\n* Time-boxed event for 15 min \n* Attended by the Developer Team \n* Developer Team sets structure and techniques \n* Typically conducted as a \"standup\", early in the day \n - Status: \"What did I do since the last meeting?\" \n - Impediments: \"Any issues/blockers?\" \n - Promises: \"What do I promise to resolve today?\" \n\n[The image shows a group of people standing in an office space, presumably conducting a daily scrum meeting.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 449, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6f27d851-b93d-4854-9b50-608647b18752": {"__data__": {"id_": "6f27d851-b93d-4854-9b50-608647b18752", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ebd8a5ff-9822-4ebb-b087-f770afb0fac4", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "d04963c0625cda2a6b5a023f5212dc8370e90be869dbb19be3200f50535f293c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Summary: Scrum is an agile framework\n\n* Should be adapted to fit to the project / work culture / team\n* A **Scrum Team** works towards creating product increments\n* Adapts well to **change**\n\n[The image shows a social media post by Dzmitry Liaudanski, Senior .Net Black Ops Developer at Zettabox, with the caption: \"Make your daily stand up meeting shorter :)\" The image depicts a group of people doing planks in a circle in an office setting. Below the post are options: Like \u00b7 Comment \u00b7 Share \u00b7 5216 likes \u00b7 405 comments]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 526, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "38576720-f7de-46e7-8d6f-3b32821b6452": {"__data__": {"id_": "38576720-f7de-46e7-8d6f-3b32821b6452", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a3a56610-650b-47be-9ff1-dbaf14af3873", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "ff3b5dda320e3f69036fe10900276bc036002e4182585993fa44e796c17ce1d0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Optional Readings\n\n* Ken Schwaber & Jeff Sutherland, The Scrum Guide, 2020 \n* Takeuchi & Nonaka, *The New New Product Development Game*, _Harvard Business Review_, 1986 \n* Scrum at scale, [https://www.scrumatscale.com/])(https://www.scrumatscale.com/) \n* Scrum product backlog \n - [https://www.scrum.org/resources/what-is-a-product-backlog])(https://www.scrum.org/resources/what-is-a-product-backlog)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 408, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "42e1512a-3c57-4c17-a462-3a8e95a3f4e3": {"__data__": {"id_": "42e1512a-3c57-4c17-a462-3a8e95a3f4e3", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c5f7eca6-1fd2-4df4-b35e-274d93e653b8", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "c388990a2a85c56b78d6b5fcb8277d511063a0a1b84e6c53599c9df74945e788", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# References\n\n* Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n* Object Management Group. Unified Modeling Language. Version 2.5.1, 2017", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 193, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3b4f099e-c867-4e60-aa97-28895a0b89c0": {"__data__": {"id_": "3b4f099e-c867-4e60-aa97-28895a0b89c0", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "21a904c2-1e46-453b-b879-d25ada42b096", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L03 Scrum.pdf"}, "hash": "230b0d7fb60ca313b32cf43b4f383dbfb0d8893736d9000f018f4a1307a19e7c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L03 Scrum\n\n**CS 1530 Software Engineering**\n\nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 160, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b79dec40-0d50-4804-b873-aea79f5a7261": {"__data__": {"id_": "b79dec40-0d50-4804-b873-aea79f5a7261", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "028e5875-bc18-4263-8cdb-ae58b3482c2d", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "f2ef6cfafb674b5859f55be45053c8db86d7adbd2c379cb0feb890270c6434ad", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine 01\n\nThumrongsak Kosiyatrakul \n`tkosiyat@cs.pitt.edu`", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 71, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4c68e75b-b5bb-427f-a2d3-b625bc1118b2": {"__data__": {"id_": "4c68e75b-b5bb-427f-a2d3-b625bc1118b2", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a0321963-8ff2-4ab5-8fde-6e17f4525236", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "d9c92e5301397113e857fce75913f2060a745d75d2754f225c32fe374c8f04fa", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Human Computer\n\n* Imagine a human computer working with a pencil and paper:\n - The only things written on the paper are symbols from some fixed finite alphabet\n - Each step taken by the computer depends only on the symbol he/she is currently examining and on his \u201cstate of mind\u201d at the time\n - His state of mind may change as a result of his examining different symbols, only a finite number of distinct states of mind are possible\n* This sounds like a finite-state machine that has its input string written on the paper\n* Primitive Steps of Human Computation:\n - Examining an individual symbol on the paper\n - Erasing a symbol or replacing it by another\n - Transferring attention from one symbol to another nearby symbol", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 730, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "03c8e27d-d856-4990-a6b6-276f4a095684": {"__data__": {"id_": "03c8e27d-d856-4990-a6b6-276f4a095684", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2dd8238f-b5c9-44cc-83ae-7c10f4f43b3f", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "e79ad957e239a2e46aeb41dd08b4da184b4e614e50c435a6fa811a3f02b36400", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machines\n\n* You can think of a **Turing machine** a finite state machine with unlimited amount of memory\n\n\n \n \n \n\n \n\n\n\n\n\n\n\n\n\n \n\n \n \n
Control
011010010\u22ef\u22ef\u22ef
Tape
\n\n* A Turing machine has the following:\n - A control (state diagram/transition functions)\n - An infinite long tape\n - A tape head that can move around on the tape\n * A TM can read input symbols from its tape\n * A TM can write output symbols to its tape", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 669, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4c00521c-6644-4cb4-b861-a82415284568": {"__data__": {"id_": "4c00521c-6644-4cb4-b861-a82415284568", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "636fdb76-0a49-4e1a-9423-0b0c8eb670de", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "1ddff7de84c616278900fdbd7cecbe47ab4b3d2d11bb052ff7f5d9b6304248cd", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machines\n\n* At first, tape contains the input string followed by infinite blank (\u2423) symbols\n * Example: Input: `101`\n\n \n\n\n \n \n \n
101\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u22ef
\n\n * Example: Input: `011010010`\n\n \n\n\n \n \n \n
011010010\u2423\u2423\u22ef
\n\n * Example: Input: `\u03b5`\n\n \n\n\n \n \n \n
\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u2423\u22ef
\n\n* The machine can store information by writing symbols onto the tape\n* The output of a machine is either *accept* or *reject*\n * Output symbols/strings can also be on the tape\n* **A Turing machine may run forever**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 962, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5af2408d-91dc-454d-b1c7-6be79e171657": {"__data__": {"id_": "5af2408d-91dc-454d-b1c7-6be79e171657", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b82ac977-b61f-48dd-9704-799fd90d58c3", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "1bd07573fec529db600fd4dc5c79116ccf215e6ccff87d9ea897fe99aaefbb4a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine\n\n```\nControl\n```\n\n| a | b | a | b | \u2423 | \u2423 | \u2423 | ... |\n\n1. A Turing machine can read a symbol from the tape under the tape head \n2. A Turing machine can write a symbol to the tape under the tape head \n3. The tape head can move to the left and to the right one square at a time \n4. The tape is infinite \n5. The special states for rejecting and accepting take effect immediately ($q_{reject}$ and $q_{accept}$) \n * Unlike DFA that needs to process the last input symbol before accepting or rejecting an input string", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 537, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "da9aa4c3-be4e-40f1-8ac0-2849f6615b27": {"__data__": {"id_": "da9aa4c3-be4e-40f1-8ac0-2849f6615b27", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "531afd3a-2533-4db9-9fb7-3b101ce460ed", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "d8816e5fc05fc6469ef2121deb23ed09df8be533b86233b9c948ea737a22c599", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Let $$ \\Sigma = \\{0, 1, \\#\\} $$\n* Consider the language $$ B = \\{ w \\# w \\mid w \\in \\{0,1\\}^* \\} $$\n - Example of strings in $$ B $$ are\n * 01101#01101\n * #\n * 01#01\n* This language is not regular\n - Need an infinite states to remember all symbols in $$ w $$\n - We can use the Pumping lemma to prove that it is not regular\n* If the number of # symbol in a string is not exactly 1, the string is not in the language $$ B $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 448, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "79833edd-7f38-4578-871a-ec5c2977af40": {"__data__": {"id_": "79833edd-7f38-4578-871a-ec5c2977af40", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c178e692-3bc8-45cf-b811-ae4b941afedf", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "fc0d148df8878f1828cd8f79ac269230bfdfe9f268dca4915f93d1079ae3fb55", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Let $$\\Sigma = \\{0, 1, \\#\\}$$ and $$B = \\{ w \\# w \\mid w \\in \\{0,1\\}^* \\}$$\n* Imaging what would you do if I give you a very long piece of paper and it contains a string of the form $$x \\# y$$ where $$x, y \\in \\{0,1\\}^*$$ and they are so long that you cannot remember all its symbols\n* One way is to go back and forth across the \\# and compare symbols at the same position one symbol at a time\n* You may need to cross off those that have been compared\n\n```\n0110110101011010111010100101011001100101010#0110110101011010111010100101011001100101010\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 562, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "23a868d5-94ea-4364-b2e2-dad0e0ffd90e": {"__data__": {"id_": "23a868d5-94ea-4364-b2e2-dad0e0ffd90e", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "de92c691-5b1f-4be9-b182-ae35ad06a0af", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "12bbdb4b38cc94862a3eae0cd3a2d280a928bdc8a88d2298d57aa6d4d9a2e1d1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Formal Definition of a Turing Machine\n\nA **Turing machine** is a 7-tuple, \n$$(Q, \\Sigma, \\Gamma, \\delta, q_0, q_{accept}, q_{reject}),$$ \nwhere \\(Q, \\Sigma, \\Gamma\\) are all finite sets and\n\n1. \\(Q\\) is a set of states, \n2. \\(\\Sigma\\) is the input alphabet not containing the **blank symbol** \\(\\sqcup\\), \n3. \\(\\Gamma\\) is the tape alphabet, where \\(\\sqcup \\in \\Gamma\\) and \\(\\Sigma \\subseteq \\Gamma\\), \n4. \\(\\delta : Q \\times \\Gamma \\to Q \\times \\Gamma \\times \\{L, R\\}\\) is the transition function, \n5. \\(q_0 \\in Q\\) is the start state, \n6. \\(q_{accept} \\in Q\\) is the accept state, and \n7. \\(q_{reject} \\in Q\\) is the reject state.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 644, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b6b55b96-a7b8-4112-9e40-424c224e9543": {"__data__": {"id_": "b6b55b96-a7b8-4112-9e40-424c224e9543", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "07528021-ec45-453b-a31c-64b1153a5c7e", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "20d5b903657fd5f044af8ab63b88b9f57c7d0c816dee5bdf2a4b5e0c5374893a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Transition Function of a Turing Machine\n\n* The transition function of a TM is defined as:\n\n$$\n\\delta : Q \\times \\Gamma \\to Q \\times \\Gamma \\times \\{L, R\\}\n$$\n\n* An assignment \\(\\delta(q, a) = (r, b, L)\\) means if the machine is at state \\(q\\) and the tape head is over a square containing \\(a\\), the machine writes symbol \\(b\\) (replacing \\(a\\)), changes its state to \\(r\\), and moves the tape head to the left one square.\n - This transition can be represented in a state diagram as shown below:\n\n```mermaid\nstateDiagram-v2\n [*] --> q\n q --> r: a \u2192 b, L\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 567, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e936f96b-a97c-4a9a-b258-880ab4a9ce69": {"__data__": {"id_": "e936f96b-a97c-4a9a-b258-880ab4a9ce69", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2db1ef4f-ce24-45a1-ae1d-dcb103d839b2", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "1d07685be58e534a127f548eff85a631e0369b9596e53fbf1d41b454d3e32ecf", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Computation of a Turing Machine\n\n* The input string \\( w = w_1 w_2 \\ldots w_n \\in \\Sigma^* \\) is on the leftmost \\( n \\) square of the tape and the rest are filled with blank symbols\n* The tape head starts at the leftmost square of the tape\n* The machine processes input according to its transition function\n* If the tape head is at the leftmost square and the transition function indicates \\( L \\), the tape head stays at the same place\n* The machine continues until it enter the \\( q_{accept} \\) or \\( q_{reject} \\) state\n* **The machine may run forever**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 560, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fa9a01ca-8177-42df-861c-6eab9431dc4a": {"__data__": {"id_": "fa9a01ca-8177-42df-861c-6eab9431dc4a", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "67967a6b-5d6a-4cbb-82a6-3b0d00479d89", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "7ab0071036d998c37d366c75ca527694e6c42e5193ff08dab35b275726ba4f50", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Tracing a Turing Machine\n\n* To trace whether a DFA accept or reject a string is easy \n* To trace whether an NFA accept or reject a string is harder \n - An NFA can split into multiple copies \n - Each copy has its own current state \n - We use a computational tree to keep track of all copies \n* To trace whether a TM accept or reject a string is even harder \n - We need to keep track or the current state (similar to DFA or NFA) \n - We also need to keep track of the content of the tape \n - The content of the tape is changed over time (TM can write onto the tape) \n - We also need to keep track of the location of its tape head \n - Need to know the symbol under the tape head \n - The tape head needs to move to either left or right direction at every step", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 783, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8f734291-67c8-454e-a6b7-842d005e4f81": {"__data__": {"id_": "8f734291-67c8-454e-a6b7-842d005e4f81", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "73469d13-ed85-4f0b-b88e-785dccd018c1", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "b5224b79f545e690de6ea3c26acbe3f703d0431e30ba7487b11dd5d6c3361092", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Configuration\n\n* When a machine process an alphabet, three things change:\n - the state of the machine,\n - the content of the tape, and\n - the location of the tape head\n* The above three items can be represented by a configuration\n* A **configuration** is in the form of \\( u \\; q \\; v \\)\n - \\( u \\) and \\( v \\) are strings that can be empty\n - \\( q \\) is a state that represents the current state of TM\n - The content of the tape is the string \\( uv \\)\n - The tape head is on the first alphabet of the string \\( v \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 526, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "10c63e07-62db-42d1-9277-ab5fe72f4d92": {"__data__": {"id_": "10c63e07-62db-42d1-9277-ab5fe72f4d92", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9d23310a-def1-4b7a-8114-8751cd93b046", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "02c40a00985576c71d4cb9d8a3718219348ad925117fafeeb73f096e58894f7a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Configuration (Examples)\n\n* Example: The configuration `1011q_7 01111` corresponds to a machine as shown below:\n\n q\u2087\n\n \n\n\n \n \n\n\n\n\n\n\n\n\n\n\n \n
101101111\u2294\u22ef
\n\n* Example: The configuration `q_3 101101111` corresponds to a machine as shown below:\n\n q\u2083\n\n \n\n\n \n \n\n\n\n\n\n\n\n\n\n\n \n
101101111\u2294\u22ef
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 553, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e7c77766-e764-441a-bfd8-7cde60d718bb": {"__data__": {"id_": "e7c77766-e764-441a-bfd8-7cde60d718bb", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8a816488-4bd1-430d-9407-e4d437b06582", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "c973575f817b161756a57869aadb60d9a9228c765bacf4b4fd32adf77777dd88", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Configuration (Examples)\n\n* Example: The configuration `10110111q_8 1` corresponds to a machine as shown below:\n\n\n \n \n \n \n\n \n\n\n\n\n\n\n\n\n\n\n\n \n
q8
101101111\u2294\u22ef
\n\n* Example: The configuration `101101111q_4` corresponds to a machine as shown below:\n\n\n \n \n \n \n\n \n\n\n\n\n\n\n\n\n\n\n\n \n
q4
101101111\u2294\u22ef
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 670, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f1fe9bc4-d170-44d5-b12d-b28d06924c5d": {"__data__": {"id_": "f1fe9bc4-d170-44d5-b12d-b28d06924c5d", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "31ef71f7-b42d-4df0-921c-fe65f7d441d1", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "9f20749c9678eb898d26686baed5235e4d05d3d66ad093cb7591be1168d18bb4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Configuration\n\n* We say that the configuration \\( C_1 \\) **yields** configuration \\( C_2 \\) if the machine can **legally** go from \\( C_1 \\) to \\( C_2 \\) in one step\n* For example, suppose a TM has the following transition function: \n $$\n \\delta(q_i, 0) = (q_j, 1, L)\n $$\n* Consider the configuration `010010q_i0101` \n - For the above configuration, \\( u = 010010 \\), \\( q = q_i \\), and \\( v = 0101 \\) \n - The current state is \\( q_i \\) \n - The content of the tape is `0100100101` \n - The tape head is on top of the symbol 0 (the first symbol of \\( v \\)) \n* According to the above transition function, the next configuration would be \n `01001q_j01101`\n* We say that the `010010q_i0101` yields `01001q_j01101`", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 732, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e8f88aac-40a7-4e32-b8b5-6eca80c43ef6": {"__data__": {"id_": "e8f88aac-40a7-4e32-b8b5-6eca80c43ef6", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bb034993-4e86-428a-9636-2c111a10847d", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "91f13ee3a54e329ae96a3a31baf2859aec74c603ff987d77f004ec52eb919e05", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Configuration\n\nFormally: \n* Let \\(a, b, c \\in \\Gamma\\) and \\(u, v \\in \\Gamma^*\\) \n - \\(a, b,\\) and \\(c\\) are symbols \n - \\(u\\) and \\(v\\) are strings over \\(\\Gamma\\) \n - By concatenating the symbol \\(a\\) to the end of the string \\(u\\), we get the string \\(ua\\) \n\n* We say that \n $$\n ua \\ q_i \\ bv \\quad \\text{yields} \\quad u \\ q_j \\ acv\n $$\n if \n $$\n \\delta(q_i, b) = (q_j, c, L)\n $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 402, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4f68964d-745b-496b-8ba9-5d2a55f86b2c": {"__data__": {"id_": "4f68964d-745b-496b-8ba9-5d2a55f86b2c", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2e94eac8-3942-47d0-8582-eddd303b488d", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "272b4b6ed4de25ac24950aa0720d7f8dcd52ff1689a6ec3c9faf14c204f77f18", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Starting Configuration\n\n* Given a string $$w = w_0 w_1 w_2 \\ldots w_n$$\n* Suppose the start state of a TM $$M$$ is $$q_0$$\n* When $$M$$ is about to process the string $$w$$:\n\n \n\n\n \n \n \n \n \n \n\n \n \n \n\n \n
$$q_0$$$$w_0$$$$w_1$$$$w_2$$\u22ef$$w_n$$\\(\\sqcup\\)\\(\\sqcup\\)\u22ef
\n\n* The starting configuration of $$M$$ on input $$w$$ is $$q_0 w$$\n* Example: The starting configuration of $$M$$ on input 01101 will be $$q_0 01101$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 965, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "05757e2a-afc0-4c3b-ab26-5d72f8442d0c": {"__data__": {"id_": "05757e2a-afc0-4c3b-ab26-5d72f8442d0c", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d7460287-2399-4db1-b08a-297053c179fe", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "c33fc31dc0aa8cb1687f70314fd06cc0702fe5ce7a9cda8b477fc508242b53cf", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Configuration\n\n* If the state in a configuration is \\( q_{accept} \\), the configuration is called **accepting configuration**\n - \\( 0101 q_{accept} 101 \\)\n - \\( q_{accept} 1111 \\)\n\n* Similarly, if the state in a configuration is \\( q_{reject} \\), it is called **rejecting configuration**\n - \\( q_{reject} 010100 \\)\n - \\( 011 q_{reject} 01 \\)\n\n* Once a machine yields either the accepting or rejecting configuration, the machine will not yield any other configuration (**halting configuration**).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 502, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8f46aa61-3cd9-423d-870a-ee0049ba506d": {"__data__": {"id_": "8f46aa61-3cd9-423d-870a-ee0049ba506d", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5d358f44-9364-4eba-9b06-2ffbdb4db936", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "f67a16f5215479e505dcddeab94544cb2c7b654ac8bbe138712576d848b659bb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Language of a TM\n\n* A machine \\( M \\) accepts a string \\( w \\) if the sequence of configuration \\( C_1, C_2, \\ldots C_k \\) exists, where \n - 1. \\( C_1 \\) is the starting configuration of \\( M \\) on input \\( w \\), \n - 2. each \\( C_i \\) yields \\( C_j \\), and \n - 3. \\( C_k \\) is an accepting configuration \n\n* The set of all strings \\( A \\) accepted by \\( M \\) is **the language of** \\( M \\) \n - \\( M \\) recognizes \\( A \\) or \n - \\( L(M) = A \\) \n\n* **Note:** If \\( L(M) = A \\), it does **not** mean that \\( M \\) rejects all strings that are not in the language \\( A \\) \n - Given a string \\( s \\notin A \\), \\( M \\) may loop indefinitely on input \\( s \\) \n - Unlike a DFA \\( D \\), if \\( L(D) = B \\), \\( D \\) rejects all strings not in the language \\( D \\) \n - DFA \\( D \\) cannot loop indefinitely on any string", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 829, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "13dc0332-446c-454a-8d66-7c8f2940ef6a": {"__data__": {"id_": "13dc0332-446c-454a-8d66-7c8f2940ef6a", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/turing_machine_01_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2974e4fc-aa26-4792-a3c0-634dbaee5c8b", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/turing_machine_01_handout.pdf"}, "hash": "96611b201d27581a13fc44213cdd507f78e12db36b54ef3b82596a5f90fec02c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Language of a TM\n\n* A language \\( B \\) is called **Turing-recognizable** if some Turing machine recognize it \n - Sometimes we call \\( B \\) is recognizable \n* Given a string \\( w \\) and a TM \\( M \\) there are three possibilities: \n 1. \\( M \\) accepts \\( w \\) \n 2. \\( M \\) rejects \\( w \\) \n 3. \\( M \\) loops indefinitely on input \\( w \\) \n* Turing machines that never loop indefinitely are called **deciders** \n - These type of TMs will always halt on all inputs \n* A decider that recognizes a language is said to **decide** that language \n* A language is called **Turing-decidable** if some Turing machines decide it \n* Suppose TM \\( M \\) is a decider and \\( L(M) = C \\), we say that \n - \\( M \\) decides \\( C \\) \n - \\( C \\) is decidable", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 757, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4e1ff16f-88dd-4732-bcfb-b4e24a668348": {"__data__": {"id_": "4e1ff16f-88dd-4732-bcfb-b4e24a668348", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c718d7dc-0091-418c-ba49-268c0e532bc9", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "643509a2c88eecb76a44b3eecc04d34c3d7177d38a4905e50d5d7b47961fda51", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L09 Scenarios & Use Cases\n\nCS 1530 Software Engineering \nNadine von Frankenberg \n\nFall 2025 \n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 177, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a3c57bf1-7a1e-4b4f-a295-20d652be88ee": {"__data__": {"id_": "a3c57bf1-7a1e-4b4f-a295-20d652be88ee", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "efbc3004-ecb9-4354-bcdd-749a3d8cf57e", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "5bd883d0b7d9cc41f851aa4e559aa881e166fa0f96e97b11b654ab3db87d5efd", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet.\n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes.\n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n* Material from these notes is obtained from various sources, including, but not limited to, the following:\n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994.\n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011.\n - http://scrum.org/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1362, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2f8c9461-f4c1-4bc4-b086-b52837e9dde5": {"__data__": {"id_": "2f8c9461-f4c1-4bc4-b086-b52837e9dde5", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "776c473c-2b18-47aa-8353-f9750d03e31a", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "a98fc66f9ece9a745b579af63796b6b373a8cca079e15f579d79fb85d7e425f6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You understand the different means of representing requirements \n - Scenarios \n - Use case \n* You can model a use case diagram", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 152, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dbadd120-e10b-4298-9306-83ac98642d4e": {"__data__": {"id_": "dbadd120-e10b-4298-9306-83ac98642d4e", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "87df2992-a843-4dec-a768-3b5e0d3e0257", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "ec86a0c88e0abaef88ff3c6851ee5ec966657759ad55cc9d400474ead4ffe022", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Scenarios\n* Use cases\n* User stories", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 58, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dac7922d-aba1-4ff2-942a-05dc43b1ba99": {"__data__": {"id_": "dac7922d-aba1-4ff2-942a-05dc43b1ba99", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "90b55eb8-e599-47f4-b7f7-f63a12a7a2ea", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "2a0f92b753a38b0fb508157e7f7d1ea2ea010f8971a84220c45a69e107af4af1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# So far \u2026\n\n* We have defined functional, non-functional requirements, and constraints\n* They form the foundation of the system we want to build\n\n**Problem** \nHow do we ensure every stakeholder understands the system?\n\nHow can we validate the requirements with stakeholders?\n\n> -> We need techniques that make requirements concrete and communicable!", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 351, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "adc8666e-fad8-425a-83c6-5461da464bd0": {"__data__": {"id_": "adc8666e-fad8-425a-83c6-5461da464bd0", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "57cfb6a9-1246-4ea0-b824-e43d77405411", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "2fe1a397ba8a2e1525cf5fa9bb333b4d6d01e4796ec5b1c63e621147a6137f6b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Common techniques\n\n* **Interviews** \n - Structured vs. unstructured, open-ended questions\n* **Surveys**/questionnaires (useful for large groups)\n* **Workshops**/brainstorming\n* **Observation** (shadowing users, contextual inquiry)\n* **Document Analysis:** Legacy system specs, regulations\n* **Prototyping** \u2013 Low-fidelity mockups to elicit feedback\n* **Use Case / Scenario Writing:** Stories of user interaction\n* **User Stories** (agile format)\n* \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 454, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0e1cff9e-34f9-465c-84da-7bfdf53811ef": {"__data__": {"id_": "0e1cff9e-34f9-465c-84da-7bfdf53811ef", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9da8e4e2-0e74-4996-8e3d-ee3c184080d5", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "b697a55997e60e10b0b091e0135f78c9d5a8e6085086392c20fd2ce69156115b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Validation techniques align requirements with user needs\n\n* **Scenarios:** A concrete story of a user interacting with the system \n* **Use Cases:** A structured description involving generic end-users (actors) and the system, abstraction that covers all possible instances \n* **User Stories:** A short statement of the need from the end-user\u2019s perspective, making it easier to understand and prioritize \n\n> These techniques help validate requirements with stakeholders and identify missing FRs, NFRs, or constraints.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 522, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f7a2b0f2-081b-4af5-a504-c22b7219a113": {"__data__": {"id_": "f7a2b0f2-081b-4af5-a504-c22b7219a113", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3fb6a6d7-8047-4129-9f16-c234707eed4f", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "f08dad8486aa31f758038abd49c242e7adb6573bf9cb958776f77ef8dca24554", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Identifying scenarios\n\n* Informal **short** descriptions of specific user interactions in **natural language**\n* They provide a **narrative** of how the system should function through a **sequence of events, actions, or steps**\n - Used for exploring detailed interactions and edge cases\n* Basis for test cases & validation \n - Best case scenario \n - Worst case scenario \n - Average case scenario \n\n> Describe a flow of events with multiple potential outcomes", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 469, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ca4f43e5-6590-41c1-95a6-d781981cb427": {"__data__": {"id_": "ca4f43e5-6590-41c1-95a6-d781981cb427", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c17cf19a-c752-4743-81ba-ab582098c608", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "8c9def720637ce57753928867004eae33a47bda83f75ac42545971643ad46e5e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example]\n\n**FR3 View Sinkhole:** Residents and city officials should be able to view reported sinkholes on a map.\n\n*Jamie opens the SiMCity app on their phone while walking home. \nThey see visual markers for sinkholes on a street map. \nWhen they select a sinkhole marker, the app shows the sinkhole\u2019s location, date reported, and verification & repair status.*\n\n> Yes, I want to see a detailed status! \n> Residents should not see unverified reports.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 456, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8dd957f7-830a-4d9a-b399-52f58d480773": {"__data__": {"id_": "8dd957f7-830a-4d9a-b399-52f58d480773", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4d1f38c9-90c6-456f-bad8-0d543be10876", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "d42b7c4cbd6a363972ba74fe6c8fb4d54e9f76fdc02da317c7c944459ca8bdbc", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Scenarios have a concrete story-line\n\n* Scenarios enhance requirements elicitation by providing a tool that is understandable to stakeholders\n* Concrete, user-centered descriptions of system features used by actors (end-users), often involving informal descriptions\n - Textual representation of how the system is used **written from the** (end)**user\u2019s perspective**\n - Scenarios can incorporate visual elements: e.g., videos, pictures, or storyboards\n - Scenarios can encompass contextual details, e.g., the (physical) environment, social situations, \u2026\n* In **scenario-based design**, scenarios serve as the foundation for designing the hypothetical interaction of end-users with a system", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 695, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8394def2-28e7-466d-9aac-fa6ae3d81566": {"__data__": {"id_": "8394def2-28e7-466d-9aac-fa6ae3d81566", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7f31de39-1a67-4001-bf9c-d25ed478162a", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "76055093c16bea5bcc05714436620ca924627cf18184e241805bb32523db0f93", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] As-is scenario\n\n## FR4 Reorder Supplies: The system allows users to reorder supplies.\n\n### STORYBOARD\n\n* WE NEED MORE POST-ITS\n* MAKES NOTE OF SUPPLIES NEEDED ON CLIPBOARD\n* PHYSICAL INVENTORY\n\n### PERSONA:\n* CORPORATE BUYER, JAMES\n\n### SCENARIO:\n* REPLENISH OFFICE SUPPLIES\n\n----\n\n| ![Storyboard panel 1: Person holding clipboard saying \"WE NEED MORE POST-ITS\" in front of shelves] | ![Storyboard panel 2: Computer screen on desk labeled \"JAMES'S DESK\" with a note \"SUPPLY LIST\"] | ![Storyboard panel 3: Computer screen showing \"SUCCESS!\"] |\n|---|---|---|\n\n* SELECTS ITEMS FROM FAVORITES LIST \n* USES DESKTOP & SUPPLY LIST AS TOOL \n\n* RECEIVES SHIPMENT WINDOW W/ ORDER SUBMISSION \n* SETS PLAN FOR RESTOCK \n\nhttps://www.nngroup.com/articles/storyboards-visualize-ideas/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 786, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8618a457-caf5-47f8-bc2e-8b6962354f18": {"__data__": {"id_": "8618a457-caf5-47f8-bc2e-8b6962354f18", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0030bf3b-db5b-4058-9373-d719107e4a1e", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "44f968449b06521eaab30015ee8dfe64e3ba9e52d53345070aa2e0d061bd4dde", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **[Example] From Storyboards to Code**\n\n| Scenario | Storyboard |\n|----------------------------------|--------------------------------|\n| **Event 1** | **Frame 1** |\n| *Worker* activates the *emergency transmitter.* | [Sketch of a hand pressing a button labeled \"activate emergency off\"] |\n| **Event 2** | **Frame 2** |\n| *Rescuer* gets a call on his *Phone.* He answers the call. | [Sketch of a phone screen showing an incoming call] |\n| **Event n** | **Frame n** |\n| *Rescuer* captures *emergency drone* on the field. | [Sketch of a drone being captured] |\n\n----\n\nLukas Alperowitz, Constantin Scheuermann, and Nadine von Frankenberg. \"From Storyboards to Code: Visual Product Backlogs in Agile Project Courses.\" SEUH. 2017.\n\nUniversity of Pittsburgh\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L09 Representing Requirements - Scenarios & Use Cases", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1017, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "43d95cf6-b1f8-4dfb-a56d-ad100076aa3b": {"__data__": {"id_": "43d95cf6-b1f8-4dfb-a56d-ad100076aa3b", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "688dcb2c-bea4-44b7-8d74-4b05fc49dd55", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "ea0323716111a382c07b3df3d7887dff44397ce677b83733f447b78feac8e479", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Scenarios\n\n* A scenario is a textual description that should include:\n - The **name** of the scenario\n - The **user** (\"instantiated\" main actor of the scenario)\n - The **purpose** of the scenario\n - **Steps** of the scenario\n - *Optional:* Assumptions about, e.g., equipment/software", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 292, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d7653125-7280-42e6-901b-cde7d067128b": {"__data__": {"id_": "d7653125-7280-42e6-901b-cde7d067128b", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "01758b2e-50b8-4ece-a556-02d4caaed0c6", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "5b4fd3ead34ccf0dc546107775c2eb9f05c7192391e7ed046e037151c69baa38", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# How to write a scenario?\n\n**User** \n**Personas** \nDefine the target user\n\n**Name & Purpose** \n**Goal** \nDefine the goal\n\n**Steps** \n**Paths** \nDefine the task(s), possible paths, and problems\n\n[The page includes three icons above each section: \n- User: A circle with diverse illustrated people inside. \n- Name & Purpose: A circle with a checklist icon inside. \n- Steps: A circle with a flowchart icon inside.]\n\nIcons source\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L09 Representing Requirements - Scenarios & Use Cases", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 532, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f94b4de4-a4fb-4936-a34f-90b403228a94": {"__data__": {"id_": "f94b4de4-a4fb-4936-a34f-90b403228a94", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ff6a04ac-047e-4fa0-9042-7c43009a93ad", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "5f3d1e97880f3ecb293d3f10d2feb8b1612893cf5a6818da4405626936317c5f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# How to write a scenario?\n\n* Format can be **informal** or **formalized**\n* The rest is up to the author!\n * E.g., include different formatting to highlight situations or context\n * Names and details should _(somewhat)_ resonate with the audience\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n \n
Informal scenarioFormal scenario
Scenario nameScenario name
\n Scenario description
\n (natural language text)\n
Participating actors
\n Flow of events:
\n 1. Scenario description in bullet points
\n 2. Typically each point describes one step (i.e., event)\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 873, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "692bcea9-4254-474c-94c0-4bff1269fc61": {"__data__": {"id_": "692bcea9-4254-474c-94c0-4bff1269fc61", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fbb126ec-4aaf-417d-bd62-c98629920739", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "56ac5198da343587fa5f4d5caf1e90398f9e906a8b2921565ebd2293f932ca5f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Visionary Scenario\n\n## Pizza Cravings: Ordering a Pizza\n\nOn a Wednesday night, Sarah, a CS senior at Pitt, is fully immersed in her study session for 1530. Around 10pm, she suddenly craves a pizza. She opens the pizza ordering app \"CrustRight\", logs in with her Pitt student ID, and selects to have her order delivered.\n\nAfter ordering a small Supreme pizza with extra cheese and a surprise soda, she selects her dorm room as delivery address and pays using her student meal plan.\n\nShe receives a confirmation and an info that her order will be delivered in 15 \u2014 20 minutes.\n\nShe waits patiently. 16 minutes later, she receives a message that her pizza is outside. She buzzes the delivery person in and receives her order at her doorstep. She enjoys her late-night meal, reenergizing her study session.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 815, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5103e669-870f-422c-839e-cd1ebfd28525": {"__data__": {"id_": "5103e669-870f-422c-839e-cd1ebfd28525", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "889ad586-729b-4006-af89-d3dbc943ed0f", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "7f739b6f656f6ceb2cf11005df774cf0ec3f9a1477f717a0eb26e80d5979bfa6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] As-is scenario\n\n> \ud83d\udea8 **[Notation alert]** \n> An instantiated actor is denoted as \n> **Concrete Name : ActorType** \n> (both `:` and _underlining_ the actor indicate that we are dealing with an instance)\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n
ScenarioDepositing money
Participating actorsRobin: BankClient
Flow of events\n 1. Robin celebrated their birthday last Wednesday and received birthday money ($300) from their relatives and wants to deposit it to their bank account.
\n 2. Robin visits a bank branch of their bank \"HelloSavings\", a 5 minute walk from their apartment.
\n 3. They queue up at the teller's counter, behind 10 other customers and wait patiently.
\n 4. Finally, when it\u2019s Robin\u2019s turn to talk to an agent, they need to provide physical identification. Robin uses their driver\u2019s license and the agent confirms their identity.
\n 5. Robin hands over the $300. The agent counts it, confirms the amount, and uses the bank\u2019s internal system to schedule the move to Robin\u2019s account.
\n 6. Robin receives a printed receipt for the transaction.
\n 7. Two weeks later, Robin receives their bank statement by mail and checks their balance to confirm that the birthday money transaction has made its wait to their account.\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1481, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b0d34335-09a9-458a-a361-4427cea1e486": {"__data__": {"id_": "b0d34335-09a9-458a-a361-4427cea1e486", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fbaedddd-79ce-4928-8c01-39baa059cb13", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "417194ff370644b1403321162598e7497b75114995c953f75c14713efcf6465b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Visionary scenario\n\n\n \n \n \n \n\n \n \n \n\n \n \n \n
ScenarioDepositing money
Participating actorsRobin: BankClient
Flow of events\n 1. Robin celebrated their birthday last Wednesday and received birthday money ($300) from their relatives and wants to deposit it to their bank account.
\n 2. Robin opens the \"Coinnect\" app.
\n 3. The \"Coinnect\" app shows a welcome message and asks Robin to log in.
\n 4. Robin logs in with a biometric login.
\n 5. The \"Coinnect\" app shows an overview of Robin\u2019s favorite banks.
\n 6. Robin selects to file a deposit at a physical location with \"HelloSavings\" bank.
\n 7. The \"Coinnect\" app shows all physical locations of Robin\u2019s bank within a 5 mile radius and the current wait times.
\n 8. Robin\u2019s closest bank location (a 5 minute walk away) shows a current wait time of 32 minutes.
\n 9. Robin selects to virtually stand in line.
\n 10. Robin receives a notification 8 minutes before it is their turn in line.
\n 11. Robin leaves their apartment and walks over to the physical location of the \"HelloSavings\" bank.
\n 12. When Robin arrives, the \"Coinnect\" app registers their arrival and confirms their spot in the current queue.
\n 13. Robin receives a number, which the bank teller calls out when it is their turn 2 minutes later.\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1506, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "323acb72-7aed-4c69-b3c6-ac3b34cba582": {"__data__": {"id_": "323acb72-7aed-4c69-b3c6-ac3b34cba582", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ec21280e-7d21-41cb-b5bb-f4cf36cb22ec", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "cb8317b00629520700ae83579078c8fe3d7af833c21b14d45dceb5d7e61b6608", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Types of scenarios\n\n* **As-is:** Describes the current situation, often focusing on an existing system\n* **Visionary:** Envisions the desired future state, outlining system goals\n* **Demo:** Showcases system functionality to stakeholders\n* **Test:** Specifies steps for quality assurance and validation\n* **Evaluation:** Assesses system effectiveness against criteria\n* **Training:** Guides users in effective system use\n\n\n \n \n \n\n \n \n\n \n \n\n \n \n
Greenfield
&
Re-engineering Projects
Demos
Demos
&
Acceptance Tests
Post delivery
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 681, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4db24cba-5f30-4ab3-86fb-578fc4b809c4": {"__data__": {"id_": "4db24cba-5f30-4ab3-86fb-578fc4b809c4", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6a47b973-52a1-4b78-b3e8-ff953f489119", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "b5cb62d2587d2bce962fad916626863940fadf6bd4f901709f3052440290bca4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Deriving scenarios\n\n* **Client conciseness:** Customers may not provide extensive details for non-existent systems \n* **Domain expertise:** Customers understand the problem domain, not the solution domain \n* **Avoid assumptions:** What is obvious to you may not be apparent to the customer \n* **Dialectic engagement:** Engage in dialogue to help clients formulate scenarios \n* **Dynamic requirements:** Requirements often evolve during scenario formulation \n* **Observation:** For existing systems, insist on task observation, interface engineering, or re-engineering \n* **(End-)user engagement:** Speak to (end-)users for valuable insights", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 649, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "93f7415a-356f-4c18-b4a8-d6389ce30b1d": {"__data__": {"id_": "93f7415a-356f-4c18-b4a8-d6389ce30b1d", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ff0339ca-286f-4a9d-82f7-c47792fbf62c", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "44f233ed3d2553e111d0eb135868a6293440a348bca882f0a9f54207b21450e4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# How to write a scenario? (cont.)\n\n* **Starting point:** Begin with the problem statement (if available) \n* Answer the following **questions:** \n - Which actors are involved? \n - What are the core functions that the system must perform? (From the actor\u2019s perspective) \n - What information can the actors access, generate, store, modify, delete, or introduce into the system? \n - Which external changes does the actor need to inform the system about? How often? When? \n - What events should trigger notifications to the actor using the system? \n* Decide on names, contextual circumstances if needed, etc. \n - **Know your audience** \u2014 familiarity with a situation may be relevant", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 693, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "88b3991f-da6e-4e56-87f5-451ae9af8424": {"__data__": {"id_": "88b3991f-da6e-4e56-87f5-451ae9af8424", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4a0b7b56-7b0e-4bdc-abbc-eebb14a0ca75", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "12c02d612d0d36462095e2e4153d94751e4fbb8c4dd584a2b59a7b1e36ec416a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Scenarios\n* Use cases\n* User stories", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 58, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d1f511b2-7489-4f75-977a-5795cae771e3": {"__data__": {"id_": "d1f511b2-7489-4f75-977a-5795cae771e3", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b53aafcd-ee6f-409c-8581-fec15b4a55a1", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "f725bb18f323c586f2d032058253e151f2d396b425848a3a379a82e490a5bfae", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Deriving functionality\n\n* Scenarios focus on actor identification & the application domain \n - Shortcoming: static, does not adapt to different processes that need to be supported by a (new) feature \n* Next step: **Based on the scenario(s),** identify functionality where an actor interacts with the system \u2192 **use cases** \n - Describe the different ways how a user can interact with the system \n - Are there any conditions tied to a functionality? \n - Any specific qualities that need to be considered?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 515, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "152a654e-06c8-4a2b-8d09-1cb30fe3309e": {"__data__": {"id_": "152a654e-06c8-4a2b-8d09-1cb30fe3309e", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5dc10584-eec8-4de1-9275-ad1e2ae6e431", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "2588df804622789f62723817ff662bfd01b050e64a4adf04562886430cf6e74b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Use cases\n\nGoal: Define system functions through a series of events, producing observable outcomes for actors\n\n* Use cases are descriptions of interactions between a system and actors (= its users or other systems)\n* Actors initiate use cases to access system functionality\n\n```\n Administrator Occupant\n Resident\n\nAdministrator GIS SiMCity\n Occupant Geminio\n\nSimCity interacts with\nan actor (GIS)\n\nGeminio Sensor\n CityOfficial\n\nUML actor notation:\nTwo actors interact with the system\n\nDeveloper Sensor\n```\n\n[University of Pittsburgh logo]\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L09 Representing Requirements - Scenarios & Use Cases", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 774, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bf5f9498-0cca-421d-9e3f-f82a04207e49": {"__data__": {"id_": "bf5f9498-0cca-421d-9e3f-f82a04207e49", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "672de12f-2ec7-4a58-9f37-a258e7ae85d2", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "cb77f4609dd2367a5610fb41f06ef7f61eb26636b99f268c775ec1d952e8a280", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Use cases\n\n* Use cases describe the **system\u2019s behavior** from the **actor\u2019s point of view**\n* Typically, functional requirements should be phrased in a way that their respective short title can be directly derived into a use case\n * Example: \n **FR1 View Hazardous Area:** Pittsburgh\u2019s residents can view hazardous areas where sinkholes are likely to occur.\n\n* Use case - UML representation:\n\n```mermaid\n%% UML Use Case Diagram\nactor Resident\nusecase \"View\\nHazardous Area\" as UC1\nResident --> UC1\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 510, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "14f5c552-802d-429c-8f49-0aeebbcaf3a7": {"__data__": {"id_": "14f5c552-802d-429c-8f49-0aeebbcaf3a7", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f1f92b47-4413-4f49-b916-cb98809531c0", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "faea5ef9a061602f11daf80bf0e7369fb27fd0b3fd8860b5c5ec7ebb4bd1322b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Use cases - textual description\n\n* If a use cases has a flow of events that is non-trivial, a textual description helps to identify and document these events\n* Use cases are typically written from the **point of view of the user**\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n
Use case nameTrack location of SLFs
Participating actorsCitizens of Pittsburgh (enduser)
Flow of events\n 1. The citizen select a specific area or region on the map where they suspect or want to track Spotted Lantern Flies (SLFs).
\n 2. The system shows the location of spotted lantern flies in the selected area\n
\n\n> An event can also link to another use case. E.g., \n> 3. The system initiates use case \"View location\"\n\n> System steps (i.e., events that the system initiates) should be highlighted.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 997, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f34d38dd-fdfd-4fd9-ba6f-016993c2048a": {"__data__": {"id_": "f34d38dd-fdfd-4fd9-ba6f-016993c2048a", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0f386667-5cff-4b58-b914-2f74fabe2441", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "5bc892f9a71202b5ee67c9d7ea3cce4d56e44a8d87c4eac14083ca9c60ad1c05", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Formalized use case template\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Use case templateDescription
Use case name\nThe name of the use case should indicate what the user is trying to accomplish
\n(See short title of FRs)\n
Participating actorsActors should be named with noun phrases (e.g, CityOfficial)
Flow of events\nThe boundary of the system should be made clear.
\nActor-initiated steps and system-initiated steps should be distinguished
\nUse case steps in the flow of events should be phrased in the active voice\n
Entry conditionConditions that need to be satisfied before the use case is initiated
Exit conditionConditions satisfied after the completion of the use case
Quality requirementsRequirements that are not (directly) related to the functionality of the system
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1020, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3a69c807-0a54-4def-a8e0-4f99d9b441fa": {"__data__": {"id_": "3a69c807-0a54-4def-a8e0-4f99d9b441fa", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d7280c29-b6ad-41cd-9208-94d6691bec18", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "f9cb547f782162a77eddc1cc0e0ddf3630f0b33997e40895fa7868035b25e475", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Textual Use Case\n\n\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n
Use case nameCall for help
Participating actorsResident, PublicSafety
Flow of events\n 1. The Resident sees a sinkhole
\n 2. The Resident opens the SiMCity system.
\n 3. The Resident navigates to the sinkhole help overview
\n 4. The System displays available help options.
\n 5a. The Resident selects to call for help.
\n 6a. The System dials PublicSafety
\n Alternative path:
\n 5b. The Resident does not have cell phone reception, \"No cell phone reception\" extension use case is initiated
\n 4a. The System shows alternatives to calling for help\n
Entry conditionResident has access to SiMCity system
Exit conditionPublicSafety has been called
Quality requirements\n Displayed help options are relevant for resident\u2019s area
\n It should take at most 3 clicks to call PublicSafety\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1263, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5db1e728-b007-487a-a732-3f49814eebc6": {"__data__": {"id_": "5db1e728-b007-487a-a732-3f49814eebc6", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2caaec2a-322a-4442-9c62-78ac5612d765", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "7d5dd0778ad1f435ef8dc16a85bc59c35ad50c055562bf38afcc26744f6101c3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML Use Case Elements\n\n- **Actor** \n - Interacts with the system \n - The actor **initiates** the use case\n\n- **Use Case** \n - Can be derived from the FRs (short title)\n\n- **System boundary** \n - Defines the scope of the system \n - Separates the system from external actors \n - Clarifies the boundaries within which use cases operate\n\n```\n+-------------------------------------------------------+\n| |\n| System name |\n| |\n| Use Case |\n| |\n| |\n+-------------------------------------------------------+\n```\n\nActor \u2192 Use Case (arrow indicating initiation)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 868, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e6bbb69a-6c5b-4771-8710-f73ee02e2a23": {"__data__": {"id_": "e6bbb69a-6c5b-4771-8710-f73ee02e2a23", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1d660d84-22f1-4371-b24d-85b784bbb36c", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "f06d68e5b0efcc9a5749a08e825519567bfcb8fedabd94378a081ee13680fb9e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] UML Use Case Model\n\n**System name** \nSiMCity\n\n**System boundary**\n\n**Actor** \nResident\n\n**Use cases** \n* View Hazardous Area \n* Call for Help \n - <> Dial First Responder Number \n - <> No Phone Service\n\n**Relationships** \n* Resident \"initiates\" View Hazardous Area \n* Resident \"initiates\" Call for Help \n* Call for Help <> Dial First Responder Number \n* Call for Help <> No Phone Service\n\n----\n\nUniversity of Pittsburgh \n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L09 Representing Requirements - Scenarios & Use Cases", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 579, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fc672d91-48ea-402d-a69a-c0b87ecbf10c": {"__data__": {"id_": "fc672d91-48ea-402d-a69a-c0b87ecbf10c", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d7f0be94-137e-4112-a261-9f8507bd790b", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "778ee128c1a08732287400d5bef81f398c67ee42ece86929d9958dee58df54eb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML use case elements \u2014 <>\n\n\n \n \n\n\n \n
Use Case
Order Pizza
\u00abincludes\u00bbUse Case
Select Topping
\n\n* Goal: Reduce complexity by identifying commonalities in different use cases\n - Incorporates one use case (the included use case) within another (the including use case)\n - Ensures that the included use case is always part of the main functionality of the including use case\n - Enhances modularity and reusability by breaking down complex use cases into simpler, reusable components", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 553, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5f695016-2c03-4d27-9dac-2a86ab41123d": {"__data__": {"id_": "5f695016-2c03-4d27-9dac-2a86ab41123d", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "68c92e9e-2494-4d0d-9384-8fe4c432d4a7", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "6d4f6218bdb8b93025be2d6a17311d7bd8e43d6e68671173aa882b72473066d5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML use case elements \u2014 <>\n\n\n \n \n\n\n \n
\n \n\n\n \n \n \n
View Map
\n\n
\u00abextends\u00bb\n \n\n\n \n \n \n
Not connected to the internet
\n\n
\n\n* Goal: Reduce complexity by extending use cases with optional and conditional behavior that occurs within a use case \n* Allows for the inclusion of additional functionality, often triggered by **exceptional** or **rare scenarios** \n* Enhances flexibility and adaptability in system behavior without cluttering the primary use case with exceptional paths", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 677, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4a25c285-c1ee-4bd1-a708-111be55fb824": {"__data__": {"id_": "4a25c285-c1ee-4bd1-a708-111be55fb824", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c7f0756b-4cdb-4f2f-a4b7-b4abf7281db1", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "c25409fd5056bf5c427d409e0098fa8e0f9257a0595bca1cdd09b7b0c576b853", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** UML Use Case Model\n\n**CourseEnrollment**\n\n- **Student** (actor)\n\n- Use cases inside CourseEnrollment system boundary:\n - **Enroll in course**\n - <> Course is full\n - <> Course not available\n - <> Search for course\n - **Search for course**\n - <> Enter search filter\n\n**Relationships:**\n\n- Student \u2192 Enroll in course (direct association)\n- Student \u2192 Search for course (direct association)\n- Enroll in course <> Search for course (dashed arrow with <>)\n- Enroll in course <> Course is full (dashed arrow with <>)\n- Enroll in course <> Course not available (dashed arrow with <>)\n- Search for course <> Enter search filter (dashed arrow with <>)\n\n----\n\nUniversity of Pittsburgh logo in top right corner.\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L09 Representing Requirements - Scenarios & Use Cases", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 939, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "392d409c-7e05-46cd-89c4-cdc868cb3672": {"__data__": {"id_": "392d409c-7e05-46cd-89c4-cdc868cb3672", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d71f7ef8-7f3f-4d3b-a80c-2b6fc5142f38", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "50cbe7eac9529988f1d61a09d3529bf424c915a61870d9df95c54c0d79cd227b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] UML Use Case Model\n\nSearch for course <> Enter search filter\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n
Use case nameSearch for course
Participating actorsStudent
Actor-step
Flow of events\n 1. The student selects to search for a course.
\n 2. The system shows a list of courses. System-step
\n 3. The student enters a filter to search for a course.
\n The use case 'Enter search filter' is invoked.
\n 4. The system displays a list of courses that match the student\u2019s filter.\n
Entry conditionThe student is logged in.
Exit conditionA list of courses that match the search filter is produced.
Quality requirementsIt should take the student at most three clicks to search for a course (NFR5)
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1142, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ef2d2129-d0d0-427b-8b34-21701e4fbcee": {"__data__": {"id_": "ef2d2129-d0d0-427b-8b34-21701e4fbcee", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2aee9b13-97e7-4c9e-b861-db680b45a462", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "f8a935dfbd56acec4a99e7f418f0646f07ad776b4c1ac9f9c49e6d77f0491ae8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# I09 \u2014 Use case model \u23f3 10 min \ud83e\uddd1\ud83d\udcbb\ud83e\uddd1\ud83d\udcbb Pairs\n\nBased on your functional requirements, model a use case diagram\n\n----\n\n**continued L10!**\n\n----\n\nUse a modeling tool, e.g., \n**[Commercial]** OmniGraffle, Lucidchart, Visual Paradigm, gleek.io \n**[Free/open-source]** draw.io, Gliffy, StarUML, PlantUML", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 298, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ebf1440b-ff15-4178-b2ba-5665c029ecc6": {"__data__": {"id_": "ebf1440b-ff15-4178-b2ba-5665c029ecc6", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "499b5452-7778-4177-937f-e34ad66ac19c", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L09 Scenarios & Use Cases.pdf"}, "hash": "08365159e961f3ee3f98e64bd0d2a9c8523313439f01617b45f1d4044ea75eea", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L09 Scenarios & Use Cases\n\nCS 1530 Software Engineering \nNadine von Frankenberg \n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu \n\nFall 2025", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 177, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c87d2585-cb98-4028-9a0d-d8fe9bb6f029": {"__data__": {"id_": "c87d2585-cb98-4028-9a0d-d8fe9bb6f029", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f890d30b-4495-4093-b798-8e8648293dd4", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "a030c26c72018275b75cb9257cd666e1718affcb9c9742f1bd0a3f670604081e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata 07\n\nThumrongsak Kosiyatrakul \ntkosiyat@cs.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 70, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c23dafb1-27d9-479c-8aa6-994cc3287e32": {"__data__": {"id_": "c23dafb1-27d9-479c-8aa6-994cc3287e32", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "86610747-b21d-4b54-9e63-bcb1620938d2", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "8b79c4b2451c6b60abd1c67ec24b2160c1a3273b76f5ea7d39227e2a665a84a5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Show that \\( C = \\{ w \\mid w \\text{ has an equal number of 0s and 1s} \\} \\) is not regular.\n\n* Assume that \\( C \\) is regular \n* Since \\( C \\) is regular, the Pumping lemma says that for any string \\( s \\in C \\) of length at least \\( p \\), \\( s \\) can be divided into \n \\( s = xyz \\) satisfying the following conditions: \n 1. \\( xy^i z \\in C \\) for any \\( i \\geq 0 \\) \n 2. \\( |y| > 0 \\) \n 3. \\( |xy| \\leq p \\) \n* Let \\( s = (01)^p \\) \n - \\( s \\in C \\) \u2014 good \n - \\( |s| = 2p \\geq p \\) \u2014 good", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 519, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cdd7fb14-0087-4b1b-b69b-e9f2c1521a80": {"__data__": {"id_": "cdd7fb14-0087-4b1b-b69b-e9f2c1521a80", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "19271a26-4e3f-4d73-8254-4ccd2404a2c5", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "162b73c9b9b78d6e5841cf8f8793ad16a5c300dfc4d6c5b323b0a9bd41abe1a3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Show that \\( C = \\{ w \\mid w \\text{ has an equal number of 0s and 1s} \\} \\) is not regular.\n\n* \\( s = (01)^p \\)\n* Let \\( x = \\varepsilon \\), \\( y = 01 \\), and \\( z = (01)^{p-1} \\) and check all three conditions:\n 1. \\( \\varepsilon (01)^i (01)^{p-1} \\in C \\) for any \\( i \\geq 0 \\) \n - Every time you insert a \\( y \\), you add equal number of 0 and 1\n 2. \\( |01| = 2 > 0 \\)\n 3. \\( |\\varepsilon 01| = 2 \\leq p \\)\n\n* All three conditions can be true (no contradiction)\n* **Important**: No contradiction means nothing \n - You also cannot conclude that \\( C \\) is regular\n* But if we pick \\( s = 0^p 1^p \\), we will get a contradiction \n - Same kind of proof as in previous example but focus on the number of 0s and 1s (no pattern)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 752, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6bc45aae-cf30-4a63-8d64-ff0071847e36": {"__data__": {"id_": "6bc45aae-cf30-4a63-8d64-ff0071847e36", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e863e51f-03de-4693-be1a-e1427d95dbae", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "6654a1279bdfcd12a5620948d15ed3511a95ae3b0c4a6b74e086a71b2c260095", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Show that \\( C = \\{ w \\mid w \\text{ has an equal number of 0s and 1s} \\} \\) is not regular\n\nAssume that \\( C \\) is regular. Since \\( C \\) is regular, the Pumping lemma says that for any string \\( s \\in C \\) of length at least \\( p \\), \\( s \\) can be divided into \\( s = xyz \\) satisfying the following conditions:\n\n1. \\( xy^i z \\in C \\) for any \\( i \\geq 0 \\) \n2. \\( |y| > 0 \\) \n3. \\( |xy| \\leq p \\) \n\nLet \\( s = 0^p 1^p \\). Since \\( s \\) starts with \\( p \\) 0s, to satisfy the third condition, \\( x \\) and \\( y \\) are strings that contain nothing but 0s. In other words, \\( x = 0^j \\) for any \\( j \\geq 0 \\), and \\( y = 0^k \\) for any \\( k > 0 \\). Note that \\( k \\) must be greater than 0 because \\( |y| = |0^k| = k \\), and the condition 2 says that \\( |y| > 0 \\). Since \\( x = 0^j \\) and \\( y = 0^k \\), \\( z = 0^{p-(j+k)} 1^p \\). Let \\( i = 2 \\). We have\n\n$$\n\\begin{aligned}\nxy^i z &= xy^2 z \\\\\n &= x y y z \\\\\n &= 0^j 0^k 0^k 0^{p-(j+k)} 1^p \\\\\n &= 0^{p+k} 1^p\n\\end{aligned}\n$$\n\nFor the string \\( 0^{p+k} 1^p \\) to be in \\( C \\), the number of 0s must be equal to the number of 1s. In other words, \\( p + k \\) must be equal to \\( p \\). This requires \\( k \\) to be 0. But since \\( k \\) must be greater than 0, \\( xy^2 z \\notin C \\) \u2014 contradiction. Therefore, \\( C \\) is not regular.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1308, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fb1ec487-0fdd-4a4c-a2e7-9e01d8c8b1ef": {"__data__": {"id_": "fb1ec487-0fdd-4a4c-a2e7-9e01d8c8b1ef", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e327193d-0c0d-47cb-886f-0aa5b2de44ba", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "05651f98c77b67e5edf73277fa3b0212340698cad4974d29a4d5445864a5d726", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Show that $$D = \\{ w \\mid w \\text{ has more number of 0s than number of 1s} \\}$$ is not regular.\n\n* As usual, assume that \\(D\\) is regular and followed by the statement from the Pumping lemma\n* If you pick \\( s = 0^{2p}1^p \\), you will not get a contradiction\n - \\( x = 0^j \\) for any \\( j \\geq 0 \\)\n - \\( y = 0^k \\) for any \\( k > 0 \\)\n - \\( z = 0^{2p-(j+k)}1^p \\)\n* For \\( i \\geq 2 \\) in \\( xy^iz \\), you add more 0s which makes the result string still have more 0s than 1s\n* For \\( i = 0 \\)\n - \\( xy^0z = xz = 0^j 0^{2p-(j+k)} 1^p = 0^{2p-k} 1^p \\)\n - If \\( k \\) is 1, \\( 2p - 1 > p \\) (the number of 0s is greater than the number of 1s) \u2014 no contradiction\n - If \\( k \\) is \\( p - 1 \\), \\( 2p - (p - 1) = p + 1 > p \\) \u2014 no contradiction\n - Note that \\( 0 < k \\leq p \\) from (2) and (3)\n - If there is a \\( k \\) that works, no contradiction", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 864, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "afdd485c-5e15-42e2-a06b-c633f5e3e212": {"__data__": {"id_": "afdd485c-5e15-42e2-a06b-c633f5e3e212", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "86cb79a1-8dea-4096-87c4-5fdee9068470", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "f01749674286db15ed580973bcf825c44a2b796063ef9390e81f137d080a7314", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Let\u2019s try $$s = 1^p 0^{2p}$$. Note that $$s \\in D$$ and $$|s| \\ge p$$.\n - Again, to satisfy (2) and (3), we have\n - $$x = 1^j$$ for any $$j \\ge 0$$\n - $$y = 1^k$$ for any $$k > 0$$\n - $$z = 1^{p-(j+k)} 0^{2p}$$\n - We have \n $$\n xy^i z = 1^j (1^k)^i 1^{p-(j+k)} 0^{2p} = 1^{p + ki - k} 0^{2p}\n $$\n - If we increase $$i$$, we increase the number of 1s\n - To get a contradiction, we need the number of 1s to be greater than or equal to the number of 0s\n - In other words, \n $$\n p + ki - k \\ge 2p\n $$\n $$\n ki - k \\ge p\n $$\n $$\n k(i - 1) \\ge p\n $$\n $$\n i - 1 \\ge \\frac{p}{k}\n $$\n $$\n i \\ge \\left(\\frac{p}{k}\\right) + 1\n $$\n - $$xy^{(p/k)+1} z = 1^{2p} 0^{2p} \\notin D$$ \u2014 **contradiction**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 763, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c30a26d7-d5ba-42e0-930b-14289cb7c8d4": {"__data__": {"id_": "c30a26d7-d5ba-42e0-930b-14289cb7c8d4", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a6ecf36b-beda-4120-9c2d-f510fd43c48c", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "79ed0742ea5c2c9afefc4ce24359cc15051053c94e20910d5838d5db765798e8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Show that \n$$D = \\{ w \\mid w \\text{ has more number of 0s than number of 1s} \\}$$ \nis not regular\n\nAssume that \\(D\\) is regular. Since \\(D\\) is regular, the Pumping lemma says that for any string \\(s \\in D\\) of length at least \\(p\\), \\(s\\) can be divided into \\(s = xyz\\) satisfying the following conditions:\n\n1. \\(xy^iz \\in D\\) for any \\(i \\geq 0\\) \n2. \\(|y| > 0\\) \n3. \\(|xy| \\leq p\\) \n\nLet \\(s = 1^p 0^{p+1}\\). Since \\(s\\) starts with \\(p\\) 1s, to satisfy the third condition, \\(x\\) and \\(y\\) are strings that contain nothing but 1s. In other words, \\(x = 1^j\\) for any \\(j \\geq 0\\), and \\(y = 1^k\\) for any \\(k > 0\\). Note that \\(k\\) must be greater than 0 because \\(|y| = |1^k| = k\\), and condition 2 says that \\(|y| > 0\\). Since \\(x = 1^j\\) and \\(y = 1^k\\), \n\\(z = 1^{p-(j+k)} 0^{p+1}\\). Let \\(i = 2\\). We have\n\n\\[\nxy^iz = xy^2z = xyyz = 1^j 1^k 1^k 1^{p-(j+k)} 0^{p+1} = 1^{p+k} 0^{p+1}\n\\]\n\nFor the string \\(1^{p+k} 0^{p+1}\\) to be in \\(D\\), the number of 0s must be greater than the number of 1s. In other words, \\(p + 1\\) must be greater than \\(p + k\\). This requires \\(k\\) to be 0. But since \\(k\\) must be greater than 0, \n\\(xy^2z \\notin D\\) \u2014 contradiction. Therefore, \\(D\\) is not regular.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1210, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8e289ad4-07f4-4973-8c5d-72048f23d697": {"__data__": {"id_": "8e289ad4-07f4-4973-8c5d-72048f23d697", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "44fd8e5e-b2be-48fd-a409-dac7e8ca8b17", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "b8ab388a86aeb1a3ad85b5801b0c0f94202834fd260ef50ff2d3892ef111c7bc", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Rule of Thumb\n\n* If a condition of the language is about inequality ($<, \\leq, >, \\geq$), pick a string that is right at the border line to break the condition \n * $$D = \\{ w \\mid w \\text{ has more number of 0s than number of 1s} \\}$$ \n * $1^p 0^{p+1}$ needs $xy^2z$ to add at least one 1 \n * $0^p 1^{p-1}$ needs $xy^0z$ to take out at least one 0 \n * No need to find a large value of $i$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 399, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d27cb8df-6669-46ca-b314-e4166d755777": {"__data__": {"id_": "d27cb8df-6669-46ca-b314-e4166d755777", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f2c10cae-5d9a-4acb-a45b-2c5dba2400af", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "318421686bee4dac15006434f1ba311760e840ee0eeb2b44cf320daf527e7e40", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\nShow that $$E = \\{0^{(i^2)} \\mid i \\geq 0\\}$$ is not regular.\n\n* Let\u2019s try to understand this language first\n - If \\(i = 0\\), \\(0^{(0^2)} = 0^0 = \\varepsilon\\)\n - If \\(i = 1\\), \\(0^{(1^2)} = 0^1 = 0\\)\n - If \\(i = 2\\), \\(0^{(2^2)} = 0^4 = 0000\\)\n - If \\(i = 3\\), \\(0^{(3^2)} = 0^9 = 000000000\\), and so on\n\n* Thus, we have\n\n $$\n E = \\{ w \\mid w \\text{ contains nothing but 0s and} \\\\\n \\quad \\quad \\text{the number of 0s is } i^2 \\text{ for some } i \\geq 0 \\}\n $$\n\n* **Important:** You cannot pick \\(s = 0^p\\)\n - There is nothing to guarantee that \\(p = i^2\\) for some \\(i \\geq 0\\)\n - We need to pick \\(s = 0^{(p^2)}\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 638, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bf729cc3-3c4c-4b19-b546-fc0836c708c7": {"__data__": {"id_": "bf729cc3-3c4c-4b19-b546-fc0836c708c7", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b7818993-ede8-4367-9f6a-5fdf5943bece", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "3569c9829b94c81c7233a53bddd070cb37473565b1901498321c1b4d7e219b46", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Show that $$E = \\{0^{i^2} \\mid i \\geq 0\\}$$ is not regular.\n\n* As usual, assume that $$E$$ is regular and followed by the statement from the Pumping lemma\n* Let $$s = 0^{p^2}$$\n - Note that $$s \\in E$$ and\n - $$|s| = p^2 \\geq p.$$\n* From the second and third conditions ($|y| > 0$ and $|xy| \\leq p$), we have \n $$0 < |y| \\leq p$$\n* Note that since $$s = xyz$$ and $$|s| = p^2, \\quad |xyz| = p^2.$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 415, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ab903cf6-123b-4ee6-a739-5bf2cbc95604": {"__data__": {"id_": "ab903cf6-123b-4ee6-a739-5bf2cbc95604", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/finite_automata_07_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "578155f4-0e4a-4271-b8ad-f63ebd9a5668", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/finite_automata_07_handout.pdf"}, "hash": "6939a80640fdc7cefd7efea703dea4d6d92c73089d57e9ac47a2e154e14e1a9f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Let\u2019s do some analysis about \\( xy^2 z \\)\n * \\( p^2 = |xyz| \\)\n * \\( |xyz| < |xy^2 z| = |xyyz| \\) because \\( |y| > 0 \\)\n * \\( |xyyz| = |xyz| + |y| = p^2 + |y| \\)\n * \\( p^2 + |y| \\leq p^2 + p \\) because \\( |y| \\leq p \\)\n * \\( p^2 + p < p^2 + 2p + 1 = (p + 1)^2 \\)\n\n* Note that the string \\( xy^2 z \\) can in \\( E \\) if \\( |xy^2 z| = q^2 \\) for some \\( q \\)\n\n* Above analysis shows that \\( p^2 < |xy^2 z| < (p + 1)^2 \\)\n\n* But there is no \\( q \\) such that \\( p^2 < q^2 < (p + 1)^2 \\)\n\n* Thus, \\( xy^2 z \\notin E \\) \u2014 contradiction\n\n* \\( E \\) is not regular", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 574, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a6e66fdc-cbdd-4a51-8189-04d967b93dc1": {"__data__": {"id_": "a6e66fdc-cbdd-4a51-8189-04d967b93dc1", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "95109bdb-511c-449b-8ede-afb99ef70043", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "0bf1ec91fd74a24763be82adff7a5bae99b5a01c7f62e26a3428c044d49417a2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Turing Machine 03\n\nThumrongsak Kosiyatrakul \ntkosiyat@cs.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 69, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "daddf21a-e626-4978-92a2-56a21ef3573f": {"__data__": {"id_": "daddf21a-e626-4978-92a2-56a21ef3573f", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f6802080-3da1-4a2f-83d0-b26707f55200", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "08251d995ef9b2918dd9239b5bc642356285b81e4fe35bc4fb6e7aa5265d4324", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Combining Turing Machines\n\n* A Turing machine represents an algorithm \n* Generally an algorithm can be described as a number of smaller algorithms working in combination \n* Similarly, we can combine several Turing machines into a larger one \n* Example, two Turing machines \\( T_1 \\) and \\( T_2 \\) sharing the same tape: \n - When \\( T_1 \\) finishes (either in the accept or reject state), \\( T_2 \\) takes over \n - This new machine is represented by \\( T_1 T_2 \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 471, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "43ddd6e6-e136-4646-9ab2-858a6ecd7a0a": {"__data__": {"id_": "43ddd6e6-e136-4646-9ab2-858a6ecd7a0a", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5caa264a-f7dc-4afa-8a67-5cb72b1655eb", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "4a9835112f5336cdb93a8a84f96dc8cbb96d7f4c65d2650bc89b6966631e51ac", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Combining Turing Machines\n\n* Suppose we have two Turing machines: \n $$T_1 = (Q_1, \\Sigma, \\Gamma, \\delta_1, q^{1}_{start}, q^{1}_{accept}, q^{1}_{reject})$$ and \n $$T_2 = (Q_2, \\Sigma, \\Gamma, \\delta_2, q^{2}_{start}, q^{2}_{accept}, q^{2}_{reject})$$\n\n* Let \n $$T = (Q, \\Sigma, \\Gamma, \\delta, q_{start}, q_{accept}, q_{reject})$$ \n be \\(T_1 T_2\\) which can be constructed as follows: \n - \\(Q = Q_1 \\cup Q_2\\) (states of \\(T_2\\) are relabeled if necessary) \n - Initial state of \\(T\\) is the initial state of \\(T_1\\) \\((q_{start} = q^{1}_{start})\\) \n - \\(\\delta = \\delta_1 \\cup \\delta_2\\) except those of \\(T_1\\) that go to \\(q^{1}_{accept}\\) and \\(q^{1}_{reject}\\)\n\n* A transition \n \\[\n q \\xrightarrow{x \\to y, D} q^{1}_{a}\n \\]\n in \\(T_1\\) becomes \n \\[\n q \\xrightarrow{x \\to y, D} q^{2}_{s}\n \\]\n where \\(q^{1}_{a}\\) is the accept state of \\(T_1\\) and \\(q^{2}_{s}\\) is the start state of \\(T_2\\).\n\n - If \\(T_1\\) enters its accept state, \\(T_2\\) takes over. The moves that cause \\(T\\) to accept are precisely those that cause \\(T_2\\) to accept. \n - However, if \\(T_1\\) enters the reject state and halts, so does \\(T\\).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1147, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ed0c24d6-e82f-47dc-b4c7-c8033da8546b": {"__data__": {"id_": "ed0c24d6-e82f-47dc-b4c7-c8033da8546b", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "72e0c9aa-b71c-40be-9f5a-da9e7b8be455", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "d995989a63536fd73a1cece82bb4472972456d5dd5464883d53354ebaa0a936d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Suppose we want to create a machine that recognize a palindrome (e.g., racecar)\n* Suppose we have the following Turing machines:\n - *Copy*: From \\(\\sqcup x\\) to \\(\\sqcup x \\sqcup x\\)\n - *NB*: Moves tape head to the next blank symbol to the right\n - *PB*: Moves tape head to the next blank symbol to the left\n - *R*: Reverses the content of the tape from \\(\\sqcup x\\) to \\(\\sqcup x^r\\)\n - \\(x^r\\) is the reverse of a string \\(x\\)\n - *Equal*: Compare two strings separated by a blank symbol\n* For simplicity, we put the blank symbol on the first square of the tape to indicate the left-end of the tape.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 622, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "03a75a77-cacc-4427-b53e-7ba8ac45caa8": {"__data__": {"id_": "03a75a77-cacc-4427-b53e-7ba8ac45caa8", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ca41b5f2-bb87-4ee6-bcb1-fa8a1e39cbc9", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "a331690773a9560eaeed8ee6e0649265196ac6e86bde06360c77002a699a052b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Let the content of a tape be $\\sqcup x$ where $x$ is a string\n* The following machine will accept if $x$ is a palindrome: \n $$Copy \\to NB \\to R \\to PB \\to Equal$$\n* Step by Step:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
MachineTape
Start\u2193 $\\sqcup x$
Copy\u2193 $\\sqcup x \\sqcup x$
NB$\\sqcup x \u2193 \\sqcup x$
R$\\sqcup x \u2193 \\sqcup x^r$
PB\u2193 $\\sqcup x \\sqcup x^r$
Equal$\\sqcup x \\sqcup x^r \u2193 \\sqcup$
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 658, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f53f3554-6084-45bf-a812-98586246d2c4": {"__data__": {"id_": "f53f3554-6084-45bf-a812-98586246d2c4", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ed12e29d-0130-4d50-995c-6ae2d5a867ab", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "73518efc8605f7ebfdfe2a2d6f13a6eec899452568ed8e65b501d8df7d228c2a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Multitape Turing Machines\n\n* A Turing machine can have multiple tape and tape heads:\n\n\n \n \n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n \n\n \n\n\n\n\n \n
01010\u25af\u22ef
Maaa\u25af\u22ef
ba\u25af\u22ef
\n\n* All tape heads can read then write and move in a single Turing machine step", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 521, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b01fc261-a5d3-4163-a612-2f36538be0d5": {"__data__": {"id_": "b01fc261-a5d3-4163-a612-2f36538be0d5", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8a49f89a-1c56-477e-9548-00a47562f51f", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "22df1b49eb4d407f6f4fa406cf4e2858a1643400affce25cff20477b87f2a8f7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Multitape Turing Machines\n\n* Transition function need to control/make decision based on symbols read from all tapes \n* Example: A transition function of a three-tape TM:\n\n$$\n\\delta(q, x, y, z) \\to (r, a, b, c, R, L, R)\n$$\n\n - Current state is \\( q \\), the first tape reads \\( x \\), the second tape reads \\( y \\), and the third tape reads \\( z \\) \n - Change the current state to \\( r \\) \n - Write \\( a \\) on to the first tape, write \\( b \\) onto the second tape, and write \\( c \\) onto the third tape \n - Move the first tape head to the right direction, move the second tape head to the left direction, and move the third tape head to the right direction \n\n* Multitape TMs are suitable for algorithms in which several kinds of data are involved", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 755, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9450bfec-28b1-49e8-b246-4a8942f0878f": {"__data__": {"id_": "9450bfec-28b1-49e8-b246-4a8942f0878f", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e0e49a7b-27c9-4e33-b0dd-9bd77aab93b8", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "c91e01bb9dc3a2988ace3c801e8f137379f6b573fecfdeb6433de9e26736ad59", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Multitape to One-Tape\n\nA multitape Turing machine from previous slide, can be convert into one-tape Turing machine as shown below:\n\n```\nS\n# 0 \ud835\udfed 0 \ud835\udfed 0 # a a \u2022 a # \u2022 b a #\n```\n\n* Use `#` symbol to separate content between tapes \n* Use `\u2022` to indicate the current position of each tape head \n* One move of multitape machine will be equal to several moves of one-tape machine \n* For example, \n $$\n \\delta(q, 1, a, b) \\to (r, 0, b, a, L, L, R)\n $$ \n will be \n 1. Move to the next `\u2022` on the right, write `0`, move to the left square, write `\u2022` over the symbol, and move to the right square \n 2. Move to the next `\u2022` on the right, write `b`, move to the left square, write `\u2022` over the symbol, and move to the right square \n 3. Move to the next `\u2022` on the right, write `b`, move to the right square, write `\u2022` over the symbol, and move to the left-end", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 863, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dc242849-0c98-4b80-9e98-eecb0a817143": {"__data__": {"id_": "dc242849-0c98-4b80-9e98-eecb0a817143", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "58aeed7e-b50c-453d-97e6-fe4567615909", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "705f2620386d568b01ee082c54de67ee210654f845534bffbad4da95c9f432ff", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Multitape to One-Tape\n\n* Recall that a tape will be filled with blank after the last symbol of the string on the tape\n\n```\n M\n 0 1 0 1 0 \u2423\n a a a \u2423\n b a \u2423\n\n S\n# 0 1 0 1 0 # a a a # b a # \u2423\n```\n\n* From the above multi-tape TM, if the second tape head needs to move to the right direction, it should be on top of a blank symbol\n - But on a single-tape TM, it will be on top of the `#` symbol\n - Single-tape TM must **insert** the blank symbol with a dot at the `#`\n* Every multitape TM has an equivalent single-tape TM (slower)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 575, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "04292cb1-81e0-4884-9b0d-284c45e38eda": {"__data__": {"id_": "04292cb1-81e0-4884-9b0d-284c45e38eda", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ee3ecdfe-e123-4a78-a143-4b090300b9d7", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "00de9bc1a7ca33f1e244201928d2e4ca7d924d42485628217772e60bf5a9554d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Nondeterministic Turing Machine\n\n* Similar to Nondeterministic Finite Automata (NFA) \n - Processing one input symbol results in one or more machine. \n - $$\\delta : Q \\times \\Gamma \\to \\mathcal{P}(Q \\times \\Gamma \\times \\{L, R\\})$$ \n - Computation is a tree similar to NFA\n\n* For a nondeterministic Turing machine (NTM): \n - If a branch is in the accept state, the machine accepts the input string \n - If all branches are in the reject state, the machine rejects the input string \n - If no branch is in the accept state and at least one branch enter an infinite loop, the machine loops indefinitely on the input string\n\n> **Theorem 3.16** \n> Every nondeterministic Turing machine has an equivalent deterministic Turing machine.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 742, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e853d4e3-0788-4418-9bb0-c888dff27d87": {"__data__": {"id_": "e853d4e3-0788-4418-9bb0-c888dff27d87", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c5611fde-0b06-4f39-8ee5-1462926e6a7e", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "d8e7ed760a526f6221db037c2b7c13c2f3e11f9a78e0861af1b37089f070c975", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Proof Idea\n\n> **Theorem 3.16 Rewording** \n> For every nondeterministic TM \n> $$ T = (Q, \\Sigma, \\Gamma, \\delta, q_{start}, q_{accept}, q_{reject}) $$ \n> there is an ordinary (deterministic) TM \n> $$ T' = (Q', \\Sigma, \\Gamma', \\delta', q'_{start}, q'_{accept}, q'_{reject}) $$ \n> with \n> $$ L(T') = L(T). $$\n\n* Recall that \n $$ \\delta : Q \\times \\Gamma \\to \\mathcal{P}(Q \\times \\Gamma \\times \\{L, R\\}) $$ \n - Processing a tape alphabet at a state may result in multiple machines \n - The upper bound of the number of machines is \n $$ |Q| \\times |\\Gamma| \\times |\\{L, R\\}| $$ \n - For simplicity, assume that for every combination of nonhalting state and tape symbol, there are exactly two moves (split to two machines)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 734, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "64fcb065-be75-47df-8f2a-6caff36d6968": {"__data__": {"id_": "64fcb065-be75-47df-8f2a-6caff36d6968", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "83a5d65a-7b0e-4811-8350-d54c95af23c9", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "6931e97e1b03267624be1c17bc1a9ca01ae6e7f8c4d38f4c5317fe2550180b7f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Proof Idea\n\n* Computational Tree of a TM on an input\n\n```mermaid\ngraph TD\n A(( )) -->|0| B(( ))\n A -->|1| C(( ))\n B -->|0| D(( ))\n B -->|1| E(( ))\n C -->|0| F(( ))\n C -->|1| G(( ))\n D -->|0| H(( ))\n D -->|1| I(( ))\n E -->|0| J(( ))\n E -->|1| K(( ))\n F -->|0| L(( ))\n F -->|1| M(( ))\n G -->|0| N(( ))\n G -->|1| O(( ))\n H -->|0| P(( ))\n H -->|1| Q(( ))\n I -->|0| R(( ))\n I -->|1| S(( ))\n J -->|0| T(( ))\n J -->|1| U(( ))\n K -->|0| V(( ))\n K -->|1| W(( ))\n L -->|0| X(( ))\n L -->|1| Y(( ))\n M -->|0| Z(( ))\n M -->|1| AA(( ))\n N -->|0| AB(( ))\n N -->|1| AC(( ))\n O -->|0| AD(( ))\n O -->|1| AE(( ))\n P -->|0| AF(( ))\n P -->|1| AG(( ))\n Q -->|0| AH(( ))\n Q -->|1| AI(( ))\n R -->|0| AJ(( ))\n R -->|1| AK(( ))\n S -->|0| AL(( ))\n S -->|1| AM(( ))\n T -->|0| AN(( ))\n T -->|1| AO(( ))\n U -->|0| AP(( ))\n U -->|1| AQ(( ))\n V -->|0| AR(( ))\n V -->|1| AS(( ))\n W -->|0| AT(( ))\n W -->|1| AU(( ))\n X -->|0| AV(( ))\n X -->|1| AW(( ))\n Y -->|0| AX(( ))\n Y -->|1| AY(( ))\n Z -->|0| AZ(( ))\n Z -->|1| BA(( ))\n AA -->|0| BB(( ))\n AA -->|1| BC(( ))\n AB -->|0| BD(( ))\n AB -->|1| BE(( ))\n AC -->|0| BF(( ))\n AC -->|1| BG(( ))\n AD -->|0| BH(( ))\n AD -->|1| BI(( ))\n AE -->|0| BJ(( ))\n AE -->|1| BK(( ))\n click B \"javascript:void(0)\" \"blue branch start\"\n click E \"javascript:void(0)\" \"blue branch\"\n click K \"javascript:void(0)\" \"blue branch\"\n click R \"javascript:void(0)\" \"blue branch\"\n```\n\n* The branch in blue behaves like a deterministic TM \n* The move follows the path in blue can be represented by `0110` \n - Use `0110` as a guideline to simulate a branch", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1740, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "34e62bc5-13a7-4f3c-9429-53b3220dc0d7": {"__data__": {"id_": "34e62bc5-13a7-4f3c-9429-53b3220dc0d7", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e9a4d9ae-b033-4d29-a20b-5b85b896a8fe", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "8a78233d4e0b867cfac9a850575c956d09ba7ab89c9e92a75c3c4d4bfcdbdc9c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Proof Idea\n\n* Suppose a deterministic TM picks a branch and simulate it\n - If that branch ends in the accept state, the NTM accepts the input string\n - If that branch ends in the reject state, no conclusion\n * If another branch is in the accept state, NTM accepts the input string\n * If all other branches are in the reject state, NTM rejects the input string\n * If no branch is in the accept state and at least one branch enter infinite loop, NTM loops indefinitely on the input string\n - If that branch enter infinite loop, the simulation will not end\n * We do not always know that a TM has enter an infinite loop\n * Even if we know that it enters an infinite loop, we still cannot conclude whether NTM accepts or rejects the input string\n\n* Machine \\( T' \\) that simulate an NTM will have to test all possible moves (level order, breadth first search)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 875, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a52e31d7-c3b9-4095-9012-be76909d9d0a": {"__data__": {"id_": "a52e31d7-c3b9-4095-9012-be76909d9d0a", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "09997602-71df-4827-b08b-ddcceb2fa6b7", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "47540aaa71240ae9920cbbbc7ba0844719dd28dd141abde3ce35a0abf25c2d1a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Proof Idea\n\n* Machine \\( T' \\) consists of four tapes \n - Tape 1 will be the input string and its contents never change \n - Tape 2 contain the binary string that represents the sequence of moves we are currently testing. (e.g., \\( 0110_{\\sqcup} \\)) \n - Tape 3 is the working tape of a copy of NTM \n - Tape 4 keeps track of all possible reject sequences \n* If a sequence of moves result in the accept state, \\( T' \\) accepts the input string \n* If all possible sequence of the same length end in the reject state, \\( T' \\) rejects the input string \n* If NTM loops indefinitely on the input string, the simulation will also loop indefinitely \n* Since \\( T' \\) is a multitape Turing machine, there is an equivalent single-tape Turing machine", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 753, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "32908c3d-5262-40c6-9a1d-74a1e9940f33": {"__data__": {"id_": "32908c3d-5262-40c6-9a1d-74a1e9940f33", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8c007612-ceca-4859-821e-e8f949699739", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "8446b7bb3fa07cf5ef6cc6c9245095cc24aeeacb92e8e95bcfde993e4896c1b6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Universal Turing Machine\n\n* A universal TM is a TM that can run another TM on an input string\n* Imagine a multi-tape TM:\n - Tape 1 contains the formal definition of a TM \\( M \\), followed by a # symbol, and an input string \\( w \\)\n - Tape 2 will be a working tape for TM \\( M \\)\n - Tape 3 will be used to keep track of the current state of TM \\( M \\)\n* Initially:\n - Copy input string \\( w \\) to tape 2\n - Put the start state of TM \\( M \\) onto tape 3\n* To run a step, simply search for \\(\\delta(q, a)\\) in the formal definition of TM \\( M \\)\n - \\( q \\) is the current state of tape 3\n - \\( a \\) is the symbol under the second tape head \n and update tapes 2 and 3 until tape 3 contains \\( q_{accept} \\) or \\( q_{reject} \\)\n* A universal TM will loop indefinitely if the TM that it is running loops indefinitely", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 822, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fe300689-09d4-405c-8cd7-2537c8332550": {"__data__": {"id_": "fe300689-09d4-405c-8cd7-2537c8332550", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/turing_machine_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "41dd2289-fdb2-416e-9928-6616a6dd832c", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/turing_machine_03_handout.pdf"}, "hash": "016141bb2c7fd9f7cfa8f6d4629658ffb7d94120e0361a121cc94bb547a6c879", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Church-Turing Thesis\n\n* To say that the Turing machine is a general model of computation means that any algorithmic procedure that can be carried out at all, by a human computer or a team of humans or an electronic computer, can be carried out by a Turing machine.\n* Note that a Turing machine depends on low-level operations\n - A complex algorithm is simply a series of simple instruction (e.g., assembly) that involve\n * sophisticated logic (state machine) or\n * complex bookkeeping (tape/memory) strategies\n* **An algorithm is a procedure that can be carried out by a Turing machine.**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 602, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "426b88ed-5aca-470c-ac1c-1e2e826647ef": {"__data__": {"id_": "426b88ed-5aca-470c-ac1c-1e2e826647ef", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "52419c57-ae65-4ff0-a76f-38809201ac13", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "c38fa752f0d11a8ddce12738581bc72806871ac1e795545e297cace794a73524", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L05 Model-based Engineering\n\nCS 1530 Software Engineering\n\nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 174, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9f6ce613-fdc4-4928-bf65-5eec78e35b5d": {"__data__": {"id_": "9f6ce613-fdc4-4928-bf65-5eec78e35b5d", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3e847f41-4220-4f5d-a9b8-cb9175f29709", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "af7ccc2b463950852af7f566ed3b65c636fea79076d0a85f461b020ab8decbc3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet.\n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes.\n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n* Material from these notes is obtained from various sources, including, but not limited to, the following:\n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994.\n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011.\n - [http://scrum.org/])(http://scrum.org/)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1384, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7fea9b02-7b80-487d-a6cd-8bd114f4a7d0": {"__data__": {"id_": "7fea9b02-7b80-487d-a6cd-8bd114f4a7d0", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6c6fc445-b4e2-4744-88d5-f8655ce5af18", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "33cb66f560e9a639548090ebaf9392efdba4362a14ad2bff32ff6db730a8debb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You have a better understanding of the user vs enduser \n* You understand how to extract relevant information from a problem statement \n* You have an overview of requirements engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 208, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6b719978-e2d4-4f26-9d8f-f015c453e809": {"__data__": {"id_": "6b719978-e2d4-4f26-9d8f-f015c453e809", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e3e67105-1b12-45ef-b2e1-cd6ddbb3cf1a", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "8854b1f4e1655a65c8c33eb7a8fd459f244d375a9531fad0148de629cf0bb07c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n\u27a1\ufe0f The importance of abstraction \n* Intro to model-based engineering \n* Intro to requirements engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 127, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c0a0102b-0c21-44b9-bb38-f3a2ac82cc6c": {"__data__": {"id_": "c0a0102b-0c21-44b9-bb38-f3a2ac82cc6c", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f2a5d9cd-caf9-450f-8331-5df48fd3c94c", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "d4be91ea8991269ee0736ef1776ebd5e3ad2f0b5e71bc6ee340d2c523703eb2b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] Designing software systems\n\n* Internal representation of external reality\n* Typically\n\nDesigner / Developer \n[thought bubble with a snowflake on a smartphone]\n\n\u2192 (smartphone with an ice skate and a red alert symbol) \u2192 \n\nCustomer \n[thought bubble with an ice cream cone on a smartphone]\n\n----\n\nUniversity of Pittsburgh \n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L03 Model-based & intro to Engineering \nCS 1530 - L05 Scrum abstraction", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 447, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "49c0c3b3-02a8-48ba-b6a2-9fc4058a6482": {"__data__": {"id_": "49c0c3b3-02a8-48ba-b6a2-9fc4058a6482", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dbb85775-0ff3-42aa-958c-1ac3a78e034e", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "513961bd4649755f10f7fdb8b1184d1156dfe5a84bd5891a48c345e5bcfdf206", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] Problems with system integrations\n\n* Communication issues\n* Wrong usage of available tools\n* Interface miscommunication\n* Antipatterns\n* Physical impossibility\n* Data inconsistencies\n* Dependency conflicts\n* Performance bottlenecks\n* Unforeseen compatibility issues\n* \u2026\n\n> **Holistic Approach:** \n> To solve problems, we need a holistic view of the entire system \n> * Creative thinking \n> * Cross-disciplinary", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 423, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b09e303c-2795-49e0-ab69-8e528cdb3264": {"__data__": {"id_": "b09e303c-2795-49e0-ab69-8e528cdb3264", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4daf4552-2b4d-43c9-ae2c-03ab77e60d9f", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "2dd0080a7a030a39b415eb4966b6621cd4fbd4f9d5e742b1f0e35f0f76c5a16a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Understanding the problem\n\n* Engage with the customer about the problem scope and the requirements\n* Identify specific components of the problem to ensure a comprehensive understanding\n* **Divide-&-conquer!**\n - Break down complex problems into manageable, smaller components/pieces\n - Formulate a structured approach to tackle each component/piece individually\n* **Problem statements** aid in recognizing distinct entities and elements\n - They enable the identification of unique objects for effective problem-solving\n\n> \"Unique objects\" are distinct entities or components that have specific roles or attributes within a system. They typically contribute to the overall functionality of the system.\n\n**Basic assumption of software projects: project outcome cannot be produced in a single monolithic activity**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 817, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1370dfd8-f624-4027-a9e9-35a6d2568faf": {"__data__": {"id_": "1370dfd8-f624-4027-a9e9-35a6d2568faf", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4ca8f838-44c1-45ae-ac33-4755f2714aac", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "484ed04a349d0d209e8fe05250b798b5f522c32eb425da6cb150dca0037f41e0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem Statement\n\n* A problem statement is our **communication basis**\n* It is a *concise description of the issue that the system aims to address*\n* Usually, problem statements are documents that contain:\n - **Current situation:** What are the existing circumstances, if available\n - **Specification of functionality:** What capabilities are required?\n - **Delivery:** Where and how will the system be deployed?\n - **Customer expectations:** What are the customer\u2019s expectations and deliverables?\n - **Milestones:** Are there concrete delivery dates and project phases?\n - **Acceptance criteria:** What will we use to evaluate the system?\n\n**Problem Statement** \nWe need a way so that people can get from one location to another using multiple means of transport, based on their available options and preferences.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 825, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b81c6e71-dec6-42eb-bf97-5723d0baf4e9": {"__data__": {"id_": "b81c6e71-dec6-42eb-bf97-5723d0baf4e9", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b4497ab9-2afd-4d8b-b3d5-9176986b0fdc", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "922ba8b86b4a3208a134fed2f489053692ef759d9de9337ea3062983699de142", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "41db2b71-aeca-47b4-9b84-9d96abd1dc56", "node_type": "1", "metadata": {}, "hash": "2f022ac24f7d5c92a20211691b551384732db38f66626d6b6ec76ffd82067094", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Software systems are often very complex\n\n----\n\n*Privacy* \n- Author: Wassim Tani \n- ServiceType: Privacy aware data storage and processing in cloud \n- Time: 2009 \n- Aliases: PasS (a set of Protocols) \n\n*Value* \n- Author: Jingliang Chen et al. \n- Time: 2014 \n- ServiceType: Big data analysis \n- Aliases: VaaS (Jingliang Chen et al. 2014) \n\n*Education and Learning* \n- Author: Mohssen M. Alabbadi et al. \n- Time: 2011 \n- ServiceType: Education and Learning based on cloud \n- Aliases: ELaaS (Mohssen M. Alabbadi et al. 2011) \n\n*Videoconference* \n- Author: Pedro Rodriguez et al. \n- Time: 2009 \n- ServiceType: Videoconference \n- Aliases: VaaS (Pedro Rodriguez et al. 2009) \n\n----\n\n*Forensics* \n- Author: Anthony Smith et al. \n- Time: 2013 \n\n*Policing* \n- Author: Anthony Smith et al. \n- ServiceType: Cloud security policy \n- Time: 2013 \n\n*Automated Software Testing* \n- Author: George Candea \n- Time: 2010 \n- ServiceType: Automated software testing \n- Aliases: TaaS (Candea et al. 2010) \n\n*Everything* \n- Author: Robison et al. \n- Time: 2008 \n- Aliases: XaaS (Charith Perera et al. 2014) \n\n----\n\n*Virtual Routers* \n- Author: Marcelo R. Nascimento et al. \n- ServiceType: Virtual Routers based on Software Defined Networks \n- Time: 2011 \n\n*Telepresence* \n- Author: Cicic et al. \n- Time: 2014 \n- Aliases: TPaaS (Cicic et al. 2014) \n\n*Business* \n- Author: Rimal et al. \n- Time: 2009 \n\n*Database Management* \n- Author: Divyakant Agrawal et al. \n- ServiceType: Database management \n- Time: 2009 \n- Aliases: CaaS (Hong Cai et al. 2009) \n\n----\n\n*Media Network* \n- Author: Cicic et al. \n- Time: 2014 \n- Aliases: MNaaS (Cicic et al. 2014) \n\n*IP Network* \n- Author: Nascimento et al. \n- Time: 2011 \n\n*Consistency* \n- Author: Qin Liu et al. \n- Time: 2011 \n\n*Networking* \n- Author: Tao Feng et al. \n- Time: 2011 \n- ServiceType: Networking \n\n----\n\n*Cloud Monitoring* \n- Aliases: Monitoring as a service, MONaaS \n\n*Hybrid Network* \n- Author: Jin-ichi Mizusawa et al. \n- Time: 2011 \n- ServiceType: Hybrid network \n- Aliases: HaaS (Mizusawa et al. 2011) \n\n*IDE and Hosting* \n- ServiceType: IDE and code hosting \n- Time: 2011 \n- Author: Timo Aho et al. 2011 \n\n----\n\n*Threat* \n- Author: Tsai et al. \n- Time: 2012 \n\n*Hardware* \n- Author: Aymerich et al. \n- Time: 2008 \n\n*Cloud Services* \n- Author: Gillett et al. \n- Time: 2008 \n- ServiceType: Cloud Services \n\n*Content Delivery* \n- Author: Yichao Jin et al. \n- Time: 2014 \n- Aliases: GoDaaS (Yichao et al. 2014) \n\n----\n\n*General Services* \n- Author: Yichao et al. \n- Time: 2014 \n- Aliases: EaaS, aaS (readOnly) \n- Author: S. Robinson (Hewlett) (readOnly) \n- Description: string (readOnly) \n- ServiceType: string = anything (readOnly) \n- Time: 2008 (readOnly) \n\n*Disaster Tolerance* \n- Author: Shriram Rajagopalan et al. \n- Time: 2012 \n- ServiceType: Disaster Tolerance in cloud \n\n*Risk Assessment* \n- Author: Kaliski et al. \n- Time: 2010 \n- ServiceType: Risk assessment \n\n*Search* \n- Author: A. Singh et al.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 3043, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "41db2b71-aeca-47b4-9b84-9d96abd1dc56": {"__data__": {"id_": "41db2b71-aeca-47b4-9b84-9d96abd1dc56", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b4497ab9-2afd-4d8b-b3d5-9176986b0fdc", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "922ba8b86b4a3208a134fed2f489053692ef759d9de9337ea3062983699de142", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b81c6e71-dec6-42eb-bf97-5723d0baf4e9", "node_type": "1", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "94f2b4a1edf2aa9a1e657d5669c2d75011b851dc29f22821f985106fd22cf58e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "- Time: 2014 \n- Aliases: GoDaaS (Yichao et al. 2014) \n\n----\n\n*General Services* \n- Author: Yichao et al. \n- Time: 2014 \n- Aliases: EaaS, aaS (readOnly) \n- Author: S. Robinson (Hewlett) (readOnly) \n- Description: string (readOnly) \n- ServiceType: string = anything (readOnly) \n- Time: 2008 (readOnly) \n\n*Disaster Tolerance* \n- Author: Shriram Rajagopalan et al. \n- Time: 2012 \n- ServiceType: Disaster Tolerance in cloud \n\n*Risk Assessment* \n- Author: Kaliski et al. \n- Time: 2010 \n- ServiceType: Risk assessment \n\n*Search* \n- Author: A. Singh et al. \n- Time: 2009 \n- ServiceType: Search \n\n----\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L05 Model-based Engineering \nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 2476, "end_char_idx": 3188, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "48c148e0-c9d7-49ad-a775-b12b790d5061": {"__data__": {"id_": "48c148e0-c9d7-49ad-a775-b12b790d5061", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a3cebf60-6223-453e-927f-4b8cc1c5b5b5", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "9ebc9a58fc6d7cceffd9d520287b1fb24730d6ceb5b67df98982773275bc3eed", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Managing complexity in complex systems \u2014 Abstraction\n\n* Complex systems are difficult or sometimes even impossible to understand \n* *\"The magical number* **_seven, plus or minus two_**\" \n - Human Brain Constraint \n Our immediate memory span covers 7 \u00b1 2 pieces of information at the same time \n - Widely applied in various fields to enhance information retention and usability \n - **[Example]** phone numbers _(not including the area code)_ \n - Miller\u2019s law \n* The **Chunking** technique \n - Group collection of objects to reduce complexity \n - **[Example]** instead of 5-6-5-1-9-7-4 chunk into 565-1974", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 624, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "42976374-c8fe-4c5a-aba3-6335dedf0e32": {"__data__": {"id_": "42976374-c8fe-4c5a-aba3-6335dedf0e32", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f55b9170-8cce-49e7-9198-f8f694e61808", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "e66d262c7b8cb74bb1392b86ce065395348022821fdce8609978fc6f1c3ba968", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Abstraction is key\n\n* Allows us to hide unessential details and focus on essential aspects\n* Abstraction is a thought process (activity) where ideas are distanced from objects\n - E.g., We break a system into **layers** (UI, logic, storage) where each layer abstracts away details not necessary for the other layers to function\n* Abstraction is the result (entity) of a thought process\n* Abstractions can be expressed with a **model**\n\n[The image shows a silver espresso machine labeled \"CASABREWS\" with various knobs and two cups of espresso being brewed.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 560, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1c0586b3-8392-42a1-b290-3230baef34e4": {"__data__": {"id_": "1c0586b3-8392-42a1-b290-3230baef34e4", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d55b425f-2c7c-456f-a76e-d4defd093678", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "f794b4a71b1f11568cd5d91a74b84574c40c429c33c0830ed660442377e9d605", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* The importance of abstraction \n* Intro to model-based engineering \n* Intro to requirements engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 126, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6a762ca5-b07a-4a50-b67f-5514ee40908b": {"__data__": {"id_": "6a762ca5-b07a-4a50-b67f-5514ee40908b", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ca5afee3-0cde-4e4f-8f91-a9cbc4d3b6d2", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "1c784cd1ba4edd83b9b143a0a7f68d98c2bca8385bef10b448fff178e0dcb851", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Models are abstractions of systems\n\n* An **existing system** \n - **[Example]** Integrate a feature or troubleshooting for Canvas or TopHat \n - Often used in reverse engineering of a system that lacks clear communication\n\n* A **system to be built** \n - **[Example]** Create user workflows/recommendation logic for a restaurant picker app \n - Most common: UML diagrams, wireframes, and state models\n\n* A **system that no longer exists** \n - **[Example]** Modeling legacy systems (Netscape web browser, MacDraw, Facebook Paper, \u2026) could help inform if a modern replacement / support documentation \n - Also useful for data migration, compliance, research", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 665, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ebcea148-b348-4072-9352-2f34241f75e4": {"__data__": {"id_": "ebcea148-b348-4072-9352-2f34241f75e4", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "539f8591-5953-4660-a181-96febc6ed5c0", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "5c2996d3694663f2b2838d73ab6e14e976d1142270b2feb807658c3b14dee423", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Typical models in software engineering\n\n* **Functional model:** What are the functions of the system? (**use cases**)\n* **Object model:** What is the structure of the system? (**entities**)\n* **Dynamic model:** How does the system react to external events? (**activities**)\n\n* **System model:** object model + functional model + dynamic model", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 345, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4197c6a8-f6c7-454c-b180-02651d16321a": {"__data__": {"id_": "4197c6a8-f6c7-454c-b180-02651d16321a", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c0f98458-c31c-4ef4-a41b-9ec99e614d67", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "5658a315abf823c7d6d0ce3eacbe8e862db3ba2b259b84443610ce3fd866f831", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# What is **model-based engineering**?\n\n* Models are **abstract representations** of system behavior and structure \n* **Visual and standardized way** of presenting complex systems \n* Used to **design, analyze**, and **document systems** \n* Supports **iterative development** \n* Can be used as tool for **communication** between stakeholders \n - Also used in other fields, e.g., mechanical engineering \n\n> Models can help guide the development of systems. \n> E.g., the general code structure (important classes) can be derived from class diagrams", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 554, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f0c174bc-9014-4222-a316-38c0604558ed": {"__data__": {"id_": "f0c174bc-9014-4222-a316-38c0604558ed", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2290dc41-4dcc-4716-b972-ea85bcad2128", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "639accfa340d1e5a4236fbe4cc03a8ec8243ffc918c8e1092e847f83ef698d8b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem with models\n\n**Design Model** \n[Image of a smartphone with a snowflake icon] \n*Designer / Developer*\n\n**System Model** \n(System Image) \n[Image of a smartphone with an ice skate icon]\n\n**User Model** \n[Image of a smartphone with an ice cream cone icon] \n*Customer*\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 306, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9ad7cfc6-2841-4bb2-866b-9540b92e53be": {"__data__": {"id_": "9ad7cfc6-2841-4bb2-866b-9540b92e53be", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a86fce18-9a32-4ceb-b5ac-b84c4db13b04", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "1701f4a440283865835be4065bfe23c51b18b25490f3b2fb2e1c042527196b91", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem with models\n\n**Design Model** \n[Image of a smartphone with an ice cream cone icon] \n*Designer / Developer*\n\n**User Model** \n[Image of a smartphone with an ice cream cone icon] \n*Customer*\n\n**System Model** \n(System Image) \n[Image of a smartphone with an ice cream cone icon]\n\n> Ideally, design, user, and system model are identical/overlap\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 382, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b5e16504-735e-4b45-b852-832513fa2677": {"__data__": {"id_": "b5e16504-735e-4b45-b852-832513fa2677", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6cbf7941-acc2-401b-83c9-5cf6055c5418", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "f2ed4cd9de55866c8531b5b99995cabbb678e72c2e684f6960ae4a9566266059", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Mental models\n\n> *What users believe they know about a user interface impacts how they use it. Mismatched mental models are common, especially with designs that try something new.*\n\n* **User model** \u2014 *what the user thinks the system does* \n - The user\u2019s expectations of the system \n - Reflects how users perceive and understand the system \n\n* **Design model** \u2014 *what the developers intended the system to do* \n - Created by designers and developers based on the system\u2019s functionality \n - ~~Typically before coding begins~~ \n\n* **System image** \u2014 *what the system actually does/conveys through UI/behavior*", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 621, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d02c5e4c-c17c-4f3e-a0ba-425064ff2655": {"__data__": {"id_": "d02c5e4c-c17c-4f3e-a0ba-425064ff2655", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ec83aa2d-60cc-454b-98b4-f14ed817cd2a", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "5aab814c6452a0f09fb2e800dc95c7a4c80709c68641ed75274b927d30be0486", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] ATM - User Model Assumptions\n\n* Users expect an ATM to dispense cash quickly and securely after they input their PIN and select the amount\n* Assumptions\n - The ATM will process the user\u2019s request without delays\n - User can cancel a transaction at any point if needed\n - User\u2019s card will always be returned after use\n\n[The left image shows an ATM keypad with numbers 1 to 9, 0, and function keys ENTER, CLEAR, CANCEL. The right image shows an ATM dispensing cash with a keypad below it labeled with numbers 1 to 9, 0, 00, and buttons Cancel, Correct, Confirm.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 575, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "908c5982-cda3-468e-aefb-215af949be13": {"__data__": {"id_": "908c5982-cda3-468e-aefb-215af949be13", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a6c539a4-563c-4469-818b-0af7e85abe18", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "1f520e1200ede401c0f53ed2d38b3659fce6398c9abe3976656c448b9cbf7f07", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** ATM - Design Model (*simplified*)\n\n* Users will follow on-screen instructions/prompts carefully step-by-step\n* The system includes safeguards \n - (e.g., locks the card if a user inputs the wrong PIN multiple times)\n* Cash dispensing happens only after confirming sufficient account balance\n\n\n \n \n \n\n \n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n \n \n
CASH
[Image of $100 bills dispensing slot with visible serial number LF51713969A]
123Cancel
456Correct
789
000Confirm
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 750, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2e290ea3-891a-4e80-a1c3-941be45b3029": {"__data__": {"id_": "2e290ea3-891a-4e80-a1c3-941be45b3029", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2ff26c0e-6a5d-4217-bf2f-ad58ff69e47b", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "bdc871b88f136c17bb248845a279a8d3c952a225d299f2d78e75a241708adbd5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] ATM - System Image (*simplified)\n\n* A series of prompts for language selection, PIN entry, and transaction type \n* A delay between PIN entry and the display of account options due to backend processing \n* A button for canceling a transaction \n\n[The image shows an ATM screen with an orange background and several buttons on the right side. The screen displays the following text and buttons:]\n\n- Text input box with the number: `2000`\n- Button labeled: `Return`\n- Button labeled: `Correct`\n- Button labeled: `Confirm`\n\nAdditional text on the screen: \n\"The commission will be deducted from your account balance by the issuing bank.\"\n\nBelow this text are some numbers and a website: \n`95574` \n`www.nbcb.com.cn`\n\nOn the right side of the screen, there are physical buttons aligned with the on-screen options.\n\nSource: https://languagelog.ldc.upenn.edu/~bgzimmer/atm.jpg", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 885, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c47d994c-a4e5-4dbd-938f-abdb52be9263": {"__data__": {"id_": "c47d994c-a4e5-4dbd-938f-abdb52be9263", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9b11cfb2-944f-4ee3-93f6-48af277ad8ae", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "5f2f5889ab0b88299333817d6ff0291feffc16f10a155881ab96534b59cf38ce", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problems with models\n\n* **Problem:** The more stakeholders involved, the more \"mental models\" exist \n - Requires extensive communication \n - Prone to misunderstandings \n\n* **Solution:** Use a **common language** to **abstract and describe problems** \n - Ensures a common understanding \n - Refactor models as needed", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 326, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6ce72a0a-d954-4c06-8ea4-ef08d62f32b1": {"__data__": {"id_": "6ce72a0a-d954-4c06-8ea4-ef08d62f32b1", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6a860b3d-0380-4b04-b29a-cf435a112968", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "83f79136274255470f509974dd7ce944331e9139504183dac61fdbc5c9459cf0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Unified Modeling Language\n\n* Created in the late 1990s by a consortium of software companies \n* Became an official **standard** in 2005 by the Object Management Group (OMG) \n* UML diagrams provide a **visual representation** of an aspect of a system \n* UML includes a variety of diagram types for modeling different aspects of software systems \n - **Structural** diagrams \u2192 static structure \n - **Behavioral** diagrams \u2192 dynamic behavior \n - **Interaction** diagrams \u2192 interactions between objects or components \n\n\n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n \n \n
Car
model
color
year
drive()
\n\n> UML class diagram", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 805, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9664f6cf-08ba-4659-8324-33be2c04c5ad": {"__data__": {"id_": "9664f6cf-08ba-4659-8324-33be2c04c5ad", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3f234a7d-a8c8-4c0c-b6ab-8098854a1e6e", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "fbea3267d497ce68a8dd06f2d5cacb7231625ffdf78bf46dde9d8f027a21096a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Why UML?\n\n* Reduces complexity by focusing on abstractions\n* Allows for a better organization of code\n* Provides a communication basis\n - Common vocabulary\n* Analysis and design\n - Enables to specify a future system without focusing on implementation details", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 263, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dc2e3edb-c8bf-4c0d-8ec5-f8810277a6fc": {"__data__": {"id_": "dc2e3edb-c8bf-4c0d-8ec5-f8810277a6fc", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4af3f9ce-37cf-4e2a-957f-e0bae849a1a3", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "ac2774d9f264b77b9f7a7d0e6564a0bb26eb6064af1a92be366c3a8d8a71ecf8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Purposes of UML diagram types\n\n* Use case diagram: shows functionality \n* Class diagram: shows class/object structure \n* Activity diagram: shows dynamic behavior (activities & objects) \n* State chart: shows dynamic behavior (states of an object) \n* Communication diagram: shows interaction (messages between objects) \n* Sequence diagram: shows interaction (method invocation & lifespan) \n* Deployment diagram: shows system architecture \n* \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 450, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5c9a208e-9d67-4541-a2e9-80f328d3099d": {"__data__": {"id_": "5c9a208e-9d67-4541-a2e9-80f328d3099d", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2eb8ae5b-bda3-4f8e-80ce-4952786f603c", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "610c1d2c8b0073d2c009f51d61bc52a078bfc039bdfdf804ee223677de269bc7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML in practice\n\n* Documentation\n - Many companies use UML to document their systems\n * Ensures global understanding\n - Many open-source projects include UML models in their documentation\n* Ideation & design thinking\n - Structured approach in defining ideas\n* Programming\n - Allows to share ideas\n - Helps in defining complex algorithms\n - Provides starting point for writing and organizing code\n* Enhances abstract thinking & builds problem-solving skills", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 468, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2785e8eb-cb22-4d25-a612-409558dc2f49": {"__data__": {"id_": "2785e8eb-cb22-4d25-a612-409558dc2f49", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f94bcf04-9a54-4790-a1c8-7a8d22e987c5", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "9a0a93fcd881e689b63bf61ed4c9ec93cd526400dcb992b46695e9ad775f54b2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] FrequentFlyer \u2014 UML class diagram\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n\n \n \n\n \n\n\n\n \n\n \n\n\n \n \n
FlightFrequentFlyer
numberdurationfirstNameupgrade()
arrivalTimelastName
delayFlight(Minutes)frequentFlyerNumber
\n\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n
MileageCredit
baseMiles
bonusMiles
\n\n* The association between **Flight** and **FrequentFlyer** is many-to-many (indicated by `*` on both ends).\n* The association roles are labeled as `flights` (from FrequentFlyer to Flight) and `passengers` (from Flight to FrequentFlyer).\n* The **MileageCredit** class is connected to both **Flight** and **FrequentFlyer** with aggregation (diamond symbol).\n\n> This is an example of a UML class diagram of a frequent flyer system. \n> We will talk more about the individual UML elements soon!", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1220, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4c206349-a8fe-4f87-9aa1-d87203b87282": {"__data__": {"id_": "4c206349-a8fe-4f87-9aa1-d87203b87282", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ea81f8c1-6216-493b-aad2-6f14fbdb22a1", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "0e1a0fc7ca5bf2ef5f4740dd5b3b787939a0875cc49087bd25b701583ed01f06", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Two abstraction domains\n\n* **Application domain** (= problem space) \n - Focus is on understanding and analyzing the **problem** \n - Environment where the system is operating\n\n* **Solution domain** (= solution space) \n - Focus is on **design** & **implementation** \n - Technologies used to build the system", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 316, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8eaed070-28e9-4dbe-88c2-76f80f6cef9c": {"__data__": {"id_": "8eaed070-28e9-4dbe-88c2-76f80f6cef9c", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "71f3c27f-ae98-4dea-a337-dd07ccc819a1", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "2c9d756677037229b20c2a51613015e055558e10d0ba332f6311f619b451aa59", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **[Example]** Application vs. solution domain\n\n| Application Domain | Solution Domain |\n|-------------------|-----------------|\n| **Reality** | **Reality** |\n| [Image of rocket launch] [Image of mission control room] | [Image of control panel] [Image of astronaut in spacecraft] [Image of lunar lander] |\n\n| **Model** | **Model** |\n|-------------------|-----------------|\n| Rocket | Status |\n| Engine | FAA Reg. |\n| LaunchPlan | `< />` |\n| Mission Control | Peregrine lander |\n\n**Analysis** (under Application Domain) \n**Design & Implementation** (under Solution Domain)\n\n[University of Pittsburgh logo]\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L05 Model-based Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 758, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "858bc6bb-03a7-48f1-9a1c-334681b036b5": {"__data__": {"id_": "858bc6bb-03a7-48f1-9a1c-334681b036b5", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1c3e8b1c-1dcd-45b1-8664-3ad34bccc770", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "61f6ba7c6358e88035c72746a42d96044dba3e40297bd80786aed9fa2ca0da69", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Overview of Model-based Software Engineering\n\n**Problem**\n\nCommuter App\n\n**Problem Statement**\n\nWe need a way so that people can get from one location to another using multiple means of transport, based on their available options and preferences.\n\n| Requirements | System Design | Object Design & Implementation | Testing & Verification | |\n|--------------------|-----------------------|-------------------------------|-----------------------|---|\n| Functional Model | Structural Model | Behavioral Model | Source Code | Testing Model |\n| **Use case model** | **Class diagram** | **Activity diagram** | **Object model** | **Sequence diagram** |\n| | **Component diagram** | ... | **Dependency graph** | **Activity diagram** |\n| | ... | | ... | ... |\n\n\ud83e\uddd1\ud83e\uddd1\ud83e\uddd1\ud83e\uddb0\ud83d\udc69\ud83e\uddb1\ud83d\udc71\ud83e\uddd3 \n**Enduser**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1002, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cff8c484-2dde-447f-b5b0-89451db3b8c4": {"__data__": {"id_": "cff8c484-2dde-447f-b5b0-89451db3b8c4", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "803f4178-7f87-4f8f-891d-cb59fddb0f0a", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "4a6098a543cfa1028ffc938704a622cb26a48d5eed21905f00bbf0b57ad6f13a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* The importance of abstraction\n* Intro to model-based engineering\n* Intro to requirements engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 122, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7adf0459-2c47-48f5-ab55-4f0d5b1950bf": {"__data__": {"id_": "7adf0459-2c47-48f5-ab55-4f0d5b1950bf", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7b710131-364e-4bc5-b2e9-e7f4b5fcfa2a", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "48e9c7ca03d169a7d57a2cd37c68503e612b2ca2ab42e7ceef174d82bb6de2f3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "[Five panels showing different versions of a tree swing, each with a tree and a swing attached in different ways.]\n\nPanel 1: A wooden swing with three horizontal planks and two ropes hanging from a tree branch.\nCaption: How the customer explained it\n\nPanel 2: A wooden swing with a single horizontal plank and two ropes hanging from a tree branch.\nCaption: How the engineer designed it\n\nPanel 3: A wooden swing with a single horizontal plank and two ropes hanging from a tree stump and a tree branch.\nCaption: How the project leader understood it\n\nPanel 4: A wooden swing with a single horizontal plank tied directly around the tree trunk with ropes.\nCaption: How the programmer wrote it\n\nPanel 5: A tire swing hanging from a tree branch by a single rope.\nCaption: What the customer really needed\n\n[In the top right corner, the University of Pittsburgh logo and text.]\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L05 Model-based Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 940, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "779d4626-b38a-4783-861b-5e8f6544bfd0": {"__data__": {"id_": "779d4626-b38a-4783-861b-5e8f6544bfd0", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e3abc501-edbf-4607-a901-88279381cc2c", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "a0758a6a2fd7f1cd847c1cadda093b5fc719024d35e035643531bb5b7eff4f87", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# System requirements\n\n* Requirements describe the purpose of the system \n* They specify the **functionality** and **constraints** of a system \n* **Requirements elicitation** describes the process of identifying requirements \n* The elicited requirements are then analyzed and a system model is created \n\n> **Note:** Requirements are important but not set in stone! \n> Often, during system design or implementation, \n> new requirements arise or existing ones need to be adapted", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 483, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8d705065-30b3-401e-be16-dd9e194a81ed": {"__data__": {"id_": "8d705065-30b3-401e-be16-dd9e194a81ed", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "027c61ed-ec7c-4476-8731-74c8571cee84", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "6c302de9e9debdd11785117dc6d3d3be07ae407c2817d85c2b2088cd56c5c8e8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Requirements Engineering\n\n* Combination of requirements elicitation and requirements analysis\n* An activity that defines the requirements of the system under construction\n* **Requirements elicitation** defines the system from the **view of the** (end)**user**\n - Requirements specification\n - Uses natural language\n* **Requirements analysis** defines the system from the **view of a developer**\n - Technical specification\n - Uses (semi-) formal language, e.g., UML", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 471, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "597bf18a-85fb-460f-920c-55891cf72679": {"__data__": {"id_": "597bf18a-85fb-460f-920c-55891cf72679", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2f75c810-f18c-4067-9252-4d09d1d18b2f", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "1158fa3188b0d61f58ec80da392d41d711033ba60c5d8783e2f735a7f9948772", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Requirements Engineering\n\n**= Process of eliciting requirements and analyzing them**\n\n* Activities \n - Identify actors (different users of the system) \n - Identify scenarios (in natural language describe the functionality of the future system) \n - Identify functional requirements \n - Identify non-functional requirements \n - Derive use cases (generalize functionality, describe their behavior, and identify the relationships among use cases) \n - Derive entities, characteristics, and behavior \n - \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 516, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9ecd20bb-8452-4e74-8efc-c13a894491c0": {"__data__": {"id_": "9ecd20bb-8452-4e74-8efc-c13a894491c0", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e2c78923-1204-4f05-b887-99a6bff120ab", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "dc4fed671110fc3436700fe5226f2969b39d8abb8a8b21cf46d91f0ec138a62a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Identifying actors\n\n* Actors represent the different users of a system \n - Note that a user is not necessarily just the enduser! \n - Users can also include: system analyst, database admin, another system, \u2026 \n* In UML, actors are represented as a **stick figure**\n\n```\n O\n /|\\\n / \\\n```\nActor\n\n> Should be a concrete user, e.g., \"Student\", \"PizzaBaker\", \"Developer\", \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 378, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "78dcd2df-213a-4088-b4ee-6fb5b28216ec": {"__data__": {"id_": "78dcd2df-213a-4088-b4ee-6fb5b28216ec", "embedding": null, "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0d7fab36-2c6f-4e23-b90f-2bc6730da0a0", "node_type": "4", "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "140152bc486884f7a1a471ce5ba789f89b2e52cad3e810efd95a7fc1040924f1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Stakeholders in a software project\n\n**Stakeholder** \n*Has an involvement in a software project*\n\n----\n\n\n \n \n \n \n \n \n\n \n \n
\n Internal

\n Project Manager
\n Builds the system\n
\n Developer
\n Builds the system\n
\n User
\n Uses the system\n
\n Customer
\n Sponsors/commissions the system\n
\n External\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 843, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "42573e27-8a0e-42a1-8944-db1877d0f848": {"__data__": {"id_": "42573e27-8a0e-42a1-8944-db1877d0f848", "embedding": null, "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "10dbccf2-1a8e-4b8a-b256-7d9568b285fe", "node_type": "4", "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "271ce4dd50abb48a18fae5a6c243594106149cb98eedf54226f2b8d66d3d5a69", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Take-Away: Overview of requirements elicitation\n\n* User-Centric Approach: Prioritize understanding the needs and perspectives of end-users and stakeholders \n* Effective Communication: Establish clear and open channels of communication to gather accurate requirements \n* Iterative Process: Requirements elicitation is an ongoing, iterative process, adapting to evolving project needs \n* Documentation: Thoroughly document gathered requirements to ensure clarity and alignment throughout the project lifecycle \n\n\n \n \n\n\n\n\n \n
YOUR USER REQUIREMENTS INCLUDE FOUR HUNDRED FEATURES. DO YOU REALIZE THAT NO HUMAN WOULD BE ABLE TO USE A PRODUCT WITH THAT LEVEL OF COMPLEXITY? GOOD POINT. I'D BETTER ADD \"EASY TO USE\" TO THE LIST.
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 821, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e0e83651-c7fc-4c99-8ec7-38f068e77c2c": {"__data__": {"id_": "e0e83651-c7fc-4c99-8ec7-38f068e77c2c", "embedding": null, "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "33fdc0a1-6561-48c3-998e-89c0333c7e9f", "node_type": "4", "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L05 Model-based Engineering.pdf"}, "hash": "f005a273ffef2d79c59d045bad2de20d0c3acee269762829e29b7eb0b1463581", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L05 Model-based Engineering\n\nCS 1530 Software Engineering\n\nNadine von Frankenberg\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 163, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d39325d7-1383-4bf9-9610-fa7bcaf1a753": {"__data__": {"id_": "d39325d7-1383-4bf9-9610-fa7bcaf1a753", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4731bd9c-3858-4789-8f98-7cf1866689f5", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "199bfcc96180115b056f9f7e851182741bda9adc2234990bcdba4429bd7c83a3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata 05\n\nThumrongsak Kosiyatrakul \ntkosiyat@cs.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 70, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5718c26a-17c5-4971-b398-7d33bad5d82e": {"__data__": {"id_": "5718c26a-17c5-4971-b398-7d33bad5d82e", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f3ce54f5-9b69-4b0f-86b7-ba5bc66d7085", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "6fdb728c1761f60ef018affd30589c19b8dc4b2a0b20c7cab75381c133aba99f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Language\n\n* **Question:** Given a regular language, can it be expressed by a regular expression? \n - There are infinite number of regular languages \n - Luckily, all of them have one thing in common \n - Each of them has some finite-state machines that recognize it \n\n* So, to try to answer the above question, we need to show a way to convert a finite-state machine into a regular expression that expresses the language of the machine", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 451, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cc03cb4a-6299-4a8c-8651-b2910d7560f2": {"__data__": {"id_": "cc03cb4a-6299-4a8c-8651-b2910d7560f2", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2e6140c2-6bb9-4cee-aa40-0ceba53a44b1", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "080555054562a8fe7377034234b53f72d2f8d3632d33e3f36396545e09c9a3db", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Generalized Nondeterministic Finite Automaton\n\n* A Generalized Nondeterministic Finite Automaton (GNFA) \\( \\mathcal{N} \\) of a DFA \\( M \\) is\n * a special NFA where \\( L(\\mathcal{N}) = L(M) \\)\n * \\( \\mathcal{N} \\) has exactly one accept state\n * all transitions of \\( \\mathcal{N} \\) are regular expressions\n * To transition from one state to another, you need a string in the language expressed by the regular expression instead of a symbol\n* Example:\n\n\n \n \n \n \n \n
\\( q_2 \\)\\( 0^* \\cup 11^*0 \\)\\( q_5 \\)
\n\nAt \\( q_2 \\), if you encounter a string in the language \\( 0^* \\cup 11^*0 \\), move to state \\( q_5 \\)\n\n$$\n0^* \\cup 11^*0 = \\{\\varepsilon, 0, 00, \\ldots \\} \\cup \\{10, 110, 1110, \\ldots \\}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 845, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8dd02411-dc47-43cd-b0bd-2a35f5cf09b0": {"__data__": {"id_": "8dd02411-dc47-43cd-b0bd-2a35f5cf09b0", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c3304f9a-595a-4dfc-96ba-bbd19e6f4f57", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "a15fd971b95db6bc20d02a2be531c3559953c727787aa5d3658b4435e505c102", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Converting a DFA to a GNFA\n\n1. Start with a DFA \\( M \\) \n2. Add a new start state \\( s \\) with an \\(\\varepsilon\\) arrow to the original start state of \\( M \\) \n3. Add a new accept state \\( a \\) \n * From every accept state of \\( M \\), add an \\(\\varepsilon\\) arrow to the new accept state \n * Change all original accept states of \\( M \\) to non-accept states \n4. Turn transition labels to regular expressions (rule #1 of regular expression) \n5. Add necessary transition arrows \n * Change multiple arrows or multiple labels to a single arrow while label is the union of the previous labels \n\n----\n\nDiagram illustrating the merging of multiple arrows/labels into a single arrow with union of labels:\n\n```mermaid\ngraph LR\n A1(( )) -- a --> B1(( ))\n A1 -- b --> B1\n B1 --> B2(( ))\n A2(( )) -- a \u222a b --> B2\n\n C1(( )) -- \"0, 1\" --> D1(( ))\n D1 --> D2(( ))\n C2(( )) -- \"0 \u222a 1\" --> D2\n```\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 05", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 990, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a1c2a556-9dfc-49df-b54d-14d54aca1096": {"__data__": {"id_": "a1c2a556-9dfc-49df-b54d-14d54aca1096", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fa627162-bb28-438d-b7a8-5456eb82fb3c", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "fb40c3d2992ca8a00f2d689bda4736058f749273f49a73c9f01fd09a254f3686", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Converting a DFA to a GNFA (Example)\n\n* A DFA\n\n```mermaid\nstateDiagram-v2\n [*] --> 1\n 1 --> 2: a\n 2 --> 1: a\n 2 --> 2: b\n 1 --> 3: b\n 3 --> 1: b\n 3 --> 2: a\n state 2 {\n <>\n }\n state 3 {\n <>\n }\n```\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 05", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 342, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2d034c71-061b-4cb0-bbd0-bfffb2baf3b8": {"__data__": {"id_": "2d034c71-061b-4cb0-bbd0-bfffb2baf3b8", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e05b56a2-c7c5-4c49-ba44-39e60e89b1c1", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "ac173e10a45493a4d278b9382bd435592a816fb48bb0066bc56902c3787cbf00", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Converting a DFA to a GNFA (Example)\n\n* Add a new start state \\( s \\)\n\n```mermaid\nstateDiagram-v2\n [*] --> s\n s --> 1\n state 1 {\n [*] --> 1\n 1 --> 2: a\n 1 --> 3: b\n }\n state 2 {\n 2 --> 2: b\n 2 --> 1: a\n }\n state 3 {\n 3 --> 1: b\n 3 --> 2: a\n }\n 2 --> 3: a\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 337, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8ed6ddf9-c718-419c-b010-bae367075e17": {"__data__": {"id_": "8ed6ddf9-c718-419c-b010-bae367075e17", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c41e11d9-ebaa-48dc-8284-7ed5367bf332", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "68d6b0b2d6e180e8abb055410df66f645bbba40445560166c5ad312cc0cf658c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Converting a DFA to a GNFA (Example)\n\n* \\( \\varepsilon \\) from \\( s \\) to the original start state\n\n```mermaid\nstateDiagram-v2\n [*] --> s\n s --> 1: \u03b5\n 1 --> 2: a\n 1 --> 3: b\n 2 --> 1: a\n 2 --> 2: b\n 3 --> 1: b\n 3 --> 2: a\n state 2 {\n [*] --> 2\n }\n state 3 {\n [*] --> 3\n }\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 328, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f5fd928e-9e4b-43cc-941b-1fcb648478c8": {"__data__": {"id_": "f5fd928e-9e4b-43cc-941b-1fcb648478c8", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0177558b-9d0d-49a6-9644-fc9d74730c0f", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "d819fb44ab11222cc0709a49f452f4f146f62d87312a2dd372252505900263d5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Converting a DFA to a GNFA (Example)\n\n* Add a new accept state \\( a \\)\n\n```\n b\n +-----+\n | |\n v |\ns --\u03b5--> 1 --a--> 2\n | ^ | b\n b | v\n v 3 <--a\n a\n```\n\n* States:\n - \\( s \\) (start state)\n - \\( 1 \\)\n - \\( 2 \\) (accept state)\n - \\( 3 \\)\n - \\( a \\) (new accept state)\n\n* Transitions:\n - \\( s \\xrightarrow{\\epsilon} 1 \\)\n - \\( 1 \\xrightarrow{a} 2 \\)\n - \\( 1 \\xrightarrow{b} 3 \\)\n - \\( 2 \\xrightarrow{a} 1 \\)\n - \\( 2 \\xrightarrow{b} 2 \\) (loop)\n - \\( 3 \\xrightarrow{a} 2 \\)\n - \\( 3 \\xrightarrow{b} 1 \\)\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 05", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 647, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a8a2eca6-d2fb-4e86-85c0-e24609c8c2de": {"__data__": {"id_": "a8a2eca6-d2fb-4e86-85c0-e24609c8c2de", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b7e2b995-a7fc-418b-8078-25620a255b71", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "c901eae72497e02e2853ff4b0ba8f849e129e264e42b6249b959ba33329908f6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Converting a DFA to a GNFA (Example)\n\n* \\( \\varepsilon \\) from all accepts state to \\( a \\)\n\n\n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n
b
a
12
\\(\\varepsilon\\)a\\(\\varepsilon\\)
sbb
3\\(\\varepsilon\\)
a
a
\n\n- The diagram shows states \\( s, 1, 2, 3, a \\) with transitions labeled \\( a, b, \\varepsilon \\).\n- State \\( s \\) transitions to state 1 with \\( \\varepsilon \\).\n- State 1 transitions to state 2 with \\( a \\), and to state 3 with \\( b \\).\n- State 2 has a loop on \\( b \\), transitions to state 1 with \\( a \\), and to state \\( a \\) with \\( \\varepsilon \\).\n- State 3 transitions to state 1 with \\( b \\), to state 2 with \\( a \\), and to state \\( a \\) with \\( \\varepsilon \\).\n- State \\( a \\) is an accept state.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1051, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "72a8566f-ed41-40eb-9279-8c358eed6bbd": {"__data__": {"id_": "72a8566f-ed41-40eb-9279-8c358eed6bbd", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "169bbaad-84ad-4eda-acfc-26415a5e5f88", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "020eb4ab7a37302decf35c9a4120442884fe38a43684bfba1cb59c0cc39c0475", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Converting a DFA to a GNFA (Example)\n\n* All original accept states to non-accept state\n\n```mermaid\nstateDiagram-v2\n [*] --> s\n s --> 1: \u03b5\n 1 --> 2: a\n 2 --> 1: a\n 2 --> 2: b\n 1 --> 3: b\n 3 --> 1: a\n 3 --> 2: a\n 2 --> a: \u03b5\n 3 --> a: \u03b5\n\n state s {\n direction LR\n }\n state 1 {\n direction LR\n }\n state 2 {\n direction LR\n }\n state 3 {\n direction LR\n }\n state a {\n direction LR\n }\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 476, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "be4536e5-1cac-4089-a8b5-50876374fd2a": {"__data__": {"id_": "be4536e5-1cac-4089-a8b5-50876374fd2a", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a4c1fb0e-2a75-4b9c-adb4-a439757ced40", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "527c1f43bb72dd8214cb64c3a7038ca050b67c3e9e06dec840889a772eefa0d5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# GNFA to Regular Expression\n\n* Note that by converting a DFA and an equivalent GNFA, the language of the machine remain unchanged \n* Next, we are going to remove original states of DFA one at a time until there are only two states left \n - When a state is removed, we have to make sure that the language of the machine is not changed \n - The new start state \\( s \\) and the new accept state \\( a \\) \n\n* Example:\n\n```mermaid\nflowchart LR\n A[\"3-state DFA\"] --> B[\"5-state GNFA\"]\n B --> C[\"4-state GNFA\"]\n C --> D[\"3-state GNFA\"]\n D --> E[\"2-state GNFA\"]\n E --> F((regular expression))\n```\n\n* The transition from \\( s \\) to \\( a \\) is a regular expression that expresses the language of the original DFA", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 723, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "029479cd-ccb8-45aa-84e0-02032ed0d94a": {"__data__": {"id_": "029479cd-ccb8-45aa-84e0-02032ed0d94a", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "15e6d703-6715-4e5b-a989-4a4b14446bdd", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "49b4c0c247465294451cc1677cc3f14a6724637e953459e183e373d8da848d22", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Reducing Number of States of GNFA\n\n* Removing \\( q_{rip} \\)\n\n```mermaid\ngraph LR\n qi -->|R_4| qj\n qi -->|R_1| q_{rip}\n q_{rip} -->|R_3| qj\n q_{rip} -->|R_2| q_{rip}\n```\n\n* How to go from \\( q_i \\) to \\( q_j \\)?\n - \\( q_i \\to q_j \\) using a string in \\( R_4 \\)\n - \\( q_i \\to q_{rip} \\to q_j \\)\n - \\( q_i \\to q_{rip} \\) using a string in \\( R_1 \\)\n - \\( q_{rip} \\to q_{rip} \\) using a string in \\( R_2 \\) any number of times \\((R_2^*)\\)\n - \\( q_{rip} \\to q_j \\) using a string in \\( R_3 \\)\n\n* From \\( q_i \\) to \\( q_j \\) by any strings in \\( R_1 R_2^* R_3 \\cup R_4 \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 583, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ac0906f4-73f0-4d90-9304-1ae39cfd48fa": {"__data__": {"id_": "ac0906f4-73f0-4d90-9304-1ae39cfd48fa", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "04a26b1e-a807-4772-bce8-c0081849eb08", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "3a204a18cdd4333ffdb38ce975c463d8c59ba02569a25f7e14949644dabda872", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Reducing Number of States of GNFA\n\n* Removing \\( q_{rip} \\)\n\n```mermaid\nstateDiagram-v2\n [*] --> qi\n qi --> q_{rip} : \\(R_1\\)\n qi --> q_j : \\(R_4\\)\n q_{rip} --> q_{rip} : \\(R_2\\)\n q_{rip} --> q_j : \\(R_3\\)\n```\n\n\\(\\Rightarrow\\)\n\n```mermaid\nstateDiagram-v2\n [*] --> qi\n qi --> q_j : \\(R_1 R_2^* R_3 \\cup R_4\\)\n```\n\n* To remove \\( q_{rip} \\)\n 1. Search for all possible paths from a state \\( q \\) to \\( q_{rip} \\) and to a state \\( r \\) \n $$\n q \\to q_{rip} \\to r\n $$\n 2. Turn all paths from previous step to regular expressions \n 3. Remove \\( q_{rip} \\) which results in \\( q \\to r \\) \n 4. Insert paths \\( q \\to r \\) back with their regular expressions", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 692, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "43a4e60c-4f18-4094-aab7-bf7a64211336": {"__data__": {"id_": "43a4e60c-4f18-4094-aab7-bf7a64211336", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d9da3902-bdef-4d17-ab94-bdd46cf6fcb0", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "a1e4d7be4587b6dca9aec616e6c25712b308f133761366fbaed8ad0113bdf748", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* DFA\n\n```mermaid\nstateDiagram-v2\n [*] --> 1\n state 1 {\n direction LR\n 1 : a\n 1 --> 1 : a\n 1 --> 2 : b\n }\n state 2 {\n direction LR\n 2 : a, b\n 2 --> 2 : a, b\n }\n```\n\n$$\\{ w \\mid w \\text{ contains at least one } b \\}$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 292, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "77bce36b-8ad8-476f-82db-ae0732a8c309": {"__data__": {"id_": "77bce36b-8ad8-476f-82db-ae0732a8c309", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5851eca3-df58-4608-9748-65667ef53334", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "4d37fee1f55d7e45825e4a342ece0b9094ea86041a6fb55ff7c0e30fdd60e45f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* DFA to GNFA\n\n```mermaid\nstateDiagram-v2\n direction LR\n %% DFA on the left\n [*] --> 1\n 1 --> 1: a\n 1 --> 2: b\n 2 --> 2: a,b\n 2 --> [*]\n\n %% Arrow to GNFA on the right\n %% GNFA on the right\n [*] --> s\n s --> 1: \u03b5\n 1 --> 1: a\n 1 --> 2: b\n 2 --> 2: a \u222a b\n 2 --> a: \u03b5\n a --> [*]\n```\n\n$$\\{ w \\mid w \\text{ contains at least one } b \\}$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 392, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e6e7873b-2f75-4530-bd92-8a587469342f": {"__data__": {"id_": "e6e7873b-2f75-4530-bd92-8a587469342f", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b40c98d9-c3b7-4bd2-bf36-3a0ba25d05e5", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "32aa82748825cefcf9f178bb00c43617472d37f8ca21bd6f02180c2c1905d163", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Get rid of state 2\n\n```mermaid\nstateDiagram-v2\n [*] --> 1\n 1 --> 1: a\n 1 --> 2: b\n 2 --> 2: a,b\n 2 --> [*]\n\n %% After transformation\n state s {\n [*] --> 1\n 1 --> 1: a\n 1 --> 2: b\n 2 --> 2: a \u222a b\n 2 --> a: \u03b5\n a --> [*]\n s --> 1: \u03b5\n }\n\n %% Final transformation\n state s2 {\n [*] --> 1\n 1 --> 1: a\n 1 --> a: b(a \u222a b)*\n a --> [*]\n s2 --> 1: \u03b5\n }\n```\n\n$$\n\\{ w \\mid w \\text{ contains at least one } b \\}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 530, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b18dc1b6-5d0a-490d-8b78-701dec761945": {"__data__": {"id_": "b18dc1b6-5d0a-490d-8b78-701dec761945", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "efa53c04-3fa9-41df-83d5-fbacbfba05e1", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "3fe196a5b424ab55e5fca61dff5b4c19c72b81049d7ba9d1c506e97c1ba235a8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Get rid of state 1\n\n```mermaid\nstateDiagram-v2\n [*] --> 1\n 1 --> 1: a\n 1 --> 2: b\n 2 --> 2: a,b\n 2 --> [*]\n\n %% Step 1: Introduce new start and accept states with epsilon transitions\n state s1 {\n [*] --> s\n s --> 1: \u03b5\n 1 --> 1: a\n 1 --> 2: b\n 2 --> 2: a U b\n 2 --> a: \u03b5\n a --> [*]\n }\n\n %% Step 2: Remove state 1 by combining transitions\n state s2 {\n [*] --> s\n s --> a: a* b (a U b)*\n a --> [*]\n }\n```\n\n$$ \\{ w \\mid w \\text{ contains at least one } b \\} $$\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 05", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 641, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ba2cf730-235f-48c8-8499-a11271d769f3": {"__data__": {"id_": "ba2cf730-235f-48c8-8499-a11271d769f3", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "04f3b053-992a-4ad4-97cd-9def0e9667cd", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "0f5d61d1be6eb27eaa80863a3eb3bffd85beef18a47ef4f6ac233d99cbcd14bc", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* DFA to GNFA\n\n```mermaid\nstateDiagram-v2\n direction LR\n %% DFA on the left\n [*] --> 1\n 1 --> 2: a\n 1 --> 3: b\n 2 --> 2: b\n 2 --> 3: a\n 3 --> 1: b\n 3 --> 2: a\n state 2 {\n <>\n }\n state 3 {\n <>\n }\n\n %% Arrow to GNFA\n 1 --> 2: \" \" %% just to separate visually\n\n %% GNFA on the right\n [*] --> s\n s --> 1: \u03b5\n 1 --> 2: a\n 1 --> 3: b\n 2 --> 2: b\n 2 --> a: \u03b5\n 2 --> 3: a\n 3 --> 1: b\n 3 --> 2: a\n 3 --> a: \u03b5\n state a {\n <>\n }\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 558, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f1132bd4-f2c3-4c87-aaaf-89d6adc3e674": {"__data__": {"id_": "f1132bd4-f2c3-4c87-aaaf-89d6adc3e674", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fed0817b-0036-47d5-ab89-964ac95af8a4", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "782e95ba1c21bc94dc30d67bad4b0fde27ac6e532eb494bb4aebd2e51abbcace", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Get rid of state 1\n\n```mermaid\nstateDiagram-v2\n [*] --> s\n s --> 1: \u03b5\n 1 --> 2: a\n 1 --> 3: b\n 2 --> 2: b\n 2 --> 3: a\n 2 --> a: \u03b5\n 3 --> 1: b\n 3 --> a: \u03b5\n 3 --> 2: a\n\n %% After removing state 1\n [*] --> s\n s --> 2: a\n s --> 3: b\n 2 --> 2: aa \u222a b\n 2 --> 3: ab\n 2 --> a: \u03b5\n 3 --> 2: ba \u222a a\n 3 --> 3: bb\n 3 --> a: \u03b5\n```\n\n* Paths that go through state 1 \\((q \\to 1 \\to r)\\)\n - \\(s \\to 1 \\to 2 \\quad \\epsilon a = a\\)\n - \\(s \\to 1 \\to 3 \\quad \\epsilon b = b\\)\n - \\(2 \\to 1 \\to 2 \\quad aa\\)\n - \\(2 \\to 1 \\to 3 \\quad ab\\)\n - \\(3 \\to 1 \\to 2 \\quad ba\\)\n - \\(3 \\to 1 \\to 3 \\quad bb\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 653, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5baa32cb-d5f4-42ed-aeda-58dd11f2fbfb": {"__data__": {"id_": "5baa32cb-d5f4-42ed-aeda-58dd11f2fbfb", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bf3551bb-a69b-4786-8b97-9e1991779b25", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "056367591d19bdb94b098f048eb6e793095b255284f0259f519986163b3b21fb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Get rid of state 2\n\n```\n aa \u222a b\n \u21bb\n +---------+\n | | \u03b5\n s -|-> 2 ---------> a (final)\n a | \u2191 ab \u03b5\n | | ba \u222a a\n | 3 --------->\n b | \u2191 bb \u03b5\n +---------+\n```\n\n```\n a(aa \u222a b)* a\n s ---------------> a -------->\n \\ | (ba \u222a a)(aa \u222a b)* \u222a \u03b5\n \\ |\n \\ v\n \\-> 3 ---------> a\n (ba \u222a a)(aa \u222a b)*ab \u222a b\n \u2191\n (ba \u222a a)(aa \u222a b)*ab \u222a bb\n```\n\n* Paths that go through state 2 \\((q \\to 2 \\to r)\\)\n - \\(s \\to 2 \\to a \\quad a(aa \\cup b)^* \\varepsilon = a(aa \\cup b)^*\\)\n - \\(s \\to 2 \\to 3 \\quad a(aa \\cup b)^* ab\\)\n - \\(3 \\to 2 \\to a \\quad (ba \\cup a)(aa \\cup b)^* \\varepsilon = (ba \\cup a)(aa \\cup b)^*\\)\n - \\(3 \\to 2 \\to 3 \\quad (ba \\cup a)(aa \\cup b)^* ab\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 861, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fa139241-552f-443c-9c90-64fee4377610": {"__data__": {"id_": "fa139241-552f-443c-9c90-64fee4377610", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dd4802ad-d90b-4097-b027-0c9063d87a6b", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "527166682af951849cd7bfb2337417948e07de619022946f8dd10490a2cea069", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Get rid of state 3\n\n```mermaid\nstateDiagram-v2\n [*] --> s\n s --> a: a(aa \u222a b)*\n s --> 3: a(aa \u222a b)*ab \u222a b\n 3 --> a: (ba \u222a a)(aa \u222a b)* \u222a \u03b5\n 3 --> 3: (ba \u222a a)(aa \u222a b)*ab \u222a bb\n```\n\n$$\n(a(aa \\cup b)^* ab \\cup b) ((ba \\cup a)(aa \\cup b)^* ab \\cup bb)^* ((ba \\cup a)(aa \\cup b)^* \\cup \\epsilon) \\cup a(aa \\cup b)^*\n$$\n\n* Paths that go through state 3 \\((q \\to 3 \\to r)\\)\n - \\(s \\to 3 \\to a\\)\n\n$$\n(a(aa \\cup b)^* ab \\cup b) ((ba \\cup a)(aa \\cup b)^* ab \\cup bb)^* ((ba \\cup a)(aa \\cup b)^* \\cup \\epsilon)\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 530, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "26325910-8f1d-45ba-a499-6be1cf11e2de": {"__data__": {"id_": "26325910-8f1d-45ba-a499-6be1cf11e2de", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e1dbcc9b-86f2-4156-989c-97a5793dd227", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "866fee241851044b46ae301f4fc0da946c19bab10120d9950ec888d5f6fa68d0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Theorem 1.54\n\n* Earlier, we show that every regular expression expresses a regular language \n* We just show that every state diagram of a DFA can be converted into an equivalent regular expression\n\n> **Theorem (1.54)** \n> *A language is regular if and only if some regular expression describes it.*\n\n* **Problem**: If you cannot express a language using a regular expression, it does not mean it is not regular \n - The language is so complicate that it needs a very long and complicate regular expression", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 511, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "444ca371-63f5-4bc7-87d5-af528c7eea75": {"__data__": {"id_": "444ca371-63f5-4bc7-87d5-af528c7eea75", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "afbb6827-a175-4052-8938-0a65fa569958", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "14e804ab6c1b5cfeb0d76282ba9256e110265cadd86a0acc29571b4c45160466", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automaton and Algorithm\n\n* For every finite automaton, there is an equivalent algorithm \n* For example, consider a machine where its language is the set of all strings over 0 and 1 that consist of an odd number of 1s.\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0 --> q0: 0\n q0 --> q1: 1\n q1 --> q1: 0\n q1 --> q0: 1\n state q1 {\n <>\n }\n```\n\n* The above machine can be converted into a Java method that \n - Takes a string of 0s and 1s as an argument \n - Returns true (accept) of the input string consisting of an odd number of 1s. Otherwise, returns false (reject).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 613, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cdd168c2-9c88-449b-8bf7-020c5a9a094f": {"__data__": {"id_": "cdd168c2-9c88-449b-8bf7-020c5a9a094f", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d3f89eb8-9591-4eb8-90f5-78862abd97ef", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "0d191d03182d36e011b9faa06ed4571a1d98aa810960dce31155b377aa0615a6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata and Algorithm\n\n```java\npublic boolean isAccepted(String input)\n{\n String state = \"q0\";\n int length = input.length();\n\n for(int i = 0; i < length; i++)\n {\n char c = input.charAt(i);\n\n if(state.equals(\"q0\") && c == '0')\n state = \"q0\";\n else if(state.equals(\"q0\") && c == '1')\n state = \"q1\";\n else if(state.equals(\"q1\") && c == '0')\n state = \"q1\";\n else if(state.equals(\"q1\") && c == '1')\n state = \"q0\";\n }\n\n if(state.equals(\"q1\"))\n return true;\n else\n return false;\n}\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 602, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "24fc1550-be07-42f3-9188-2c53766041a7": {"__data__": {"id_": "24fc1550-be07-42f3-9188-2c53766041a7", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/finite_automata_05_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "80239979-c162-4be3-a87b-d736b75d6d86", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/finite_automata_05_handout.pdf"}, "hash": "ce7055190f2744685decc24ccf69229a01dafbb56a90fe1f8afada0ddadddeba", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Limitation of Finite Automaton\n\n* Finite Automaton only captures a small subset of algorithms \n - Problems that associated with Regular languages \n* Not all language can be recognized by a finite state machine \n - Such languages is called **Nonregular Languages** \n* Example: \n $$ B = \\{0^n 1^n \\mid n \\geq 0\\} $$ \n - $$ B = \\{\\varepsilon, 01, 0011, 000111, \\ldots \\} $$ \n - The machine need to be able to remember how many 0s and how many 1s it sees so far \n - We need an **infinite** number of states \n* If you cannot express a language using regular expression, it does not mean it is not a regular language \n - Too complicate and requires a huge number of states \n* We need a way to determine whether a language is not regular.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 752, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "58670055-e2c8-412b-bf7a-931a857941e6": {"__data__": {"id_": "58670055-e2c8-412b-bf7a-931a857941e6", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b632da1c-a299-45b5-af0a-c02d87d51ab0", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "62265c232d227f19bbcc6252e1d339580ec57040c7318b25c0fd8bcfdd7ff985", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L02 Introduction to SE\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 170, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fb59083c-69c3-4755-a769-4cd8b99041bf": {"__data__": {"id_": "fb59083c-69c3-4755-a769-4cd8b99041bf", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5e01de27-ac07-485f-8ec8-aaa8727920fc", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "5ce7c966d78805a1352bdabcfcb59f662a7995e06be5510deccad52d5a7dcbb0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet. \n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes. \n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n\n* Material from these notes is obtained from various sources, including, but not limited to, the following: \n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009. \n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994. \n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011. \n - http://scrum.org/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1375, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d34643fb-423f-4160-8127-37ba20bf905b": {"__data__": {"id_": "d34643fb-423f-4160-8127-37ba20bf905b", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1054260f-7162-43e1-87e2-4adc704520aa", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "2405bed36482e30b75a9a7277e64b9ba6d6bd0ef47c367549fec9bfd58dbfbb1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You have an overview of software engineering practices \n* You understand the need for process control when building software \n* You understand the differences between incremental, iterative, and adaptive development approaches", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 249, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "22e59c78-09f1-4246-84b7-6fbbefbb6138": {"__data__": {"id_": "22e59c78-09f1-4246-84b7-6fbbefbb6138", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8f275a63-b889-4200-9f19-6b5e79099395", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "e1eb7a2e8093322b9baa6b2ea21e5b9935ac0cddc8bab61c44f1a1db9228b2be", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* \u27a1\ufe0f A short history of SE\n* Intro to software development lifecycle models\n - AdHoc & Waterfall Model\n - Development Approaches\n - Agile Manifesto", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 170, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e7cf1409-e420-4b5d-8d5a-1fe3b6f93e8d": {"__data__": {"id_": "e7cf1409-e420-4b5d-8d5a-1fe3b6f93e8d", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f849f020-c8b2-47ef-a5ad-8a712f14a243", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "084c763a0f697d655890d80da2b3a4cd91c398768bc0700c3336eeaacced9350", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Software systems\n\n* Many types of software systems exist:\n - Simple embedded systems\n - Complex search engines\n - Graphics-intensive games\n - \u2026\n* There is no common denominator/universal software to build them\n\n> All these systems need software engineering!", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 264, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "69ce28e1-6a0d-40a2-80a4-53bec8d6878a": {"__data__": {"id_": "69ce28e1-6a0d-40a2-80a4-53bec8d6878a", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "51a40464-b60a-4af5-8ed7-0aeac71e3790", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "cecd5f312f754600ba65d1b36165ff6a18b98d6ce6d8e74e063a65c9140e60a1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Software engineering\n\n> *Software engineering* is an **engineering discipline** that is concerned with **all aspects of software production** from the early stages of system specification through to maintaining the system after it has gone into use. \n> \n> - Ian Sommerville\n\n* SE is a **process** concerned with all aspects of producing software to solve real-world problems: specifying, designing, developing, analyzing, testing, deploying, and maintaining software systems \n* It needs to adhere to a set of engineering **principles** and **best practices** \n* **Involves both technical and non-technical skills**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 621, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "408fe7dc-92b5-4f10-a3bc-bc2989373c24": {"__data__": {"id_": "408fe7dc-92b5-4f10-a3bc-bc2989373c24", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "50ac2efc-012c-4509-834a-ed09ae8f63de", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "fe7dd1ca8c522405fa2ff5c2f623cc33d2154e136d5ac3caf454cfba691fc0a6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Software engineering eras\n\n* \"Early days\" ~1945 \u2014 1950\n * ENIAC \n University of Pennsylvania, 1943 \u2014 1946\n\n[The image shows two black-and-white photographs of women operating the ENIAC computer. The first photo depicts three women working on a large, complex machine with many wires and components. The second photo shows two women standing in front of a large panel filled with numerous switches, dials, and cables.]\n\nhttps://penntoday.upenn.edu/news/eniacs-anniversary-nod-its-female-computers", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 503, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1cb034ee-b1f4-4619-84d5-9dbbcdde5a9d": {"__data__": {"id_": "1cb034ee-b1f4-4619-84d5-9dbbcdde5a9d", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d866a6a8-3bd0-464d-848c-abe58043d188", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "95b1e2c3f2c79016495979344e3d0eebc8acd2398f7c1e1965874cabe4c4699f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Software engineering eras\n\n* \"Early days\" ~1945 \u2014 1950 \n - ENIAC \n University of Pennsylvania, 1943 \u2014 1946\n\n* **Software crisis** ~mid 1960s \u2014 mid 1980s \n - Very large software projects \n - Start of large commercial software applications \n - E.g., IBM System/360, FORTRAN, COBOL, Apollo \n - Margaret E. Hamilton & Anthony Oettinger coined the term \"Software Engineering\"\n\nMargaret E. Hamilton \nBorn: 1936 \nDeveloped software for NASA\u2019s Apollo program \nFounded two companies \nPresidential Medal of Freedom\n\nAnthony Oettinger \n1929 - 2022 \nWorked on information resources policy (Harvard) \nConsulted on NASA\u2019s Apollo moon-landing program", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 659, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0b1f4a46-922e-4d55-9d4d-c5e0b0211409": {"__data__": {"id_": "0b1f4a46-922e-4d55-9d4d-c5e0b0211409", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "87b2b43c-0df0-4eb3-9aea-59147a753c60", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "eb9c73a412dbd4e3d3f1e91b75ca7b1b075bbcaa0993abb6bf5cae47fb70762d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Software Crisis \u2014 Causes\n\n* Complexity of software systems \n* Increasing demand \n* Projects ran over-budget & -time \n* Low quality software \n* No standards \n* Lack of formalization \n* Unmanageable, difficult to maintain \n\n1st NATO Software Engineering Conference (1968) \nGarmisch-Partenkirchen, Germany \n\n> \"The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem.\" \n> \u2014 **Edsger Dijkstra** (1972, *The Humble Programmer*)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 749, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "80ab7cc7-5d4a-4438-9f55-306b0b8c1038": {"__data__": {"id_": "80ab7cc7-5d4a-4438-9f55-306b0b8c1038", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f2405322-6a69-49ab-9945-70f2c4a4c31c", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "d3e06198cfc571941cc161d65b7de458d71c0828a4b6cc20225a9d6dfff9d9db", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Software Crisis \u2014 Approaches\n\n* Reduce complexity\n* Improve communication\n* Introduce standards\n* CASE tools (computer-aided software engineering)\n* Define processes\n* Model-based engineering\n* Object-oriented programming\n* \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 232, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d45ed6a6-1de5-429c-8e27-b88b43011766": {"__data__": {"id_": "d45ed6a6-1de5-429c-8e27-b88b43011766", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f287c9f4-8311-4f48-8743-675111602dd0", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "58a9137da16061cb1a153227e6ea90d45e03baf3be7f5b4b4186b603b3b3a8e5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Software Crisis \u2014 Today\n\n* There has been some progress, but some problems persist\n - Schedule / cost estimates are inaccurate\n - Fast pace\n - Productivity of developers does not keep up with demand\n - Customer expectations are not met\n - \u2026.\n\n\u2b07\ufe0f\n\n**Still a need for \"engineering\" the software process!**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 315, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b3e6608b-393c-4629-91f8-ebc8cf32d140": {"__data__": {"id_": "b3e6608b-393c-4629-91f8-ebc8cf32d140", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a56deb37-fdb5-4992-8631-cc26f94c6811", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "bb40460a169a6d70c19c5152f46fb0d261e26ce98f7ca8bfd5b55802de0406e0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* A short history of SE\n* Intro to software development lifecycle models\n - AdHoc & Waterfall Model\n - Development Approaches\n - Agile Manifesto", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 167, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "148f4746-0472-4818-b762-cf8419471311": {"__data__": {"id_": "148f4746-0472-4818-b762-cf8419471311", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c9269bbc-a5c0-4847-871e-c48413c459f5", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "d69083552fea67fe4dbbcd19295734c0b04bf58e75fd7c53618792fbedd05c0a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Challenges in software development\n\n**Problem Statement** \nWe need a way so that people can get from one location to another using multiple means of transport, based on their available options and preferences.\n\n\u27a1\ufe0f ??? \u27a1\ufe0f \ud83e\uddd1\ud83c\udfff \ud83e\uddd1\ud83c\udffb \ud83e\uddd1\ud83c\udffc \ud83e\uddd1\ud83c\udffe \ud83e\uddd1\ud83c\udffc\u200d\ud83e\uddb1 \ud83e\uddd1\ud83c\udffc\u200d\ud83e\uddb3 \n**Enduser**\n\n\u2b07\ufe0f\n\nNeed for a **process**!", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 289, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f4035c4f-dd38-4eaf-95d6-8bbaaec46ffe": {"__data__": {"id_": "f4035c4f-dd38-4eaf-95d6-8bbaaec46ffe", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a688981c-5fdd-4b87-90f9-4e5a7c7b9f2a", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "b22d41909227128a92d3120e4479170819008f180d59ad77039ab43ca87c52f1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# What is a process?\n\n* **Series of steps** involving activities that take some **input**, constraints, and resources to produce an intended **output**\n* Involves a **set of techniques and tools**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 197, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7e4b2efc-b005-4b28-9303-39a1a3e7c40c": {"__data__": {"id_": "7e4b2efc-b005-4b28-9303-39a1a3e7c40c", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6ce55b5e-e69b-4764-91b4-0bf267aefb9c", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "ae1ce83ff3703557f3c751654a667e3f83fee8d2f59b82b4d85f0aed8479b567", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Code & Fix (**Ad hoc Model**)\n\n* Aka. *\"Build & fix model\"*\n* The product is constructed with minimal requirements, minimal or no specification, no attempt at design, and omitting testing\n* An initial product is built and then repeatedly modified until the user is satisfied\n\n```mermaid\nflowchart TD\n A[Build n-th version] --> B[Modify until user is satisfied]\n B --> C[Use]\n C --> B\n C --> D[final product]\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 426, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6967bae5-313b-4026-a70f-7c49d38ff1e6": {"__data__": {"id_": "6967bae5-313b-4026-a70f-7c49d38ff1e6", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dce7d637-fa63-4b5a-a7e3-a173d79e4d55", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "9506b7834a38214254baff76d0cddb7daee9bf1a4495ec41d92e91b5b68564a8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Ad hoc Model\n\n* Pros\n - Little overhead\n - Quick progress\n - Useful for small, exploratory projects\n - Useful for small teams\n\n* Cons\n - No proper quality assessment\n - Work synchronization is not defined\n - Changes may be hard to incorporate\n - Unclear delivery and timing\n - \u2026\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n \n \n
Doing a lot of work but no real progress towards the goal
100%Productive WorkThrashing
0%Process
Beginning of ProjectEnd of Project
\n\n> Source: https://stevemcconnell.com/articles/the-power-of-process/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 866, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e05e2cda-ea97-4ec3-b289-f3c25ed78210": {"__data__": {"id_": "e05e2cda-ea97-4ec3-b289-f3c25ed78210", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "88fdec93-e525-4504-a951-124a7b7fb27d", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "48a2b1884c17746316246421c0240fd554a5ebf03703be389ba042bc301759cc", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# *[Excursion]* Let\u2019s build a house!\n\n* Blueprint and requirements \n \u27a1\ufe0f Project Plan & Requirements\n\n* Foundation and architecture \n \u27a1\ufe0f System Design / Software Architecture\n\n* Construction phases \n \u27a1\ufe0f Development (Object Design)\n\n* Materials \n \u27a1\ufe0f Codebase, Tool Suite\n\n* Quality control and inspection \n \u27a1\ufe0f Testing, Deployment/Delivery\n\n* Interior design & occupant experience \n \u27a1\ufe0f User Interaction & Experience\n\n* Maintenance \n \u27a1\ufe0f Updates, Fixes, \u2026\n\n* Collaboration and Teamwork \n \u27a1\ufe0f Developers, Designers, Testers, Stakeholders, \u2026\n\n> These phases are similar to building a software system!", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 609, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3d911852-496c-41c8-9b0e-d0e947f76d3e": {"__data__": {"id_": "3d911852-496c-41c8-9b0e-d0e947f76d3e", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0372323a-6121-416a-9281-85ba8271185f", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "64f983cbcd4b4bdca65aa97d95dcc0a5777738dd57494a9e8a469709fcd220c0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The software development process\n\n* Structured set of activities required to develop a software system\n* There are many different software processes!\n* Recurring stages:\n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n\n \n\n\n\n\n \n
Requirements specificationDesignImplementationVerification &
Validation
Evolution
What should the system do?How to organize the system?How to implement the system?How to test the system?How to change/maintain the system?
Risk ManagementRationale ManagementDeliveryConfiguration Management
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1183, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dd5dd3dc-9e12-4008-96c0-0512503f36d8": {"__data__": {"id_": "dd5dd3dc-9e12-4008-96c0-0512503f36d8", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8613a745-e3ad-428f-a3f4-f46d707a3be6", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "278146d6b25ae99e2de7cd808f715842d7cb07ac8251a52265ca3a7ee4941fe4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Waterfall Model\n\n\n \n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n
Project initiation
Concept exploration
Requirements
Analysis
Implementation
Verification & Validation
Deployment
Maintenance
\n\n* \"Introduced\" by Winston Walker Royce, 1970 \n* Early software development process adapted from manufacturing & construction processes \n* An activity needs to be completely finished before the next one begins \n\n**Project timeline** \u2192 \n\n*exemplary, simplified steps*", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 901, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "613c648c-620d-42f5-948f-8866b19892ce": {"__data__": {"id_": "613c648c-620d-42f5-948f-8866b19892ce", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d67d9b9d-a347-4ebd-8c68-eab5e57d6a15", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "f93a5e1834ec2e5067e87a2696dd3b35cccc926c55d9d702c2f3be50994febb0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The Waterfall Model \u2014 Considerations\n\n* Activity-centered lifecycle model \n - Linear and sequential execution of activities (development & management process) \n - All requirements activities are completed before system design activities \n - Goal: Never turn back \n* Simplistic view of software development \n - Progress is measured by the number of completed tasks \n* No overlapping or iterative activities \n* Schedules software development as a step-by-step process \n - Transforms user needs into code \n* The verification activity ensures that each activity does not introduce unwanted or delete mandatory requirements \n* **Suited for short, simple projects with well-understood requirements**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 711, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9e3dbff5-ebd7-4dac-be74-1111171328cc": {"__data__": {"id_": "9e3dbff5-ebd7-4dac-be74-1111171328cc", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d4bc8f5d-66d9-4d67-80df-5a54f94d49eb", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "755222dc350989c7b33a6dd6416a647e4587ebf67e07a7a06e0af148f550f5c0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* A short history of SE\n* Intro to software development lifecycle models\n - AdHoc & Waterfall Model\n - Development Approaches\n - Agile Manifesto", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 167, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ce6351d7-0ac9-4266-ade0-e06225721be1": {"__data__": {"id_": "ce6351d7-0ac9-4266-ade0-e06225721be1", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e94de2b8-a1c9-401e-b46b-55842d2b42c8", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "f5a50499b591535a227d2f1ad12fe12d70402f157da1cd57490cdf6c4e5f18a8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# What is change in software projects?\n\n* Deviation from initial project plan \n - Evolving requirements throughout the project \n* New insights \n* Stakeholder feedback \n* Challenges \n - Some problems are easier to solve than others \n - Environment \n* \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 262, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "838f6c59-bf15-4887-84f1-3593bcbb5af6": {"__data__": {"id_": "838f6c59-bf15-4887-84f1-3593bcbb5af6", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "07a578e6-45e9-42ab-a845-4e10000dfdbd", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "2aa92cb8ecc9ed7f47f48064814f25c2a38045494aa5b2c1cfc874c2d22fad7c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Software lifecycle models & change\n\n* Software lifecycle models vary in their ability to address change\n - **Flexibility:** How can change be addressed?\n - **Responsiveness:** When can change be addressed?\n* Lifecycle model choice impacts its ability to handle the frequency of change\n* Frequency of change describes how often change occurs, depends on many factors", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 370, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5df98e36-fc29-4a6e-8947-a644905fd532": {"__data__": {"id_": "5df98e36-fc29-4a6e-8947-a644905fd532", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "223a0db6-4f51-4623-9c88-c6f1e3e57f3e", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "bf555388484dd71ae7764b232ddb5951b6154362624d99320ab8614303dec3ff", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Rough estimation of change frequency\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n
RarelySometimesFrequently
\n
\u2193 \u2193
\n
Sequential models
\n
Waterfall, V-Model
\n
\n
\u2193 \u2193 \u2193 \u2193
\n
Iterative models
\n
Spiral Model, Unified Process
\n
\n
\u2193 \u2193 \u2193 \u2193 \u2193 \u2193 \u2193
\n
Agile
\n
Scrum, Kanban, XP
\n
\n\nUniversity of Pittsburgh\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L02 Introduction to Software Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 747, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "05dd4dcf-3b28-46a1-8b4f-60a08bc0639d": {"__data__": {"id_": "05dd4dcf-3b28-46a1-8b4f-60a08bc0639d", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "290cf564-ff5f-4e14-aab0-e2daab98f2d8", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "e4b4539298c2c64cde06c9078a0ef3edf49150511ab5a85a4fd0f575bcb8465a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Development approaches\n\n* **Incremental** development (**add on to something**)\n * Build the system in small, usable sections\n * Each increment adds a defined set of functionalities\n * Works well when requirements are well-understood\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n\n\n\n \n \n
R1R2R3R4
Top down integration\u25a0\u25a0\u25a0\u25a0UI
\u25a0\u25a0\u25a0\u25a0Middleware
\u25a0\u25a0\u25a0\u25a0Data Access
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 737, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "019979f0-13a5-4bc5-9fc4-3267d007e25f": {"__data__": {"id_": "019979f0-13a5-4bc5-9fc4-3267d007e25f", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ffe8d2c3-f7b0-4546-a0b6-62af01debd44", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "a880da4f3f4e21f3f8cec7808409ab2cd51f775161b2f74f4a197073155cd25e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Development approaches\n\n* **Incremental** development (**add on to something**)\n * Build the system in small, usable sections\n * Each increment adds a defined set of functionalities\n * Works well when requirements are well-understood\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n
R1R2R3R4
UI
Middleware
Data Access
\n\n> Bottom-up integration \u2191", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 742, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2905d948-3972-4c07-a434-30536c23caf3": {"__data__": {"id_": "2905d948-3972-4c07-a434-30536c23caf3", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "744d61ac-3c3f-4bcd-a02a-75cd6e617007", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "4c49dfb19235d957d786f4e11d031073f48ab70c687ba88f44b3d142ddcb849c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Development approaches\n\n* **Incremental** development (**add on to something**)\n * Build the system in small, usable sections\n * Each increment adds a defined set of functionalities\n * Works well when requirements are well-understood\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n
R1R2R3R4
UI
Middleware
Data Access
\n\n> Vertical integration", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 739, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e67904c6-050b-4b49-8266-577114e62da7": {"__data__": {"id_": "e67904c6-050b-4b49-8266-577114e62da7", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f0ec5205-b0be-4aed-82df-6d032d3d95be", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "ef01a83f4c061cff99a99feed0b26253418f6df7eed0ef92815800527f30c8d3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Development approaches\n\n* **Incremental** development (**add on to something**)\n* **Iterative** development (**re-do something**)\n * Repeat development cycles on the same functionalities\n * Each cycle improves and refines the product (prototype)\n * Allows to incorporate stakeholder feedback\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
R1R2R3R4
UI
Middleware
Data Access
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1067, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "263fa9d3-b7d7-4835-880b-8b61605e29e9": {"__data__": {"id_": "263fa9d3-b7d7-4835-880b-8b61605e29e9", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a43a5582-b664-4232-8cbd-e1a698c76529", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "5f2f4da117a97a5d459952dde3617c6ba876b65e58fbd4715d31bc8cac28962c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Development approaches\n\n* **Incremental** development (**add on to something**)\n* **Iterative** development (**re-do something**)\n* **Adaptive** development (**adjust to change**)\n - Highly flexible to changing requirements\n - Adjust based on learning from previous iterations\n - Works well for projects with high uncertainty and evolving projects\n\n> **First rule of usability:** \n> Don\u2019t listen, watch what people actually do \n> \u2014 Jakob Nielsen\n\n```mermaid\nflowchart TB\n subgraph R1[\"R1\"]\n direction TB\n UI1[\"UI\"]\n Middleware1[\"Middleware\"]\n DataAccess1[\"Data Access\"]\n end\n subgraph R2[\"R2\"]\n direction TB\n UI2[\"UI\"]\n Middleware2[\"Middleware\"]\n DataAccess2[\"Data Access\"]\n end\n subgraph R3[\"R3\"]\n direction TB\n UI3[\"UI\"]\n Middleware3[\"Middleware\"]\n DataAccess3[\"Data Access\"]\n end\n subgraph R4[\"R4\"]\n direction TB\n UI4[\"UI\"]\n Middleware4[\"Middleware\"]\n DataAccess4[\"Data Access\"]\n end\n\n %% Highlight R3 crossed out with text\n click R3 callback \"We don\u2019t need R3!\"\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1119, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "174119db-f271-44f2-b1a5-cb9c309ef103": {"__data__": {"id_": "174119db-f271-44f2-b1a5-cb9c309ef103", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7dddbbb6-98c9-40b3-9aa4-ee6d51fb5a10", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "f1f24bdd8a897c05a60f97fdfc2e01f8e87bd1f2f62c614cd83c5ea630bff754", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Development approaches\n\n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n\n\n\n \n \n
Delivery Frequency
Degree of Changelowhigh
PredictiveIncremental
low
highIterativeAdaptive (Agile)
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 832, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f1eb7004-5e6e-4969-9537-5405184494df": {"__data__": {"id_": "f1eb7004-5e6e-4969-9537-5405184494df", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d4d49f27-79ad-4678-a77c-2e4773879061", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "3cf6ecfd769f217f231f2c84d20558c6b9a1ed4597b1e59835d4103fbaea3d8e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Development approaches\n\n\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n \n \n \n
Predictive
PlanAnalysisDesignCodeTestDeploy3 to 24 months
\n\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n \n \n
Iterative
PlanAnalysisDesignCodeTestDeployPlanAnalysis
DesignCodeTestDeployPlanAnalysisDesignCode
TestDeploy1 to 3 months1 to 3 months1 to 3 months1 to 3 months
\n\n\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n \n \n
Adaptive
IterationIterationIterationIterationIterationIterationIterationIteration
IterationIterationIterationIterationIterationIterationIterationIteration
IterationIterationIterationIterationIterationIterationIterationIteration
\n\n\n \n \n \n \n \n \n \n \n \n \n \n
PlanAnalysisDesignCodeTestDeploy1 - 4 weeks
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1787, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3df43b51-6aab-406b-9ebc-4f521cf1618b": {"__data__": {"id_": "3df43b51-6aab-406b-9ebc-4f521cf1618b", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "35e396a6-b1b3-4ba3-b8da-3e78d25e7c11", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "a45c2c6eed9bb8308b856410cddb31f2bb652089743dbb715957eaffe8366026", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* A short history of SE\n* Intro to software development lifecycle models\n - AdHoc & Waterfall Model\n - Development Approaches\n - Agile Manifesto", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 167, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "31584f26-5cf2-4a82-bdf1-884b1d66f78e": {"__data__": {"id_": "31584f26-5cf2-4a82-bdf1-884b1d66f78e", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5bf9f36f-1ffc-450e-ad32-5aa4ec0b074e", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "31a26074cfc6e2458e829cec88e9859cbe9f6468b84ce1b3dc2f0c5b4235b431", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Agile manifesto (2001)\n\n*We are uncovering better ways of developing software by doing it and helping others do it. \nThrough this work we have come to value:*\n\n**Individuals and interactions** over processes and tools \n**Working software** over comprehensive documentation \n**Customer collaboration** over contract negotiation \n**Responding to change** over following a plan\n\n*That is, while there is value in the items on the right, we value the items on the left more.*\n\nKent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, \nAndrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas\n\nagilemanifesto.org/\n\nBackground story: https://agilemanifesto.org/history.html", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 812, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "17a9411d-5b20-4b2b-b595-c710ed69773f": {"__data__": {"id_": "17a9411d-5b20-4b2b-b595-c710ed69773f", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "799365a7-246d-4db8-9743-423571ba73d4", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "ed6dbebb8acdc4b47ffa11bb6de29efacd87a16f13c7ffadab2381624da85375", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Agile methodology\n\n* Set of principles and practices for software development \n* Designed to accommodate change \n* Require a collaborative approach among cross-functional teams \n* Examples: \n - Scrum \n - Kanban \n - XP \n - Lean software development \n - Feature-driven development \n\n```mermaid\nflowchart LR\n Plan --> Design\n Design --> Develop\n Develop --> Test\n Test --> Deploy\n Deploy --> Review\n Review --> Plan\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 451, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4be4f840-841a-4a3f-8628-7e0c2ca1c2ca": {"__data__": {"id_": "4be4f840-841a-4a3f-8628-7e0c2ca1c2ca", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d0422eba-a342-4da4-a900-10f22e1af418", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "e2210c23fa6a3f690490617630b287fff995d31c2dd959b6b5532ac1d5d6a41e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Agile principles\n\n* **Continuously deliver** value to customers with early and frequent software releases \n* **Collaborate daily** across all team members, blending business and technical expertise \n* Foster a supportive environment for self-motivated teams, emphasizing direct communication \n* Focus on **delivering functional software** as a key progress indicator \n* Ensure the **development pace is sustainable** for long-term project health \n* Pursue technical excellence, good design, and simplicity \n* Engage in **regular self-assessment** to improve effectiveness and processes", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 594, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "aa1f6aab-19dd-46e5-ba87-6dcf880a75e1": {"__data__": {"id_": "aa1f6aab-19dd-46e5-ba87-6dcf880a75e1", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1886b990-6e64-458b-a499-b0788432dc1b", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "77e8b8f11b0ca304bd0dc3861e9d64ce7e42a121e5f4dad55e972c1d38693c7b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Key characteristics\n\n* **Adapt to changing requirements**, even late in a project's development cycle\n* Agile projects are broken down into **small, manageable increments**\n - Each increment goes through multiple steps: planning, design, coding, and testing\n - An increments is usually referred to as a **\"sprint\"** (or an \"iteration\")\n* **Stakeholder involvement is important:** Regular feedback from customers or end-users is integrated into the development process\n* **Self-organizing and cross-functional teams**\n* **Continuous improvement** of the product, the process, and the team\n* **Frequent releases** of the product\n\nRetrospectives", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 647, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d3a05920-199c-4102-927c-3b9129e2c475": {"__data__": {"id_": "d3a05920-199c-4102-927c-3b9129e2c475", "embedding": null, "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8b750aba-9a8d-44cd-a6de-5bd835fe7668", "node_type": "4", "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "a6ad4afb059cf31747d8cd1a0b29f44ff66b6758c72e2c0de58926fe5cc16d21", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Summary: Need for process control in software development\n\n*Software crisis (~1960s-1980s*)* \n* Cost overruns, delays, and unreliable software due to unstructured development\n\n## Need for Software Development Lifecycle Models:\n* Process control ensures quality, predictability, and scalability in software projects\n* Ad-hoc development: Code & fix model \n - Lack of planning, maintenance, and scalability \n - Suitable for small, well-understood projects\n* Waterfall Model: Sequential, rigid, suitable for stable requirements but not adaptable to changes\n* Incremental (add-on), iterative (re-do) vs adaptive (adjust for change) development approaches\n* Agile Manifesto: Focuses on collaboration, flexibility, and delivering incremental value", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 749, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d5c91e31-68dc-4b65-8d54-83e83cb0a283": {"__data__": {"id_": "d5c91e31-68dc-4b65-8d54-83e83cb0a283", "embedding": null, "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c8dd567f-3b26-42ba-a364-e1a6cc1aea91", "node_type": "4", "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "049cde75307319d7ef74c1e69fac5ffa9456dcfc30485b7c194428d3fad50d5a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Optional Readings\n\n* CS History \n - https://www.computerhistory.org/timeline/computers/\n* ENIAC \n - https://www.computerhistory.org/revolution/birth-of-the-computer/4/78 \n - https://spectrum.ieee.org/the-women-behind-eniac\n* Agile Manifesto \n - https://agilemanifesto.org/ \n - https://www.agilealliance.org/agile101/the-agile-manifesto/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 349, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "30188c2a-405e-4df6-aed8-a27c80572983": {"__data__": {"id_": "30188c2a-405e-4df6-aed8-a27c80572983", "embedding": null, "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "13989220-a054-4245-a93e-d6888b340135", "node_type": "4", "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "b3bf52015c14804d1e9599028021f1b8ada59809e772bf524bc87528d0fe7abd", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# References\n\n* Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n* Object Management Group. Unified Modeling Language. Version 2.5.1, 2017\n* Agile Alliance, [https://www.agilealliance.org/agile101/the-agile-manifesto/])(https://www.agilealliance.org/agile101/the-agile-manifesto/)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 335, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "54b3843d-c918-46aa-81c7-2d3a5d722bc5": {"__data__": {"id_": "54b3843d-c918-46aa-81c7-2d3a5d722bc5", "embedding": null, "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "697cfd63-29e2-4306-be1f-256208ad1dd6", "node_type": "4", "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L02 Introduction to SE.pdf"}, "hash": "293edf449526db0d65d9a599be8f70687a64e539026121b8802456e1eb5ddd60", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L02 Introduction to SE\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 170, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "67ecc16d-d2e1-40eb-b131-1937eb90bab2": {"__data__": {"id_": "67ecc16d-d2e1-40eb-b131-1937eb90bab2", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5da6453a-0764-4d06-bf7d-57dcc8aa8ffe", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "1303ba7fb01badab0977c6669ceb38b17d7c73efc1ecc6336474e8d8dcbe76c0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L11 Requirements Analysis & OOP Recap\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 185, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3cbf3fe0-7e29-42f5-95bb-3428ee9bde41": {"__data__": {"id_": "3cbf3fe0-7e29-42f5-95bb-3428ee9bde41", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "726dd4aa-a665-4d0f-88a8-14d896a7ffb3", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "262adb13d3fa743ccc14c6540e42125e837a4e3259751d6ab5d0e66928942b38", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet.\n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes.\n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n* Material from these notes is obtained from various sources, including, but not limited to, the following:\n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994.\n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011.\n - http://scrum.org/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1362, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "430b4321-1113-45e0-a4a1-1af224b6fd4b": {"__data__": {"id_": "430b4321-1113-45e0-a4a1-1af224b6fd4b", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e616ef71-4a0b-4cab-b1e3-11e4414e2198", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "5dbc80e93541431487ea2e82878ca765948c86159dc144f0e086cc833fbe71ed", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You understand the purpose of an analysis object model\n* You can derive entity, boundary, and control objects from requirements / a problem statement", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 170, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "64d8ac29-2b6d-41c3-add3-57d597854303": {"__data__": {"id_": "64d8ac29-2b6d-41c3-add3-57d597854303", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "04f11f87-b9d7-4add-93cd-fddd8ea9c421", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "f4c8f0608aa2a393e1bc826fdeef60245df6a8a8689fc1d5a00dcb62a82f977a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Intro to Analysis\n - Recap: OOP\n* Analysis object model", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 78, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5f19ccd3-1aac-4728-9c49-874e3d58447a": {"__data__": {"id_": "5f19ccd3-1aac-4728-9c49-874e3d58447a", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "84fce7b1-c416-420e-8163-895208ff3738", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "3db94dcbfd84158c7adb42907007f008b5789551e9fbb69acbbb03eb54ba1a64", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Requirements specification?\n\n[Left image: William Ely Hill, 1915, *My Wife and My Mother-in-Law* \u2014 a multi-stable image showing either a young woman or an old woman.]\n\n[Right image: Schr\u00f6der's stairs, 1858 \u2014 an ambiguous staircase drawing labeled with \"A\" and \"B\" indicating two possible perspectives.]\n\n> If these multi-stable images were a requirements specification, which model would you have constructed? \n> \u2192 Specifications contain **ambiguities**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 457, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "db5e19e5-f624-45ee-bbce-840acaf4ea40": {"__data__": {"id_": "db5e19e5-f624-45ee-bbce-840acaf4ea40", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f905dd96-3364-41de-b8d9-9b52b790479c", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "9951d3748542aaf9c55fa28d1f1f9235356df58064fd1ab1a18f8201dc39cd1a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Status in the SDLC\n\n* Requirements: What the system must do (functional + non-functional) \n* **Analysis**: Build models to understand and organize those requirements in the problem domain \n* Design: Translate analysis models into solution models (classes, architecture, code)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 280, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f3743615-5342-4734-93a1-58f5dc45fcef": {"__data__": {"id_": "f3743615-5342-4734-93a1-58f5dc45fcef", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "32d90b03-e4d9-4c78-a68b-9f2757d3c282", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "7b2fe39d5dd43d8c2b6af82743cf6a7c874989719a25ad468623199af7bd31ea", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Analysis \u2014 First step towards system architecture\n\n* Refine and validate requirements \n - Resolve ambiguities discovered during requirements stage\n\n* Identify analysis objects \n - From problem domain (e.g., Sinkhole, Report, Resident, City Official)\n\n* Define relationships \n - Associations, aggregations, generalizations among analysis objects\n\n* Model system behavior \n - Scenarios \u2192 sequence diagrams, state machines, activity diagrams\n\n* Partition the problem \n - Which responsibilities belong to which objects or subsystems?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 542, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "035ec694-4c56-447d-9d81-445ca6ddf586": {"__data__": {"id_": "035ec694-4c56-447d-9d81-445ca6ddf586", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d4e3cdfd-5afd-4465-b1b6-297275b2075b", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "1c84ff6f0c6f3f22333c84fa9e7ac986c35770a576b65f1132f4df9e21b95d4d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Intro to Analysis \n - Recap: OOP \n* Analysis object model", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 82, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "775d3e70-ba3e-4ee9-a4a3-937c85ca2944": {"__data__": {"id_": "775d3e70-ba3e-4ee9-a4a3-937c85ca2944", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c926d539-2327-463d-9e6e-e70ffe3abd2f", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "af7ce9591c0c2d30c0969226cf3024ae8b1ab23a2d0204d16550def88c097ed0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Object types\n\n> persistent information tracked by the system \nEntity \n**Sinkhole** \n(has location, status, reportedDate)\n\n> interaction between user and system \nBoundary \n**SinkholeReporter** \n(e.g., form; validates user input)\n\n> control tasks performed by the system \nControl \n**SinkholeReportController** \n(creates a new Sinkhole, saves it)\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 381, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "02218cea-5376-426a-99e9-93ec0e45bd3f": {"__data__": {"id_": "02218cea-5376-426a-99e9-93ec0e45bd3f", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "cccca899-8ab8-4615-81b0-1dac5d48ed99", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "e6d5a284bb906fda643b4b4b195c4cc615e8ad14bc7f501681cfc49618be0460", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem Statement\n\nThe City of Pittsburgh requires the development of a Sinkhole Monitoring System (SiMCity) to address the issue of sinkholes within the city. The first version of SiMCity should enable **residents** and **city officials** to **report** sinkhole occurrences and **track** their locations.\n\nThe system should be easy to use, accessible through **web and mobile platforms**, and track sinkholes in real-time.\n\nResidents should be able to **view** sinkholes on a **map**, helping them to avoid such areas. It should also allow residents to report new sinkholes by **sending** in their **location** and **photographic evidence** for verification, or **call for help**. **City officials** can **remove** sinkholes from the **map** after they have been re-filled and repaired.\n\nSiMCity aims to increase public safety, facilitate rapid response to sinkholes, and improve the city\u2019s ability to manage and mitigate the impact of these geohazards.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 957, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "94183481-7d55-4cc2-a5ce-fbed7497cf69": {"__data__": {"id_": "94183481-7d55-4cc2-a5ce-fbed7497cf69", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c0e197b3-ba58-4e4b-8214-20ea6bb78a63", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "c28eaf34050550de300ec7cdf1f9e67c3cebb1faca8d580ecf56158078044fb9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Abbott\u2019s technique\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ExampleGrammatical constructUML element
sinkholeProper nounObject
residentImproper nounClass
trackAction verbOperation
is aBeing verbInheritance
has aHaving (verb)Aggregation
must have aModal verbConstraint
funAdjectiveAttribute
reportTransitive verbOperation
depends onIntransitive verbConstraint, class, association
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 801, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1469041f-0eb7-4286-90ea-e28a153a1b8e": {"__data__": {"id_": "1469041f-0eb7-4286-90ea-e28a153a1b8e", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dc1dc521-9838-4b9a-ad8d-70416b301089", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "84d81bc43f70959975e825e8dedc40d722542ea815ae71b459a10fafc8618dd8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **[Example]** Entity, control, and boundary objects\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
EntityControlBoundary
SinkholeSinkholeReporterWebPlatform
LocationSinkholeVerifierMobilePlatform
AreaAuthenticatorCityAuthority
UserMapControllerMapView
MapPhotoManagerStorage
PhotoNotifier
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 674, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a4df2723-367d-4aa4-9fb8-2f4b3037985c": {"__data__": {"id_": "a4df2723-367d-4aa4-9fb8-2f4b3037985c", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "19b71fcd-15d8-4271-a2a3-125f386bbc21", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "7a35141462ca5a6d42bd3d05a9ac4a054ccad0ece355a623fafd3a10605a17ec", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Encapsulation promotes security & modularity\n\n* **Purpose:** Hide internal details of an object and only expose the necessary functionality through public methods\n* New objects can be identified based on the system\u2019s requirements\n* Encapsulation means creating classes for such objects to define the characteristics by defining attributes and behavior by providing methods\n* Java supports encapsulation by using classes with `attributes for structuring` and `methods for describing functionality`\n\n> **Problem Statement:** \n> \u201cPizza lovers can `bake` pizzas with varying `sizes` and `toppings` and `check the expected time` until the pizza is ready.\u201d\n\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n
Pizza
size
toppings[ ]
bake()
calculateExpectedTime()
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 872, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "68e68022-8735-4f93-83ce-df521ef92a1d": {"__data__": {"id_": "68e68022-8735-4f93-83ce-df521ef92a1d", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e09f0a03-a02d-4663-9d48-1bf00d5fdc4e", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "26a581093e7670d0d192e5dc00cc3854366a6da5d3b850254541ce77e248f910", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# From model to code\n\n\n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n
Pizza
sizetoppings[]
bake()calculateExpectedTime()
\n\n```java\npublic class Pizza {\n private String size;\n private String[] toppings;\n\n public Pizza(String size, String[] toppings) {\n this.size = size;\n this.toppings = toppings;\n }\n\n public void bake() {\n System.out.print(\"\");\n }\n\n public int calculateExpectedTime() {\n int expectedTime = 10; // 10 minutes for baking the crust\n\n if (size.equals(\"large\")) {\n expectedTime += 5;\n }\n\n return expectedTime;\n }\n}\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 763, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ecf2bc3c-4b78-4d2f-9e84-523d290b5f19": {"__data__": {"id_": "ecf2bc3c-4b78-4d2f-9e84-523d290b5f19", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "25e03c5c-4106-46c5-819b-5da441c12aa8", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "c1a74fdb626677a81b80065923616bc53e76e896490b0e14e7245face71f941c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# From model to code\n\n\n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n
Pizza
sizetoppings[]
bake()calculateExpectedTime()
\n\n```java\npublic class Pizza {\n private String size;\n private String[] toppings;\n\n public Pizza(String size, String[] toppings) {\n this.size = size;\n this.toppings = toppings;\n }\n\n public void bake() {\n System.out.print(\"\");\n }\n\n public int calculateExpectedTime() {\n int expectedTime = 10; // 10 minutes for baking the crust\n\n if (size.equals(\"large\")) {\n expectedTime += 5;\n }\n\n return expectedTime;\n }\n}\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 763, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d1d6223e-d11a-4aa4-900b-f883b02c8126": {"__data__": {"id_": "d1d6223e-d11a-4aa4-900b-f883b02c8126", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "99428655-c2f8-4f80-89ee-416f5a73c506", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "a36fb69c03c0d92c6dbbcb42155bb769eb1faab6f3311192c8543073cc8996a7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# From model to code\n\n\n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n \n \n
Pizza
size
toppings[]
bake()
calculateExpectedTime()
\n\n```java\npublic class Pizza {\n private String size;\n private String[] toppings;\n\n public Pizza(String size, String[] toppings) {\n this.size = size;\n this.toppings = toppings;\n }\n\n public void bake() {\n System.out.print(\"\");\n }\n\n public int calculateExpectedTime() {\n int expectedTime = 10; // 10 minutes for baking the crust\n\n if (size.equals(\"large\")) {\n expectedTime += 5;\n }\n\n return expectedTime;\n }\n}\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 805, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e36500f0-5eb1-480f-a09c-cebe16a60844": {"__data__": {"id_": "e36500f0-5eb1-480f-a09c-cebe16a60844", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a8b8a16d-03a1-417c-abae-fa999fefa8b9", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "097762b0937449004b56b543f22ed32a918c63ba4f3e33cd96f270d3242608ad", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# From model to code\n\n\n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n
Pizza
sizetoppings[]
bake()calculateExpectedTime()
\n\n```java\npublic class Pizza {\n private String size;\n private String[] toppings;\n\n public Pizza(String size, String[] toppings) {\n this.size = size;\n this.toppings = toppings;\n }\n\n public void bake() {\n System.out.print(\"\");\n }\n\n public int calculateExpectedTime() {\n int expectedTime = 10; // 10 minutes for baking the crust\n\n if (size.equals(\"large\")) {\n expectedTime += 5;\n }\n\n return expectedTime;\n }\n}\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 763, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5f13b708-06f7-4a63-af40-c35b59334a79": {"__data__": {"id_": "5f13b708-06f7-4a63-af40-c35b59334a79", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "620c0c64-71af-4f84-9bea-9cb655339ebf", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "3df5b5c89e3640fcb6559497fe1a8b79ccdc5758053ed30f2cef105543023ad0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# From model to code\n\n\n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n
Pizza
size
toppings[]
bake()
calculateExpectedTime()
\n\n```java\npublic class Pizza {\n private String size;\n private String[] toppings;\n\n public Pizza(String size, String[] toppings) {\n this.size = size;\n this.toppings = toppings;\n }\n\n public void bake() {\n System.out.print(\"\ud83c\udf55\ud83d\udd25\");\n }\n\n public int calculateExpectedTime() {\n int expectedTime = 10; // 10 minutes for baking the crust\n\n if (size.equals(\"large\")) { \n expectedTime += 5; \n }\n\n return expectedTime;\n }\n}\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 849, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bbc010b8-4a0d-4e97-b739-f966e45ff91d": {"__data__": {"id_": "bbc010b8-4a0d-4e97-b739-f966e45ff91d", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c4708dd5-68d4-4aae-8ccf-78ba5b0bb2e4", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "26a74ac42e4722c5d4ae278c1201a79295cee79963ee5afb0a7dc773ee9a8cc8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Inheritance creates common structure & behavior\n\n* **Purpose:** Create new classes by inheriting attributes & behaviors from existing classes \n* Establishes an inheritance hierarchy (also called a \"**taxonomy**\")\n\n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n
Car
modelSuperclass
color
year
drive()
\n\n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n \n\n \n \n \n
SportsCar
modelSubclass
color
year
maxSpeed
drive()
\n\n> Inheritance\n\n```java\nclass Car {\n String model;\n String color;\n int year;\n\n void drive() {\n System.out.print(\"vroom\");\n }\n}\n\nclass SportsCar extends Car {\n int maxSpeed;\n\n @Override\n void drive() {\n System.out.print(\"VROOM \ud83d\udca8\");\n }\n}\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1244, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e3c2fe52-ad60-4196-969d-fbe856fd3520": {"__data__": {"id_": "e3c2fe52-ad60-4196-969d-fbe856fd3520", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c2588257-46a5-4107-aab9-e30dfc2f039d", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "d570b4d52b8142c6d0e55549cea5fe974adf6e303b81aad87f70cea92cda055b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Classes vs. abstract classes\n\n* **Class**\n * An abstraction in the context of object oriented programming\n * A class encapsulates state and behavior\n\n* **Abstract class**\n * Cannot be instantiated\n * Define an abstract structure which holds common structure (state) or functionality (behavior)\n * Allows to create a blueprint for other classes without implementing all of the concrete methods and properties themselves \n \u2192 Greater code reusability and modularity\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n\n \n\n \n \n\n \n \n\n \n\n\n \n\n \n \n \n
Abstract superclass (italics)
<<abstract>>
Vehicle
modelcoloryear
drive() (Abstract method)
Inheritance
\n Car
\n numberOfTires
\n drive()
\n numberOfTires
\n drive()\n
\n Boat
\n numberOfSeats
\n drive()
\n numberOfSeats
\n drive()\n
Concrete method
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1301, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0fadaa87-845b-440a-9256-af5304735ecf": {"__data__": {"id_": "0fadaa87-845b-440a-9256-af5304735ecf", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ba7a052b-e731-4020-822a-b834a9201dcd", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "882ea979dda1e4afa896cbfd80348b7ff9ab7ac15bef176fe0391606ea9a6ac8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Generalization vs Specialization Inheritance\n\n* **Generalization:** A superclass defines common features \n* **Specialization:** Subclasses refine or extend the superclass with more specific features \n\n* An **abstract class** represents generalization: \n - There is shared data (attributes) and shared logic. \n - Subclasses are variations of a \"is-a\" relationship \n\n> \u2194 An **interface** defines shared functionality, role, or a \"contract\" across unrelated hierarchies \n\n**[Example - SiMCity]** Is a CityOfficial a special kind of Resident (specialization)? Or are Resident and CityOfficial both kinds of User (generalization)?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 636, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7ffde410-532e-43fb-8e2a-b52629a7b4cc": {"__data__": {"id_": "7ffde410-532e-43fb-8e2a-b52629a7b4cc", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c7475fab-c6f8-4a13-956a-ee42b4597bb6", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "8dc6276a0906721df58dbce4e5259542a3bf84a57d0448927bc957d044a70a4c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Polymorphism\n\n* *Poly* (= many) + *morph* (= forms) \u2192 \"many forms\"\n* Ability of an object reference to take on many forms\n* A super class reference (compile time) is used to refer to any specific subclass object (runtime)\n* Polymorphism allows us to mix methods and objects of different types in a consistent way\n* The polymorphism the object undergoes depends on the *when* & *what* part of the object is transforming\n - **When:** Compile-time vs dynamic\n - Compile-time polymorphism\n - Runtime polymorphism\n - **What:** Method vs object\n\n[Two images showing a transformation sequence of a character changing dress, illustrating polymorphism conceptually]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 667, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "37da0edb-cea7-4c0a-baa2-9c3e00c30027": {"__data__": {"id_": "37da0edb-cea7-4c0a-baa2-9c3e00c30027", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4f9fc753-4917-4a02-87a9-e3a23c6a9764", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "d7b5587bc426e54c3f8849e82ed963729f83e3e55826fa57c6cb32f72c86eb2e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example]\n\n```java\nif (type.equals(\"Cat\")) {\n Cat cat = new Cat();\n cat.makeSound();\n cat.describe();\n cat.showAnimation();\n} else if (type.equals(\"Dog\")) {\n Dog dog = new Dog();\n dog.makeSound();\n dog.describe();\n dog.showAnimation();\n} else {\n Cow cow = new Cow();\n cow.makeSound();\n cow.describe();\n cow.showAnimation();\n}\n```\n\n```java\n// \"Polymorphism\"\nAnimal animal;\nif (type.equals(\"Cat\")) {\n animal = new Cat();\n} else if (type.equals(\"Dog\")) {\n animal = new Dog();\n} else {\n animal = new Cow();\n}\nanimal.makeSound();\nanimal.describe();\nanimal.showAnimation();\n```\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 645, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "74916d55-4321-4e62-878f-fd732b83b0dd": {"__data__": {"id_": "74916d55-4321-4e62-878f-fd732b83b0dd", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c85615fe-eab1-4b76-8657-f4b59ca1cdf0", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "8aedc86d77bba47aa63dedb4ca354778c5831ae0558b080317a665d3a6e42e8a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Polymorphism\n\n```java\npublic abstract class Pancake {\n public abstract void cook();\n}\n\npublic class BlueberryPancake extends Pancake {\n @Override\n public void cook() {\n System.out.println(\"\ud83e\uded0\ud83e\udd5e\");\n }\n}\n\npublic class ChocolateChipPancake extends Pancake {\n @Override\n public void cook() {\n System.out.println(\"\ud83c\udf6b\ud83e\udd5e\");\n }\n}\n\npublic class PancakeMaker {\n public static void main(String[] args) {\n Pancake myPancake; // Compile time type\n\n myPancake = receiveOrder();\n myPancake.cook();\n }\n\n public static Pancake receiveOrder(Order order) {\n // Order type is based on user input\n // defined somewhere else\n if (order.getType().equals(\"Blueberry Pancake\")) {\n return new BlueBerryPancake(); // Runtime type\n } else {\n return new ChocolateChipPancake(); // Runtime type\n }\n }\n}\n```\n\n\n\n\n \n\n\n \n\n\n \n \n \n\n\n \n\n\n\n\n
Pancake
cook()
Blueberry PancakeChocolateChip Pancake
cook()cook()
\n\n> **Compile time type** points to the declared type of the variable (`Pancake myPancake;`).\n\n> **Runtime type** is the actual object type created at runtime (`new BlueBerryPancake()` or `new ChocolateChipPancake()`).\n\n----\n\nUniversity of Pittsburgh \n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L11 Requirements Analysis & OOP Recap", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1524, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "df3f39db-af4b-4003-a2f5-37b8606f399a": {"__data__": {"id_": "df3f39db-af4b-4003-a2f5-37b8606f399a", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f047a5c3-91c6-410f-8802-1a7a518cd5be", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "3e7821f6352f3f7d7de129c8dc004dacb1d623a49a13b47f39c176f80bcb87ef", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# OOP principles are tools that help us write better code\n\n* **Encapsulation/Reusability:** Encapsulating data and behavior allows for efficient code reuse across the application \n* **Maintainability:** OOP makes code modification and maintenance easier over time \n* **Scalability:** OOP allows code to scale with increasing complexity and new features can be added without breaking existing ones \n* **Abstraction:** OOP abstracts away complexity and allows developers to focus on essential aspects of the system \n* **Communication & Collaboration:** OOP enables easier collaboration", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 588, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "509f4580-14bc-46c7-b6f7-b51f99f08ab9": {"__data__": {"id_": "509f4580-14bc-46c7-b6f7-b51f99f08ab9", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a8f5e1c0-1477-4982-8b0f-eb310384510e", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "2020c3b725b64dc316c1afa5d3971a42e35c0d38d273275d25b3351e6d9040b7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Best Practices\n\n* **Aim for high cohesion:** Ensure that each identified object has a well-defined purpose and responsibilities, promoting high cohesion within the classes\n* **Low Coupling:** Minimize dependencies and coupling between objects, aiming for a modular and maintainable system design\n* **Iterative Process:** The process may require multiple iterations to refine and validate the identified objects and their relationships as the requirements evolve\n* **Documentation:** Document the derived objects, their attributes, behaviors, and relationships in a structured manner, e.g., using class diagrams or entity-relationship diagrams\n* **Review and Validation:** Collaborate with stakeholders to review and validate the derived objects, ensuring they accurately represent the requirements", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 800, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "779d0987-a343-4e99-a569-9f0e2cd6a793": {"__data__": {"id_": "779d0987-a343-4e99-a569-9f0e2cd6a793", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a148c81f-57e5-4ebb-8f75-a9338a4f350a", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "5646a3551aecb81a7e51a50ade7a8af6fb34e45ea357dc54ea8e0091a87ff145", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Intro to Analysis \n - Recap: OOP \n* Analysis object model", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 82, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ead8c55b-772d-41ef-bdfe-82354f1f8e9c": {"__data__": {"id_": "ead8c55b-772d-41ef-bdfe-82354f1f8e9c", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ccbdd146-08da-4e5e-bee7-c08456289b09", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "4900278a18ff83150524d1c174793ef81cbd277ca31ba3c49c44d6e897f9f47f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# System model \u2014 overview\n\nSystem model\n\n----\n\n| Functional model \u2714\ufe0f | Analysis object model | Dynamic model |\n|---------------------|-----------------------|---------------|\n| Use case model \u2714\ufe0f | Class diagram | Activity diagram |\n| | | Communication diagram |\n| | | State chart diagram |\n\n----\n\n> **What key functionality can users access / does the system provide?**\n\n> **What are the key objects and their relationships in the problem domain?**\n\n> **How does the system behave over time and respond to events?**\n\n----\n\nUniversity of Pittsburgh\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L11 Requirements Analysis & OOP Recap", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 723, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "49a9b64c-675a-4ef8-864a-11b91ac76fb0": {"__data__": {"id_": "49a9b64c-675a-4ef8-864a-11b91ac76fb0", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "575f2d11-d731-47d2-ac53-6fb66fcfba4f", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "b87f2ac440263726809e5d80bfc8542e5f4462267e7a4c87c1099338104fa5cb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# The analysis object model (AOM)\n\n* Helps in **structuring the problem domain**\n - Ensures that the system accurately represents real-world concepts\n - Identify and structure important concepts, attributes, and associations (relevant to the system\u2019s requirements)\n - Bridges the gap between requirements and design\n - Reduces errors\n - Improves communication\n - Facilitates code structure and reusability\n* Often depicted using a **UML class diagram**\n - Typically, visibility is not displayed\n - Focus on the most important elements (7+-2!)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 551, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "87bd4044-c308-4483-acc5-75aa1ed6b0d2": {"__data__": {"id_": "87bd4044-c308-4483-acc5-75aa1ed6b0d2", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fc76e065-cd9a-477d-bdbc-8b4ee513fbb1", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "f3db8bb93db64684a0ca79eb6ff6575625dd948cc0d050851a398c3e68a8f8c9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# How to think in an abstract way?\n\n1. What are the main **entities**? \u2192 **Objects** \n2. What **characteristics/properties** does the entity have? \u2192 **Attributes** \n3. What **functionality/behavior** does the entity provide/need? \u2192 **Methods** \n4. How do the entities **communicate** with each other? \u2192 **Associations**\n\n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n\n \n\n \n\n \n \n
PizzaTopping
sizeAggregation,
\"consists of/has\"
nameMultiplicity, \"1-to-many\"
bake()amount
calculateExpectedTime()isVegetarian()
\n\n> Association", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 837, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2cd9ff24-6171-4849-ad82-89eb228db8ad": {"__data__": {"id_": "2cd9ff24-6171-4849-ad82-89eb228db8ad", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e9fee1c7-0f03-454e-8c49-4aa4c54980fe", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "b9e0fc3415f14ed11c88b4c292309846e8d83d110613da3169f2c35cd92386ac", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML class diagram \u2014 Elements I\n\n* UML class diagrams are structural models\n* Focus on the most important entities, their attributes and methods, and their relationships among each other\n\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n\n \n \n \n\n \n \n \n
ClassAssociation
\n \n\n\n \n \n \n \n \n\n\n\n \n
Car
model
color
drive()
inspect()
\n\n
Attribute\n \n\n\n \n \n \n \n \n\n\n \n
Degree
name
field
viewRequirements()
\n\n
**\n \n\n\n \n \n \n \n \n\n\n \n
Course
title
isRequired
checkAvailability()
\n\n
Methods
* means \"0..*\"
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1545, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ce13a010-200c-44bc-bcf9-7c9aa5ff13bf": {"__data__": {"id_": "ce13a010-200c-44bc-bcf9-7c9aa5ff13bf", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4bd5360e-180f-4515-af78-3351033db5cd", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "05caa0292d9060b6456d6ca680b2beb9c29813c2cc2095348c063cf3b90de503", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML class diagram \u2014 Elements II\n\n| ClassA | \n|:------:| \n| ClassB | \n*ClassB inherits from ClassA* \n(Arrow with hollow triangle pointing from ClassB to ClassA indicating inheritance)\n\n----\n\n| <> | \n|:------------:| \n| ClassA | \n*abstract class*\n\n----\n\n| <> | \n|:-------------:| \n| ClassA | \n*interface*\n\n----\n\n| Notes are used to explain unclear aspects | \n|:-----------------------------------------:| \n| ClassA | \n(Dashed line connecting note to ClassA)\n\n----\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 571, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7f3bae4b-d9bf-4146-9a9d-97aec35c22a4": {"__data__": {"id_": "7f3bae4b-d9bf-4146-9a9d-97aec35c22a4", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b562eff1-8611-4a50-9cae-734517aaaba6", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "78e5711190f872941a4e0063d61f687874fc72f36436a96f85ff02db2873d2b2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML class diagram \u2014 Basic Associations\n\n> **(uni-)directional;** ClassA can access ClassB (not vice-versa)\n\n```\nClassA \u2192 ClassB\n```\n\n> **bi-directional;** ClassA can access ClassB and vice-versa\n\n```\nClassA \u2014 ClassB\n```\n\n> 1 is the **default multiplicity**, does \n> **not** need to be explicitly modeled\n\n```\nClassA * ClassB\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 338, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4894c612-4f4b-44ef-b446-5ad895e0057c": {"__data__": {"id_": "4894c612-4f4b-44ef-b446-5ad895e0057c", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "cd1debd8-c3aa-4c88-a574-047a013dada4", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "2ffa926e05bca8eb814f8710d970bb551398dc133914e254fd31eb69f33baa72", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML class diagram \u2014 Associations Overview\n\n* Unidirectional association\n* Dependency\n* Bidirectional association\n* Inheritance\n* Aggregation\n* Composition", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 157, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a24daadd-e48d-48da-8f25-e666ab587b6e": {"__data__": {"id_": "a24daadd-e48d-48da-8f25-e666ab587b6e", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "92a40f89-2155-455d-b05a-89b585944884", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "0d53c42707aa862b5946325b4e0b3bdf1d002d9d37c5ee2d9c32cfca0641cdd9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Unidirectional association\n\n* Represents a (long-term) relationship where one element (client) relies on another element (supplier) in some way to perform its functionality\n* Can be categorized into various types: usage, realization, generalization, and constraint dependencies\n\n> Student has 0..many favorite pizzas \n> Unidirectional association\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
StudentPizza
namefavoritePizza *size
isHungryprice
isVegetarian
eat()bake()
calculateExpectedTime()
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 844, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9cc3475c-5c68-4340-8bae-5c9059167510": {"__data__": {"id_": "9cc3475c-5c68-4340-8bae-5c9059167510", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a08a4887-bebe-4910-a559-29469701d3bd", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "91ddeb461cf35961c425823aaaeebb7afcc9e7c031a32d75f409eb95952ada90", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Dependency\n\n* Represents a (temporary) relationship where one element (client) relies on another element (supplier) in some way to perform its functionality\n* Can be categorized into various types: usage, realization, generalization, and constraint dependencies\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n\n \n \n
StudentPizza
name*size
isHungryprice
isVegetarianbake()
eat()calculateExpectedTime()
order()
\n\n> Student can access pizzas \n> dashed line = dependency. \n> solid line = long-time access", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 859, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bb1f9b28-0d9d-4ec6-a573-d388758012fa": {"__data__": {"id_": "bb1f9b28-0d9d-4ec6-a573-d388758012fa", "embedding": null, "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ae4786c2-b8c6-4b78-b1ce-4bc15a04f6cb", "node_type": "4", "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "c54147b827fd7e6e4a76e7abb069f6ff72ceaa62525f190e026d980c30140b33", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Bidirectional Association\n\n* Mutual relationship between two classes in which both classes have references to each other\n* Enables direct interaction and information exchange between the two classes in both directions\n* Bi-directional associations are used when both classes need to maintain a symmetrical connection and collaborate with each other\n\n\n \n \n\n\n\n \n
Student1*Order
\n\n> A student can place many orders, an order has a reference to one student", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 532, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5f479c12-1239-46ae-bfb0-2f0aaf4de1c6": {"__data__": {"id_": "5f479c12-1239-46ae-bfb0-2f0aaf4de1c6", "embedding": null, "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "23fa9e9f-f346-4c66-a40a-6ebaac43783a", "node_type": "4", "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "42f0d7406cb23fca12a5c6232ee2e8c99736f86d9bf98cc2d260ee5299139625", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# UML class diagram \u2014 Multiplicities\n\n* Specifies more details about an association\n* Indicates the number of objects that participate in an association\n* Also indicates whether an association is mandatory\n\n\n \n \n\n\n\n \n\n \n\n\n\n \n
Course1..610..*Student
City*Person
\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n
MultiplicityMeaning
1Exactly 1 (default)
*Zero or more (unlimited)
0..*Zero or more (unlimited); same as *
1..*One or more
0..1Zero or one (optional)
2..42Specified range
2, 4, 6..8Multiple, disjoint ranges
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 995, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "32e57dc5-01cd-4151-a9fd-a5e3cdf34d99": {"__data__": {"id_": "32e57dc5-01cd-4151-a9fd-a5e3cdf34d99", "embedding": null, "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2d91f457-af7b-482c-87c2-bb6c5951eeb6", "node_type": "4", "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "b9412f8887bbe6cfba0c6aab68112bf7dc8d0405750dc95ec8c5402f3af910a9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Take-Away:** Analysis object model (AOM)\n\n* Defines the system\u2019s structure \n - Models the most important objects \n - Defines relevant characteristics and behavior objects provide \n - Defines how objects interact with each other \n* High-level view of the problem! \n - Helps in defining a system early on without getting lost in too much detail", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 356, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "11fed973-8cb7-4715-b804-2eae5a034d4f": {"__data__": {"id_": "11fed973-8cb7-4715-b804-2eae5a034d4f", "embedding": null, "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4fdd7801-f42e-4314-a8bf-54ab7349d058", "node_type": "4", "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L11 Requirements Analysis.pdf"}, "hash": "78698da552489c3422ee8f0319c987ff101a9e098f6dbdd8b1d113cb5fa5af84", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L11 Requirements Analysis & OOP Recap\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 174, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "30053f6f-ce96-4f66-9c43-b42aa00e65da": {"__data__": {"id_": "30053f6f-ce96-4f66-9c43-b42aa00e65da", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "562d8c23-f0de-4efa-bb19-3f8dbfc4e739", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "1a084ca44488de516da882f21c4d7bcd84ea1004581b4b2373485df440474db0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L18 MVC & Exercise\n\n## CS 1530 Software Engineering\n\nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 168, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ccac079e-86ed-4539-b564-d1652a576d38": {"__data__": {"id_": "ccac079e-86ed-4539-b564-d1652a576d38", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "329513eb-9027-4f77-a34d-9691b4b55308", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "c54b833fc7cbf59b192a9f857717e85648138c7ff41f0890f0b7dc2e8c40cc2f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet. \n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes. \n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n\n* Material from these notes is obtained from various sources, including, but not limited to, the following: \n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009. \n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994. \n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011. \n - [http://scrum.org/])(http://scrum.org/)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1397, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f07195ae-53b0-43c7-a0b3-76b435a8879a": {"__data__": {"id_": "f07195ae-53b0-43c7-a0b3-76b435a8879a", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ecae360b-ffea-4275-9cf2-c9348f9912d1", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "e8d7572b5806fae0f9abc7f8e0901e86bf8109b2543d06063a97df03a4f37dc0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You can model a UML component diagram", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 58, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "64fad90e-236d-415a-979b-20b9861e98b0": {"__data__": {"id_": "64fad90e-236d-415a-979b-20b9861e98b0", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ba46548f-c0e3-42b1-91bd-1edcfdb78f64", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "8a92a9a698c3657ce8e0548181953c8166c06e70d2a5c601a9ef83ec798a2a79", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* MVC\n* Model a subsystem decomposition", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 59, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "12a2437d-8cc5-47d2-82f0-e48af71d2762": {"__data__": {"id_": "12a2437d-8cc5-47d2-82f0-e48af71d2762", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ea686be8-b317-47f8-bce2-f5f58a9ff1b5", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "a26bc357f66b1594f400986d8bc274002a3ad91b0a0701c9667e3261fe210714", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# MVC architectural style \u2014 Motivation\n\n* **Problem:**\n - Systems with high coupling tend to require modifications to both boundary objects (presentation/user interface) and entity objects (data) when changes are made to either component\n - Developers cannot work in parallel (UI changes can be made affect the underlying data or logic)\n\n* **Solution:** decouple entity objects (data) from boundary objects (presentation)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 424, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3a9c156b-870c-4ffd-afa1-9f00d1604024": {"__data__": {"id_": "3a9c156b-870c-4ffd-afa1-9f00d1604024", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "118f7e01-ba0b-4828-ae19-5afe6c94367a", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "242ec8619c13b243ce27dab892dc3231529bc641535f7fd14b806f5586f4bc1b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# MVC architectural style \u2014 Definition\n\n* Model-view-controller (MVC) architectural style \n* MVC separates a system into three main components: \n - Model \u2014 processes and stores entity objects \n - View \u2014 displays data (boundary objects) to the user \n - Controller \u2014 Acts as an intermediary between Model and View \n* MVC promotes a clear separation of concerns and modularity in application design \n* Commonly used when developing user interfaces \n - Widely used in web development, desktop applications, mobile app development, \u2026 \n* Enhances code maintainability and reusability", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 590, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8c151c8e-d7e3-486b-9231-1518589aa755": {"__data__": {"id_": "8c151c8e-d7e3-486b-9231-1518589aa755", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "22b30988-4276-4847-a318-d41456d456a5", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "f1e832760c65bbe3c0cc578daa5a3547157bd2b597c9cdf4cfad26aef2da01e2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# MVC architectural style \u2014 Overview\n\n* MVC typically operates on a cycle of user interactions\n* User input triggers actions within the Controller\n* The Controller updates the Model based on these actions\n* Changes in the Model are reflected in the View\n\n```mermaid\nflowchart TD\n A[request] --> B[\"\u00absubsystem\u00bb\\n**Controller**\"]\n B -->|update view| C[\"\u00absubsystem\u00bb\\n**View**\"]\n B -->|update model| D[\"\u00absubsystem\u00bb\\n**Model**\"]\n D -->|update model| C\n C -->|notify view of data change| D\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 503, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c2e416c5-4cdd-46b2-8336-2faa9387332e": {"__data__": {"id_": "c2e416c5-4cdd-46b2-8336-2faa9387332e", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "689e2465-c0e9-46d9-b7d0-9c7cab6543dd", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "e283be842cd3a028a14399df921e059d830337e52ff81134130bd0710420266d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] MVC\n\n* A website:\n - Model \u2192 HTML (handles knowledge of the website)\n - View \u2192 CSS (presentation)\n - Controller \u2192 browser (manipulates data through, e.g., user input forms)\n* Mac:\n - Locate a file (keynote presentation) in the file browser (Finder)\n - Open the file\u2019s info view\n - Open the file in keynote\n - Change the file\u2019s name (the new name is synced across all views)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 393, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "83ef3da2-6102-4e08-9b77-a835f3d2612a": {"__data__": {"id_": "83ef3da2-6102-4e08-9b77-a835f3d2612a", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ca7589bb-9b3e-4601-804d-28498152a7ad", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "ec0818acdb4472201e9a0e1a82e7e2e5b7d36c36c59986f14e375224bc24d8bd", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** Update File name\n\n| | | | |\n|---------------|---------------|---------------|---------------|\n| | **:Controller** | | |\n| | 2 \u2192 | | |\n| | 3: setName(newName) \u2193 | | |\n| **:InfoView** | 1: subscribeToFileEvents(file) \u2192 | **:Model** | \u2190 1: subscribeToFileEvents(file) |\n| \u2190 4: notifySubscribedViews(file) | 5: getName() \u2192 | \u2190 5: getName() | 4: notifySubscribedViews(file) \u2192 |\n| | | | **:KeynoteView** |\n\n> Informal UML communication diagram: \n> attributes & objects are missing", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 725, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9ec91f4b-74db-481d-a982-0ac0afece875": {"__data__": {"id_": "9ec91f4b-74db-481d-a982-0ac0afece875", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "89e98d9b-081a-42da-9d8b-91abcd90bf1f", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "6ae6f071220dc1126d3c8e19379cbee907c3e0fd7ed0610f5f942df4e4a1b2a9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# I18 - Order system (MVC) \u23f3 10min \ud83e\uddd1\ud83d\udcbb\ud83e\uddd1\ud83d\udcbb Pairs\n\n* Review: [https://github.com/pitt-1530/order-app-mvc-refactor])(https://github.com/pitt-1530/order-app-mvc-refactor)\n* Describe how you would refactor the system to use the Model-View-Controller architecture", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 258, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0da49feb-0ae9-4576-adfc-a377ffbcb18c": {"__data__": {"id_": "0da49feb-0ae9-4576-adfc-a377ffbcb18c", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fd17eb08-fc20-4a90-a4a1-c3b4cf6b89bd", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "d3481f75e91b11b8e9b6627e938dcaec88821d8cf84c22909eb9ac020b760f5a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Deisgn goals\n\n* Maintainability: Each component isolated \n* Modifiability: UI changes don\u2019t break logic \n* Reusability: Same model works for different interfaces \n* Parallel development: Teams work on different subsystems", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 227, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c2fd5c17-3cc3-4c56-b21d-2c71276d38ac": {"__data__": {"id_": "c2fd5c17-3cc3-4c56-b21d-2c71276d38ac", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4d98d23d-c42f-444b-9323-1fe97baca94e", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "8b7a172bd1572cac5d70792c4db6b28dc3e7d17b3ab11432b13abbb5bcbbcc75", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Variations of MVC\n\n> **Presenter replaces controller, View is passive**\n\n> **ViewModel exposes data, View updates automatically via data binding**\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
InputInputInput
ViewViewView
ControllerPresenterView Model
ModelModelModel
\n\n**MVC** \n(Model-View-Controller) \n\n**MVP** \n(Model-View-Presenter) \n\n**MVVM** \n(Model-View-Viewmodel)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 644, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b65d9d3f-b955-4f40-a185-1691256386fc": {"__data__": {"id_": "b65d9d3f-b955-4f40-a185-1691256386fc", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8ec72078-d96d-4747-a4e2-a7daacc332a8", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "e701bff97cb0eb3f30ef9d4c1f47d168856941f9958197028f51d0a69228361b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# When to use MVC\n\n* Multiple synchronized views of the same model \n* Exchangeable views and controllers \n* Exchangeability of look and feel \n* Considerations \n - Increased complexity \n - Potential for excessive number of updates \n - Close coupling of views and controllers to model", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 292, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0173a25f-3887-49f8-b8ed-cd83682fcf81": {"__data__": {"id_": "0173a25f-3887-49f8-b8ed-cd83682fcf81", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "794ad272-a4d7-44e7-a22f-46892474b952", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "cb30e04d7528be39f7bf7af26a4eed135a0eba6deba6d5824b331e1b1d1c2d44", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* MVC\n* Model a subsystem decomposition\n\n[University of Pittsburgh logo]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 92, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "06958429-3c4d-4593-aaf7-0e5462b645e8": {"__data__": {"id_": "06958429-3c4d-4593-aaf7-0e5462b645e8", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a32121c2-7242-410d-98fe-f2d81d8e58c7", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "1ade6ff7d0d9049aa8ecdb80a502e91348b3ef78668b85ed91f3b473cb518f72", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] UML component diagram\n\n* High-level view of the system\u2019s design using components and dependencies\n* A **UML component** represents a system part (such as classes, packages, or subsystems)\n* UML component diagrams are used for:\n - **Architectural design and planning**\n - Identifying system components and their interactions\n - Representing the high-level structure of a software system\n* Represented as a rectangle with a tabbed rectangle symbol inside\n\n----\n\n**Component notation examples:**\n\n```\n+---------------------+\n| \u00abcomponent\u00bb |\n| **Component** |\n+---------------------+\n```\n\n```\n+-----------------------------+\n| \u00absubsystem\u00bb | | |\n| **Subsystem1** |---|---|\n| | | |\n| +---------------------+ | | |\n| | \u00abcomponent\u00bb | |\n| | **Component** | |\n| +---------------------+ | | |\n+-----------------------------+\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 932, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "21f821af-52f4-403a-8f5d-afad4e403009": {"__data__": {"id_": "21f821af-52f4-403a-8f5d-afad4e403009", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "429c284f-4fe9-480e-ab19-d64267de40ec", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "cb84be251633265d661ae667b03f02c25a1de6058d528b14a1e6283b8835fee0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] UML interfaces\n\n* Define how components interact with each other or with external entities\n* Specify the required and provided services:\n\n * Lollipop: provided interface \u2b58\n\n * Socket: required interface \ud800\udd02\n\n * Dependency - - - - - - - - - \u2794 \n (a component depends on the implementation of another component)\n\n * A **port** specifies a distinct interaction point between the component and its environment \u2610\n - Ports are depicted as small squares on the sides of classifiers\n - Ports allow to group interfaces", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 532, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f4e80a2e-2667-473d-aa02-45c1d88d566c": {"__data__": {"id_": "f4e80a2e-2667-473d-aa02-45c1d88d566c", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9d36db84-fefe-4e6d-8034-9eb0e37c55fd", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "c3001970a23acfea666405edbf730aec4cc231409b420a61d4b14273a7042b17", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] Subsystem decomposition \u2014 Steps\n\n1. **Identify functional components:** Break the system into functional components with distinct roles \n2. **Define interfaces:** Clearly specify how subsystems interact and exchange data \n3. **Organize subsystems:** E.g., organize subsystems hierarchically \n4. **Assign responsibility:** Assign responsibilities to each subsystem \n5. **Manage dependencies:** Minimize dependencies between subsystems", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 448, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d8a5dd12-6cd0-49cb-b8d0-442672752690": {"__data__": {"id_": "d8a5dd12-6cd0-49cb-b8d0-442672752690", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "42781a21-7024-426e-83ba-4af0bb4387b4", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "b4d7feac49c326d388314951d2399caaba500e626ca697bf76aa3f3f6f586bdd", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** E-Commerce Ordering System\n\n\n \n \n\n \n\n\n \n\n \n\n\n\n\n \n\n \n \n \n\n \n \n \n\n \n\n\n\n \n
\n Authentication
\n userName
\n password

\n login()
\n logout()
\n resetPassword()\n
\n Customer
\n name
\n emailAddress
\n address\n
*\n Order
\n date
\n status

\n create()
\n confirm()
\n calculateTotal()
\n view()\n
\n Payment
\n amount

\n process()
\n pay()\n
\n Shipment
\n date
\n trackingNumber

\n schedule()\n
\n Product
\n name
\n description
\n price

\n add()
\n remove()
\n checkStock()\n
\n 1..20\n
\n PaymentMethod

\n select()\n
\n ApplePay

\n select()\n
\n Credit/Debit

\n select()\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1321, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7ecc1b24-59ed-4d3f-a551-0cea5992dfc0": {"__data__": {"id_": "7ecc1b24-59ed-4d3f-a551-0cea5992dfc0", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c9587028-18dc-4835-b0ca-e2efcf7e12a9", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "e08a13977ca67440731402493d8b6d1464f59d3d08546fb2ab9bb955628c3c99", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** E-Commerce Ordering System - Option I\n\n\n \n \n \n \n \n \n\n\n\n \n \n \n\n\n\n\n \n \n\n\n \n \n \n
\n Authentication
\n userName
\n password

\n login()
\n logout()
\n resetPassword()\n
\n Customer
\n name
\n emailAddress
\n address\n
\n Order
\n date
\n status

\n create()
\n confirm()
\n calculateTotal()
\n view()\n
\n Payment
\n amount

\n process()
\n pay()\n
\n Shipment
\n date
\n trackingNumber

\n schedule()\n
\n Product
\n name
\n description
\n price

\n add()
\n remove()
\n checkStock()\n
\n PaymentMethod

\n select()\n
\n ApplePay

\n select()\n
\n Credit/Debit

\n select()\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1694, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "33f6c40d-c4f2-495f-8c2f-845c693b5ad4": {"__data__": {"id_": "33f6c40d-c4f2-495f-8c2f-845c693b5ad4", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5200c3ed-ecad-48ae-a6fc-9e49e59a386d", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "72eb7a8fa8875336815dc4cb9835f79c7024ece8902035570186fe4d951023bd", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] E-Commerce Ordering System - Option I\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n \n
Authentication\u00absubsystem\u00bb
Customer
Order\u00absubsystem\u00bb
Payment
userNamenamedateamount
passwordemailAddressstatus
login()addresscreate()process()
logout()confirm()pay()
resetPassword()calculateTotal()
view()
\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n \n
\u00absubsystem\u00bb
Inventory
ShipmentProductPaymentMethod
datename
trackingNumberdescriptionselect()
schedule()price
add()ApplePay
remove()select()
checkStock()Credit/Debit
select()
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1529, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "150a6315-59c7-4fa7-b43d-7324a3584f1e": {"__data__": {"id_": "150a6315-59c7-4fa7-b43d-7324a3584f1e", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8ab592e8-7178-4b82-ab4e-e27508a21501", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "f7e53ac2da19139d50275cda0321ca7494f991dfa5d294023e34300c680c3be9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** Pizza Ordering System\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n \n\n \n\n\n\n \n\n \n \n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n \n
Baker*Order1..10Pizza
nameanchovyLovertotalPricedeliveryTypeaddExtraPineapple()
makePizza()complete()calculateExpectedTime()
Studentcreate()
nameemailAddress
address
notify()
\n\n\n \n \n \n \n \n \n \n \n\n \n\n \n \n\n \n \n \n
Topping
nameamount
isVegetarian()
0..5
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n
HawaiianPizzaYinzerPizza
addExtraPineapple()addExtraFries()
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1639, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0e93c412-e25d-4d00-9211-4cb84eb05d47": {"__data__": {"id_": "0e93c412-e25d-4d00-9211-4cb84eb05d47", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fc139323-ae7e-4f71-a7d9-089bb416b7d2", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "91303b63e46247e6bd480b334b5e517070fc6b7d07a51652ad2416279820645e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# I18 In-class: Subsystem Decomposition \u23f3 15 min \ud83e\uddd1\ud83d\udcbb\ud83e\uddd1\ud83d\udcbb Pairs\n\nDecompose your own or the provided pizza ordering system analysis object model into subsystems:\n\n* Create a **UML component diagram**\n* Decide on interfaces\n* Remember the SOLID principles!\n* **Review architectural styles: Can they solve a \"problem\"?**\n* Add a discussion (3-6 sentences / short bullet points) how your architecture follows SOLID and which architectural style(s) you have chosen and why.\n - Describe at least 3 SOLID principles", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 506, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8311fd1f-a666-4272-bcee-cc6e1c1d8ea0": {"__data__": {"id_": "8311fd1f-a666-4272-bcee-cc6e1c1d8ea0", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "880463eb-8565-4a9f-9410-927a8e0084eb", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "d472367c00c8eb2942ac1316fe4e6f614ce61f6d06552aa2a13aa2423a4bc3f7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# References\n\n* Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n* Object Management Group. Unified Modeling Language. Version 2.5.1, 2017", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 193, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1f08ceaf-c39f-4fcd-b80d-e6c9c5f32cc4": {"__data__": {"id_": "1f08ceaf-c39f-4fcd-b80d-e6c9c5f32cc4", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "650aaba2-9ff6-49ca-9da9-5b6941e2e460", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L18 MVC & Exercise.pdf"}, "hash": "30eee91942114d19de897f0df884b340070fc9c925c55eba4f9939fbc53a1be3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L18 MVC & Exercise\n\n## CS 1530 Software Engineering\n\nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 168, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "728d4e1e-0912-474d-a13c-3dfec6840006": {"__data__": {"id_": "728d4e1e-0912-474d-a13c-3dfec6840006", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "65067d81-e80a-49d0-be37-bdbeb86477c3", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "975cdf3374a76dc5668adb121146af2eaa3d984bfe30d718ee1a6bb9c0ba0016", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata 06\n\nThumrongsak Kosiyatrakul \n`tkosiyat@cs.pitt.edu`", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 72, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "21c4e6f2-ea29-4288-ab32-78ef5e9c4283": {"__data__": {"id_": "21c4e6f2-ea29-4288-ab32-78ef5e9c4283", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1c3dbc12-03a8-4b38-8cfe-d3260f3aead2", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "520c48c1f1ab50dfb39302c6b37a5ace935f8dc2a21201c7b46562bdb63588d6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Language\n\n* A language is a set of strings \n - A set can be empty \n - A set can have a finite number of elements \n - A set can have an infinite number of elements \n\n* Regular or not regular? \n - If \\( L \\) is the empty language, \n - \\( L \\) is regular since we can express it using the regular expression \\(\\emptyset\\) \n - If \\( L \\) is finite \n $$\n L = \\{ s_1, s_2, s_3, \\ldots, s_n \\}\n $$ \n for a number \\( n > 0 \\) and \\( s_i \\) is a string, \n - \\( L \\) is regular since we can express it using the regular expression \n $$\n s_1 \\cup s_2 \\cup s_3 \\cup \\cdots \\cup s_n\n $$\n\n* So, a non-regular language must be an infinite language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 678, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0246f201-6f15-41dd-9ba3-e7c495e55454": {"__data__": {"id_": "0246f201-6f15-41dd-9ba3-e7c495e55454", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5f6e090d-e6ab-44ea-b030-63a0b81e5890", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "45b31987465e0446fb6c01de9397d1fe0b6ee9c41130234dedaf5466bfb98b2c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Infinite Languages\n\n* But an infinite language can be a regular language:\n - \\(\\{ w \\mid w \\text{ starts with a } 1 \\}\\)\n - \\(\\{ w \\mid w \\text{ contains } 011 \\text{ as a substring} \\}\\)\n - \\(\\{ w \\mid w \\text{ ends with } 0110 \\}\\)\n\n* Technically, there are infinite number of regular languages that contain infinite number of strings\n\n* There must be something that can be used to distinguish between regular languages and non-regular languages\n - By definition, a language is regular if there are some finite state machines that recognize it\n - Recall that the number of states of a finite state machine must be finite\n - But a finite state machine can accept an infinite number of strings", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 710, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "30acbbb4-283c-40e9-8aa4-7276852e265e": {"__data__": {"id_": "30acbbb4-283c-40e9-8aa4-7276852e265e", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3c25db0f-0efe-4641-85b8-41f37d34f11a", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "4a53e8b7663c93d0457ee74866c878dcdd287902b5f3b746d8058f68f86b7ee4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Infinite Languages\n\n* What is the special property that makes a finite state machine accepts an infinite number of strings? \n - A loop **in a path to an accept state**\n\n```\n 0\n \u250c\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 \u2502\n \u25bc \u2502\n( ) \u2192 ( ) \u2192 ( ) \u2192 ( )*\n 0 1 0 0\n \u2191 \u2193 \u2191\n 1 0 1\n \u2502\n \u25bc\n ( )\n 0\n```\n\n* Let \\( L(M) \\) be the language of the above machine \\( M \\): \n - \\( 10^*1 \\subseteq L(M) \\) \n - \\( 10^*1 = \\{11, 101, 1001, 10001, \\ldots \\} \\subseteq L(M) \\) \n In other words, \\( 10^i1 \\in L(M) \\) for any \\( i \\geq 0 \\) \n - \\( 00(1010)^*0 \\subseteq L(M) \\) \n - \\( 00(1010)^*0 = \\{000, 0010100, 00101010100, \\ldots \\} \\subseteq L(M) \\) \n In other words, \\( 00(1010)^i0 \\in L(M) \\) for any \\( i \\geq 0 \\) \n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 06", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 847, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "aca39985-4dcc-4026-a08f-81cccc60b0fc": {"__data__": {"id_": "aca39985-4dcc-4026-a08f-81cccc60b0fc", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "80a26ef5-2152-438d-93f2-e99d0ff385e8", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "0ed35caa7d5eae5510476e0de40c6a5e571ca7e0650853ed2c74f096fa652080", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Infinite Languages\n\n* Given a DFA \\( M \\), how to detect that there is a loop in a path to an accept state? \n* Suppose a DFA \\( M \\) has 5 states and it accepts the string \n \\( w = w_1 w_2 w_3 w_4 w_5 \\) of length 5 \n\n ```\n (start) --w_1--> ( ) --w_2--> ( ) --w_3--> ( ) --w_4--> ( ) --w_5--> (accept)\n ```\n\n* There are the total of 6 current states but there are only 5 states \n - At least two of them must be the same (Pigeonhole principle) \n* Suppose the third and the fifth are the same state \n\n ```\n (start) --w_1--> ( ) --w_2--> ( ) --w_5--> (accept)\n ^ |\n | v\n w_4 w_3\n ```\n\n* $$ w_1 w_2 (w_3 w_4)^i w_5 \\in L(M) \\quad \\text{for any } i \\geq 0 $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 771, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "141316cd-14d2-4c33-ac98-10eebb3881bd": {"__data__": {"id_": "141316cd-14d2-4c33-ac98-10eebb3881bd", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f6f0a271-e590-4481-bbda-1673f8911af6", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "2d62b75a80dffad011a8132e2eb67a53866fd23c295b7d6c1d258cc0a8bebf14", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Regular Infinite Languages\n\n* From previous example\n - Any strings of length **at least** 5 that is accepted by \\( M \\) will go through a loop\n - If we let \\( x = w_1 w_2 \\), \\( y = w_3 w_4 \\), and \\( z = w_5 \\), we can say that\n\n $$\n xy^i z \\in L(M) \\text{ for any } i \\geq 0\n $$\n\n* Given an infinite regular language \\( A \\), there is a finite state machine \\( M \\) that recognizes it\n - But we have no idea how many states it has\n - Suppose it has \\( p \\) states\n - Any string \\( s \\in A \\) of length **at least** \\( p \\) will go through a loop\n - \\( s \\) must be divided into \\( s = xyz \\) where \\( y \\neq \\varepsilon \\) such that\n\n $$\n xy^i z \\in A \\text{ for any } i \\geq 0\n $$\n\n where \\( y \\) is the string that takes you around a loop", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 770, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "993b1b15-d413-417b-80b4-bca6b3102572": {"__data__": {"id_": "993b1b15-d413-417b-80b4-bca6b3102572", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c92c3ba1-c02f-415f-bacf-a21086a8ca30", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "da848cdbe93d5d14c09a75892a58e663ac760645a4800dc46ef25fcfd46178cb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Consider the following language \n $$ A = \\{ w \\mid w \\text{ contains } 011 \\text{ as a substring} \\} $$\n\n* We need at least a 4-states DFA to recognize \\( A \\) \n* Let\u2019s find a string \\( s \\in A \\) of length at least 4 \n - Let \\( s = 0111 \\) \n - \\( x = 011, y = 1, z = \\varepsilon \\) \n - \\( xy^0z = xz = 011 \\in A \\) \n - \\( xy^1z = xyz = 0111 \\in A \\) \n - \\( xy^2z = xyyz = 01111 \\in A \\) \n - \\(\\cdots\\) \n - \\( xy^i z \\in A \\text{ for } i \\geq 0 \\) \n - Let \\( s = 0101011 \\) \n - \\( x = 0, y = 1, z = 01011 \\) and \\( xy^i z \\in A \\text{ for } i \\geq 0 \\) \n - \\( xy^0 z = xz = 001011 \\in A \\) \n - \\( xy^1 z = xyz = 0101011 \\in A \\) \n - \\( xy^2 z = xyyz = 01101011 \\in A \\) \n - \\(\\cdots\\) \n - \\( xy^i z \\in A \\text{ for } i \\geq 0 \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 798, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f21b0a3a-dccc-4c2a-9272-21368cae552e": {"__data__": {"id_": "f21b0a3a-dccc-4c2a-9272-21368cae552e", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "82817cec-6ca7-41d4-b42f-2dae2f0b112a", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "458f9b8825d9c1c43f663727e1b7edca1c883478839f270f97097011d26cf325", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Pumping Lemma\n\n* The pumping lemma states that all regular languages has a special property\n* If a language lack this property, it is not a regular language\n\n> **Property** \n> All strings in the language can be **pumped** if they are at least as long as a certain special value, called the **pumping length**. Each such strings contains a section that can be repeated any number of times with the resulting string remaining in the language.\n\n* **pumped**: $$xy^iz$$ for any $$i \\geq 0$$ \n - We can insert the string \\(y\\) in between \\(x\\) and \\(z\\) any number of times but the result string is still in the language", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 621, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "871ae3b0-de62-45ec-8d41-b378016a2bf7": {"__data__": {"id_": "871ae3b0-de62-45ec-8d41-b378016a2bf7", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "25e80a7a-ab4e-4d67-801b-ed1dd66320d5", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "ac2ea6da5a28ed3a4eb79e285991fa85e20af6872a7496170becc1347efa7cc1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Pumping Lemma\n\n> **Pumping Lemma** \n> If \\( A \\) is a regular language, then there is a number \\( p \\) (the pumping length) where if \\( s \\) is any string in \\( A \\) of length at least \\( p \\), then \\( s \\) must be divided into three pieces, \\( s = xyz \\), satisfying the following conditions: \n> 1. for each \\( i \\geq 0 \\), \\( xy^i z \\in A \\), \n> 2. \\( |y| > 0 \\), **and** \n> 3. \\( |xy| \\leq p \\). \n> \n> where \n> * \\( |s| \\) represents the length of the string \\( s \\) \n> * \\( y^i \\) means that \\( i \\) copies of \\( y \\) are concatenated together \n> - \\( y^0 \\) equals \\( \\varepsilon \\) but it does not mean that \\( y = \\varepsilon \\) \n> - \\( (010)^0 = \\varepsilon \\) but \\( 010 \\neq \\varepsilon \\) \n> - \\( xy^0 z = xz \\), \\( xy^1 z = xyz \\), \\( xy^2 z = xyyz \\), \\( xy^3 z = xyyyz \\), and so on", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 818, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "35ea75f3-c13e-4018-945f-872f6251d0b1": {"__data__": {"id_": "35ea75f3-c13e-4018-945f-872f6251d0b1", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e9acb4f4-88b6-4ea0-bc71-4e926e70a931", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "6b78e68a0cef586221824fbbafb7ddadad4c01b838aaf46378515b0b403a11eb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Proof of the Pumping Lemma\n\n* Let \\( M \\) be a DFA recognizing \\( A \\) and \\( p \\) (the pumping length) be the number of states of \\( M \\).\n* Let \\( s \\) be a string of length at least \\( p \\).\n - \\( s = s_1 s_2 \\ldots s_n \\) where \\( s_x \\in \\Sigma \\) and \\( n \\geq p \\).\n* Let \\( r_1, r_2, \\ldots, r_{n+1} \\) be the sequence of states of \\( M \\) when processing \\( s \\).\n - \\( r_1 \\) is the start state of \\( M \\).\n - When \\( s_1 \\) is processed, the state of \\( M \\) is changed to \\( r_2 \\), and so on.\n * \\(\\delta(r_1, s_1) = r_2\\)\n * \\(\\delta(r_2, s_2) = r_3\\)\n * \\(\\vdots\\)\n * \\(\\delta(r_i, s_i) = r_{i+1} \\quad \\text{for } 1 \\leq i \\leq n.\\)\n * \\(\\vdots\\)\n * \\(\\delta(r_n, s_n) = r_{n+1}\\)\n* **Note** that there is no restriction that \\( r_x \\) and \\( r_y \\) cannot be the same state.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 815, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d655f37f-761e-493f-91b7-eadfa023b346": {"__data__": {"id_": "d655f37f-761e-493f-91b7-eadfa023b346", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d80eceb6-ebb8-4704-84e2-c4e31aea85cc", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "b250783bbffcb0c54a985d72e6422ff5d956a661be6adfaab03da5084307f6a0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Proof of the Pumping Lemma\n\n* The sequence \\( r_1, r_2, \\ldots, r_{n+1} \\) consists of \\( n + 1 \\) states \n - Since \\( n \\geq p \\), the above sequence has at least \\( p + 1 \\) states. \n* Since the machine \\( M \\) has only \\( p \\) states, in the first \\( p + 1 \\) states of the sequence, at least two states \\( r_j \\) and \\( r_l \\) must be the same state. \n - Let \\( r_j \\) be the first occurrence of the repeated state \n - Let \\( r_l \\) be the second occurrence of the repeated state in the above sequence. \n - **Note** that \\( j < l \\). \n* Since \\( r_l \\) is in the first \\( p + 1 \\) states of the sequence \\( l \\leq p + 1 \\). \n* Let \n - \\( x = s_1 \\ldots s_{j-1} \\) \n - \\( y = s_j \\ldots s_{l-1} \\) \n - \\( z = s_l \\ldots s_n \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 749, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d247f619-fde8-40e2-8b3e-5fd1259ae8fe": {"__data__": {"id_": "d247f619-fde8-40e2-8b3e-5fd1259ae8fe", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3bd05c2a-98f0-43bb-9c18-068045afbd73", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "49655146bb810e1b8bc09f2117d8d0fe9b421cc14cc496497dd2e39a08230c00", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Proof of the Pumping Lemma\n\n* If \\( M \\) accepts \\( s = s_1 s_2 \\ldots s_n \\) and \\( s = xyz \\),\n - \\( x \\) takes \\( M \\) from \\( r_1 \\) to \\( r_j \\),\n - \\( y \\) takes \\( M \\) from \\( r_j \\) to \\( r_l \\), and\n - \\( z \\) takes \\( M \\) from \\( r_l \\) to \\( r_{n+1} \\)\n\n where \\( r_{n+1} \\) is an accept state.\n\n* Let\u2019s check all conditions of the pumping lemma \n 1. Thus \\( M \\) accept \\( xy^i z \\) for \\( i \\geq 0 \\). \n 2. Since \\( j < l \\), \\( |y| > 0 \\). \n 3. Since \\( l \\leq p + 1 \\), \\( |xy| \\leq p \\).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 518, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "81bf18d2-00c6-4ddc-a842-5f55ccc7a982": {"__data__": {"id_": "81bf18d2-00c6-4ddc-a842-5f55ccc7a982", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a2824579-7f5c-4154-ad0c-5f4a8497bb6f", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "ddf81baa3d939d34e5670b875109ec02d2747fbd8bcd21e360f3eaeb19c66b26", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# How to use the Pumping Lemma\n\n* To check whether a language \\( B \\) is **not** regular using the Pumping Lemma, we use prove by contradiction\n - Assume that \\( B \\) is regular\n - There exists a machine \\( M \\) with \\( p \\) states that recognizes \\( B \\)\n - Select a string \\( s \\in B \\) of length at least \\( p \\) so that the conditions 1, 2, and 3 of the pumping lemma lead to a contradiction\n\n* **Notes**\n - The choice of \\( s \\) must involve \\( p \\) to ensure that \\( s \\) has length at least \\( p \\) (e.g., \\( s = 0^p011 \\), \\( s = a^p b a^{2p} \\) or \\( s = b^{p+1} a^p b \\))\n - It is possible that some choices of \\( s \\) do not produce contradiction. **If we do not get a contradiction, we have not proved anything yet**\n - Once you pick an \\( s \\), nothing tells us what \\( x \\), \\( y \\), and \\( z \\) should be. **We have to show that we must get a contradiction, no matter what \\( x \\), \\( y \\), and \\( z \\) are, as long as they satisfy conditions 1, 2, and 3.**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 981, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "467558c3-e094-43dc-b88e-d59b2009928c": {"__data__": {"id_": "467558c3-e094-43dc-b88e-d59b2009928c", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "06c7b0d7-c250-47a7-b208-4988b241d811", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "f526e58dfb9a5efb7d564e5de9070e75068601fce121d48f1ed06b95e92f9f2f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Show that $$B = \\{0^n 1^n \\mid n \\geq 0\\}$$ is not regular.\n\n* Assume that $$B$$ is regular. In other words, there exists a machine $$M$$ with $$p$$ states that recognizes $$B$$.\n - There are infinite number of strings in $$B$$ of length at least $$p$$\n - Just pick one (for now)\n* Let $$s = 0^p 1^p$$. Note that $$s \\in B$$ and $$|s| = 2p \\geq p$$.\n - The pumping lemma says there are strings $$x, y,$$ and $$z$$ such that $$s = xyz$$ satisfying the conditions 1, 2, and 3\n* Recall that there are multiple ways to divide $$s$$ into $$x, y,$$ and $$z$$ such that $$xyz = s = 0^p 1^p$$\n - Examples:\n * $$x = \\varepsilon, y = 0, \\text{ and } z = 0^{p-1} 1^p \\quad \\Rightarrow \\quad xyz = \\varepsilon 0 0^{p-1} 1^p = 0^p 1^p$$\n * $$x = 0^2, y = 0^3, \\text{ and } z = 0^{p-5} 1^p \\quad \\Rightarrow \\quad xyz = 0^2 0^3 0^{p-5} 1^p = 0^p 1^p$$\n * $$x = 0^p 1, y = 1, \\text{ and } z = 1^{p-2} \\quad \\Rightarrow \\quad xyz = 0^p 1 1^{p-2} = 0^p 1^p$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 968, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "497e79e3-be9e-40b2-8edb-a5996c71a4c2": {"__data__": {"id_": "497e79e3-be9e-40b2-8edb-a5996c71a4c2", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b0e5baa2-f02b-4bfc-9d28-1b2505e3f73e", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "4bf9db522c66f39776d82eda7764e28e8dcb489a5dd01850a2feee0f3e77da0c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example: \\( B = \\{0^n 1^n \\mid n \\geq 0\\} \\)\n\n* Since there are multiple ways to divide \\( s \\), we are going to focus on all possible ways to divide \\( s \\) into \\( x \\), \\( y \\), and \\( z \\) satisfying only conditions 2 and 3 first\n - We will try to get a contradiction from the first condition\n* The condition 3 says \\( |xy| \\leq p \\)\n - Since \\( s \\) starts with \\( p \\) 0s, to satisfy this condition, \\( x \\) and \\( y \\) must be strings that contain only 0s\n - If \\( x \\) contains one 1, for \\( s = 0^p 1^p = xyz \\), \\( |x| \\) is already \\( p + 1 \\)\n $$\n |xy| = |x| + |y| = (p + 1) + |y| > p\n $$\n - If \\( y \\) contains one 1, for \\( s = 0^p 1^p = xyz \\), \\( |xy| \\) is already \\( p + 1 \\)\n* Formally, to satisfy condition 3\n - \\( x = 0^j \\) for some \\( j \\geq 0 \\)\n - \\( y = 0^k \\) for some \\( k > 0 \\)\n - \\( k > 0 \\) makes \\( |y| > 0 \\) (satisfying condition 2)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 898, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6a9babf7-2595-4eaf-a5f2-6791b4523678": {"__data__": {"id_": "6a9babf7-2595-4eaf-a5f2-6791b4523678", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2d97bbc7-d34d-4676-9c49-2bebce8cde61", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "2c08f0fc97dc465086fd2b43f6aedf6296d41306f419089ff390162ebf4c319e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example: \\( B = \\{0^n 1^n \\mid n \\geq 0\\} \\)\n\n* Now we have \n - \\( x = 0^j \\) for some \\( j \\geq 0 \\) and \n - \\( y = 0^k \\) for some \\( k > 0 \\) \n* To make \\( xyz = s = 0^p 1^p \\), \\( z \\) must be \\( 0^{p-(j+k)} 1^p \\) \n\n$$\nxyz = 0^j 0^k 0^{p-(j+k)} 1^p = 0^{j+k+p-(j+k)} 1^p = 0^p 1^p\n$$\n\n* Condition 1 says that \\( xy^i z \\in B \\) for any \\( i \\geq 0 \\) \n - We just need to find an \\( i \\) such that \\( xy^i z \\notin B \\) \n - Let \\( i = 0 \\) \n\n$$\nxy^0 z = 0^j (0^k)^0 0^{p-(j+k)} 1^p = 0^j 0^{p-(j+1)} 1^p = 0^{p-k} 1^p\n$$\n\n* For \\( 0^{p-k} 1^p \\) to be in \\( B = \\{0^n 1^n \\mid n \\geq 0\\} \\) \n - \\( p - k \\) must be equal to \\( p \\) \n - \\( k \\) must be 0 to make \\( p - k = p \\) but \\( k \\) cannot be 0 \n - Contradiction \\(\\implies B\\) is not regular", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 773, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ddc3920e-1495-4f90-a987-3e4e03b4094a": {"__data__": {"id_": "ddc3920e-1495-4f90-a987-3e4e03b4094a", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c96dd937-7ac2-4451-ad25-f023d0883c0a", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "4bc5bbcbad965c0d6f00de823a317fe857f1fdc080e15bc1f5fcabfc8d4ad347", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example: \\( B = \\{0^n 1^n \\mid n \\geq 0\\} \\)\n\n* There are multiple \\( i \\)s that can lead to a contradiction \n - But \\( i \\) should not be 1 since \\( xy^1z = xyz = s \\in B \\) \n* Let \\( i = 2 \\)\n\n$$\n\\begin{aligned}\nxy^2z &= 0^j (0^k)^2 0^{p-(j+k)} 1^p \\\\\n &= 0^j 0^k 0^k 0^{p-(j+1)} 1^p \\\\\n &= 0^{p+k} 1^p\n\\end{aligned}\n$$\n\n* For \\( 0^{p+k} 1^p \\) to be in \\( B \\) \n - \\( p + k \\) must be equal to \\( p \\) \n - \\( k \\) must be 0 to make \\( p + k = p \\) but \\( k \\) cannot be 0 \n - Contradiction \\(\\implies B\\) is not regular \n* In this example, any \\( i \\neq 1 \\) will give you a contradiction", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 614, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "347f96c7-eaf6-47b0-8418-e85e3b6ba4f4": {"__data__": {"id_": "347f96c7-eaf6-47b0-8418-e85e3b6ba4f4", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "830305c3-609b-4801-9adc-005c67d22cc6", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "208aa82e3992d7f287d5a71009054cb01e141e24e81d4412bb31649f55a7be5d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example: $$B = \\{0^n 1^n \\mid n \\geq 0\\}$$\n\n* There are multiple strings \\( s \\) of length at least \\( p \\) that work for this example\n* Example: \\( s = 0^{2p} 1^{2p} \\)\n - This this string \\( s \\), use exact same proof where \\( x = 0^j \\) for any \\( j \\geq 0 \\), \\( y = 0^k \\) for any \\( k > 0 \\), and \\( z = 0^{2p-(j+k)} 1^{2p} \\)\n* Example: \\( s = 0^{\\frac{p}{2}} 1^{\\frac{p}{2}} \\)\n - This one is a little bit harder since condition 3 does not help much\n - There are three possibility for the string \\( y \\)\n * \\( y \\) contains nothing but 0s \\(\\left(y = 0^k \\text{ for some } k > 0\\right)\\) contradiction because \\( xy^2 z \\) will have more 0s than 1s\n * \\( y \\) contains some 0s and 1s \\(\\left(y = 0^k 1^m \\text{ for some } k,m > 0\\right)\\) contradiction because \n \\[\n xy^2 z = 0^j 0^k 1^m 0^k 1^m 1^{\\frac{p}{2} - m} \\notin B\n \\]\n * \\( y \\) contains nothing but 1s \\(\\left(y = 1^k \\text{ for some } k > 0\\right)\\) contradiction because \\( xy^2 z \\) will have more 1s than 0s", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1011, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8aad0ff2-ae77-4639-9fea-67d0bb34374e": {"__data__": {"id_": "8aad0ff2-ae77-4639-9fea-67d0bb34374e", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f9abceb8-bdf5-4600-a217-efd48276f962", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "971c03e4df8b6205d13bc06d45f24839950318840c6e944917dd8b94612ee2fe", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Rule of Thumb\n\n* Pick a string \\( s \\) in the language of length at least \\( p \\) such that it starts with at least \\( p \\) of the same symbol\n - \\( 0^p 1^p \\)\n - \\( 0^{2p} 1^{2p} \\)\n* Condition 3 will help reducing the amount of proofs that you have to do", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 261, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a2c1c819-1ab6-4eb8-a613-69663a3453fc": {"__data__": {"id_": "a2c1c819-1ab6-4eb8-a613-69663a3453fc", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dbc6a8ca-6079-4a3f-9f79-ef586620a4ab", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "4401d264b32ea801a52035c47adab53a3289c071c2ea461ce23518c538206b2d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Some Incorrect Proofs: \\( B = \\{0^n 1^n \\mid n \\geq 0\\} \\)\n\n* Let \\( s = 000111 \\) \n - \\( s \\) does not have length at least \\( p \\) (\\( p \\) can be any positive number) \n* Let \\( s = 0^p 1^{2p} \\) \n - \\( s \\notin B \\), cannot use the Pumping lemma \n* Let \\( s = 0^p 1^p \\) and \\( x = 0 \\), \\( y = 0^{p-1} \\), \\( z = 1^p \\) \n - This only shows one way of dividing \\( s \\) into \\( x \\), \\( y \\), and \\( z \\) such that \\( s = xyz \\) \n - There are multiple ways \n - Need to show them all by using variables (e.g., \\( 0^j \\), \\( 0^k \\), etc) \n* Let \\( s = 0^p 1^p \\) and \\( x = 0^j \\), \\( y = 0^k \\), and \\( z = 1^p \\) \n - \\( xyz = 0^j 0^k 1^p = 0^{j+k} 1^p \\neq s = 0^p 1^p \\) \n - If you say \\( j + k = p \\), it is still incorrect \n - You only show all possible ways such that \\( s = xyz \\) where \\( z = 1^p \\) \n - But \\( z \\) can have some 0s as well", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 876, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c2863b92-e1f7-4b40-9088-ed90b8087a05": {"__data__": {"id_": "c2863b92-e1f7-4b40-9088-ed90b8087a05", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/finite_automata_06_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "471e4d15-b9dd-4fc2-a696-b406755c55df", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/finite_automata_06_handout.pdf"}, "hash": "3e1f72b5042e6f4eb7d737dbd8358501d8ce0ca8c3cf1652392842dbd6fa51c9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Show that \\( B = \\{0^n 1^n \\mid n \\geq 0\\} \\) is not regular\n\nAssume that \\( B \\) is regular. Since \\( B \\) is regular, the Pumping lemma says that for any string \\( s \\in B \\) of length at least \\( p \\), \\( s \\) can be divided into \\( s = xyz \\) satisfying the following conditions:\n\n1. \\( xy^i z \\in B \\) for any \\( i \\geq 0 \\) \n2. \\( |y| > 0 \\) \n3. \\( |xy| \\leq p \\) \n\nLet \\( s = 0^p 1^p \\). Since \\( s \\) starts with \\( p \\) 0s, to satisfy the third condition, \\( x \\) and \\( y \\) are strings that contain nothing but 0s. In other words, \\( x = 0^j \\) for any \\( j \\geq 0 \\), and \\( y = 0^k \\) for any \\( k > 0 \\). Note that \\( k \\) must be greater than 0 because \\( |y| = |0^k| = k \\), and the condition 2 says that \\( |y| > 0 \\). Since \\( x = 0^j \\) and \\( y = 0^k \\), \\( z = 0^{p-(j+k)} 1^p \\). Let \\( i = 0 \\). We have\n\n$$\n\\begin{aligned}\nxy^i z &= xy^0 z \\\\\n &= xz \\\\\n &= 0^j 0^{p-(j+k)} 1^p \\\\\n &= 0^{p-k} 1^p\n\\end{aligned}\n$$\n\nFor the string \\( 0^{p-k} 1^p \\) to be in \\( B \\), the number of 0s must be equal to the number of 1s. In other words, \\( p - k \\) must be equal to \\( p \\). This requires \\( k \\) to be 0. But since \\( k \\) must be greater than 0, \\( xy^0 z \\notin B \\) \u2014 contradiction. Therefore, \\( B \\) is not regular.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1265, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "49cb22d8-d0c8-475b-b601-b153020a5f74": {"__data__": {"id_": "49cb22d8-d0c8-475b-b601-b153020a5f74", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "acffaf91-caa0-4d73-a07d-c749c5bcda6f", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "e4121c9f72d5334c4754a235a6f765fa9a27f61aeac3106d006ceb49028c465c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L07 Requirements Elicitation II\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 179, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f9b24bb6-fdc3-45ee-97ca-36ae4e970830": {"__data__": {"id_": "f9b24bb6-fdc3-45ee-97ca-36ae4e970830", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6f2844c6-fd21-482c-b18c-3dbb1b3d3520", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "3b1d40c90888f4058993d9d39071e88ee9456d6415ea3fc6879ee19024de3e55", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet. \n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes. \n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n\n* Material from these notes is obtained from various sources, including, but not limited to, the following: \n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009. \n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994. \n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011. \n - http://scrum.org/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1375, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fe17e153-46df-46b9-86eb-0008f84b9722": {"__data__": {"id_": "fe17e153-46df-46b9-86eb-0008f84b9722", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fab66206-335d-4130-bf81-df3daaacbd2a", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "19f6c5c53578047d587cdee2725107df7448e0d9e0f7a01db3081a74dfd40ff8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You have a deeper understanding of functional requirements\n* You can define non-functional requirements\n* You can define constraints", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 153, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "217bf5e2-c5b9-4b63-802d-556058a0085f": {"__data__": {"id_": "217bf5e2-c5b9-4b63-802d-556058a0085f", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "91a0e099-9352-43c9-be28-b097c6948ccd", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "d258fe920f955145baaefa83e56680f67f322ece9ae5949c63c43aeeaa7d3dca", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Deriving requirements\n - [Recap] Deriving functional requirements\n - Non-functional requirements", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 120, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3eba1c17-a17e-4c47-822c-e928c296572b": {"__data__": {"id_": "3eba1c17-a17e-4c47-822c-e928c296572b", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e373490c-63ab-4a0a-9468-52bb59feb4eb", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "5b65523af85631f074573cda0557bda6a9206030a44c798f776b2dd4744a3ef0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Goals of Requirements Elicitation\n\n* Define the **problem**: Understanding the stakeholders\u2019 real needs (not just what they think they need) \n* **Avoid ambiguity**: Requirements should be clear, testable, and unambiguous \n* **Build a shared understanding**: Align developers, customers, and other stakeholders \n - Users, endusers, customers, maintainers, support staff, etc.\n\n> Proper requirements elicitation avoids rework, saves money, and keeps projects on track.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 473, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "59ca93af-7d14-40e9-9abf-4f523f3967ae": {"__data__": {"id_": "59ca93af-7d14-40e9-9abf-4f523f3967ae", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ffa06323-0f28-4158-858e-420adb2b52ee", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "49662bfe000cf4c13eb790b2510fca690db9ea42422a8ae9a4b6a5ad827142a8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Examples] Issues with requirements\n\n* healthcare.gov: Launch in 2013, crashed under high load \n* Zoom: Security issues (2020) \n* Windows/CrowdStrike (mid 2024): No backward compatibility (BSOD) \n* Tesla HW4 Computer Failures (late 2024): Safety requirements inadequate \n* \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 281, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e30b55d8-0065-46bc-8a62-87fa60eb5bb1": {"__data__": {"id_": "e30b55d8-0065-46bc-8a62-87fa60eb5bb1", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "18cb1284-786a-4c85-b1d9-3be29b41e3d8", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "88671d2a22893084f777d699da9a3a8f9209066bd977563c3cb06c210f1a88f4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] Functional Requirements\n\n* Describe the essential functionality of the system\n* Define one requirement per function (feature)\n* They should be phrased in a general (/\"detailed enough\") manner\n\n\n \n \n\n\n\n \n\n \n \n
FR#Short title:Description
\n \n\n\n \n \n\n\n \n
Should be numbered based on their soon priorityPhrased in imperative mood!The description should not include implementation details!
\n\n
\n\n## [Example]\n\n**FR1 Select location:** The user can select a location on a map to view sinkholes in the selected area.\n\n**FR2 Login:** The user can login to the system using their email address and password.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 857, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "609613be-622c-4399-9520-972093ac0af3": {"__data__": {"id_": "609613be-622c-4399-9520-972093ac0af3", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "895ce90e-7271-45ca-99a1-6b64e506194e", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "736b94d45a22c7198b4e7056a250a403c759c6e63c02e5d0900d7e2e6013e4ea", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] What is functionality?\n\n* **Single purpose:** Each functional requirement should represent one logical unit of work \n* **Low complexity:** Complex requirements should be split into separate requirements (or grouped as sub-requirements) \n* **Unified testing & maintenance:** Each functional requirement should be treated as one unit during testing and maintenance \n* An **atomic requirement** is a requirement that cannot be further broken down into individual tasks \n\n> Splitting complex requirements into smaller, manageable requirements helps in system design to better identify reusable parts", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 610, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1f19df44-bb56-4512-b6a1-07277aa48dd5": {"__data__": {"id_": "1f19df44-bb56-4512-b6a1-07277aa48dd5", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "983665e5-b3c8-4f2c-9cf5-642420dca2fb", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "e9e05e98f866ced25f82a884ad48a9645a7241d4eb5f6b1ed9ba3f4e324cd247", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Defining requirements\n\n> User\u2019s perspective: viewing and downloading an account statement are two distinct actions \n> Each has its own functionality and does not depend on each other \n> Testing & maintenance will most likely be treated separately\n\n**FR4 Access account statements:** The customer can access account statements.\n\n**FR4.1 View Monthly Statements:** The customer can view their past transactions in their account statement, updated monthly.\n\n**FR4.2 Download Statements:** The customer can download their statements as a PDF file.\n\n**FR4.3 Receive statements via email:** The customer can choose to receive their account statement automatically via email automatically each month.\n\n> Sub-steps indicate a logical categorization", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 755, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a20991bc-8767-4e8a-aa1f-5755a297db79": {"__data__": {"id_": "a20991bc-8767-4e8a-aa1f-5755a297db79", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "574ad8ba-e6f0-46f6-aa1c-b3540f8ef1d5", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "e6b5c6da55faee6f31e2ce374fef78511b2532e86e947bad6c89761fd4851961", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# I06/I07 \u2014 Define functional requirements \u23f3 15 min \ud83e\uddd1\ud83d\udcbb\ud83e\uddd1\ud83d\udcbb Pairs\n\nBased on the problem statement, define **functional requirements** for the SiMCity system\n\n----\n\n| I07 - Functional Requirements | 2 points |\n|------------------------------|----------|", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 250, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "165085db-1f95-44b6-940b-c5cca6842b1e": {"__data__": {"id_": "165085db-1f95-44b6-940b-c5cca6842b1e", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "47712a70-0e42-4e57-b314-df6893743083", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "d1456deae198fd97f5ae1801611d14cbe6f3741c6b3476317e64d6c5bad20dc2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem Statement\n\nThe City of Pittsburgh requires the development of a Sinkhole Monitoring System (SiMCity) to address the issue of sinkholes within the city. The first version of SiMCity should enable residents and city officials to report sinkhole occurrences and track their locations.\n\nThe system should be easy to use, accessible through web and mobile platforms, and track sinkholes in real-time.\n\nResidents should be able to view sinkholes on a map, helping them to avoid such areas. It should also allow residents to report new sinkholes by sending in their location and photographic evidence for verification, or call for help. City officials can remove sinkholes from the map after they have been re-filled and repaired.\n\nSiMCity aims to increase public safety, facilitate rapid response to sinkholes, and improve the city\u2019s ability to manage and mitigate the impact of these geohazards.\n\n> **Let\u2019s develop this system!**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 935, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4fb53d4a-1cfc-4d48-abc3-26017f53a822": {"__data__": {"id_": "4fb53d4a-1cfc-4d48-abc3-26017f53a822", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "67fb5e22-830d-4357-b7b1-24aa423c671c", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "6f7a48149b09dbe2e05683223664b842f77e008fbcc4f40ec8e43fb1753aa1a0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Deriving requirements\n - [Recap] Deriving functional requirements\n - Non-functional requirements", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 120, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2f52a19d-fbc1-45af-b617-b1a0a5bb5442": {"__data__": {"id_": "2f52a19d-fbc1-45af-b617-b1a0a5bb5442", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "31286cb6-e92b-459b-8a12-1b78d8a964a5", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "accea5bc8beff43e64faff2a0d604926a739523b517c03ca0c47ae8006fa4cfe", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Recap] Deriving requirements: FURPS+ Model\n\n* FURPS+ is a model used to categorize features and attributes\n* [x] **Functional Requirements** \n > What functionalities/features should the system provide?\n* Non-functional Requirements \n - **U**sability \n - **R**eliability \n - **P**erformance \n - **S**upportability \n - \u2026 \n > E.g., robustness, maintainability, \u2026\n* Constraints (pseudo-requirements) \n > E.g., standards, physical limitations, software limitations, dependencies, \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 498, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7b527787-96da-4226-9382-d6940ff03097": {"__data__": {"id_": "7b527787-96da-4226-9382-d6940ff03097", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9cfe2d17-5416-4b9f-aa4f-9d99f68bca8c", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "8bc854ce983a3c79f63986725af21d33eacca61fc3ffd78167a949f772c5d211", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Non-functional requirements & constraints\n\n* **Non-functional requirements** (NFR) describe quality attributes that are important for the system (but do not describe functionality)\n* **Constraints** describe limitations or conditions that restrict the solution space\n - E.g., budgetary constraints, time constraints, technical constraints (e.g., the use of specific technologies), \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 386, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "73d8a3f4-aac1-4760-839c-d9f35314c71f": {"__data__": {"id_": "73d8a3f4-aac1-4760-839c-d9f35314c71f", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "020699a9-b701-46b2-a642-b577f16ab28c", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "770bb6cefcfa42d3a8ccf682087e3b13c58bb193b30f7eb76e1582bbfc1eeaa6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Defining non-functional requirements\n\n* **Usability:** How easy to use is the system?\n* **Robustness:** How stable and reliable is the system?\n* **Performance:** How fast and efficient is the system?\n* **Security:** How secure is the system?\n* \u2026\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n
NFR#Short title[Category]Description
Should be numbered based on their \u27a1\ufe0f priorityCan be in imperative mood, can be a noun. Should be expressive!E.g. UsabilityThe description should not include implementation details!
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 754, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "52fc16cd-9438-4db7-b20e-6ba898d1a3d7": {"__data__": {"id_": "52fc16cd-9438-4db7-b20e-6ba898d1a3d7", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7a9e7e27-00b3-4beb-9aef-3d1b001d4be4", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "ee39b349ddb1aed3d91c346bf62d2d60838527fce7000c8ee08d42fc76a5cc70", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Defining non-functional requirements\n\n* NFRs are observed during the testing, validation & verification phase\n* Focus on **measurable**, **testable**, and **specific** (enough) criteria!\n - It is (often) up to the requirements engineer to define **measurable** NFRs\n* Problem statements often hint at NFRs\n\n**[Example]** \n\"Wording and color scheme should be consistent\" \n\"The user should always be able to get back to the dashboard within at most 2 clicks.\" \n_\"The system must be user-friendly\"_, _\"The system should be intuitive\"_, \n_\"The system should be easy to use\"_", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 578, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5a07a60d-8e79-4a7b-a081-3cb40cd8c90c": {"__data__": {"id_": "5a07a60d-8e79-4a7b-a081-3cb40cd8c90c", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a546c90b-f54a-4ead-a910-873dcbcf3679", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "d317467d781773ecbbc68475f310eae5e7278f2583948045b84678c87d1c9d5f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "\"The system must be ~~easy to use~~ ~~user-friendly~~ ~~intuitive~~ \u2026\"", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 71, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8d6e60ab-5079-411a-b140-74b407662a38": {"__data__": {"id_": "8d6e60ab-5079-411a-b140-74b407662a38", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4f42f07a-0612-4806-b7f7-d8340894b052", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "435a34353195897340f34f2a817b5279933ec83026c9fed9adca02f1029f27a1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Usability \u2014 Overview\n\n* \"How effectively, efficiently and satisfactorily a user can interact with a user interface\" (usability.gov)\n* \"Quality attribute that assesses how easy user interfaces are\" (Nielsen, 2003)\n\n[The image shows a colored illustration of a person standing on a path labeled \"USABILITY PLAN\" looking towards a river labeled \"INTERFACE COMPLEXITY.\" The person is wearing a helmet labeled \"HEURISTIC EVALUATION\" and standing on land labeled \"COMPUTER CAPABILITIES.\" There is a crane labeled \"PROTOTYPING\" building a bridge labeled \"USER INTERFACE DESIGN\" that spans the river. On the far side of the river, there is a pillar labeled \"USABILITY ANALYSIS\" and land labeled \"USER NEEDS.\"]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 704, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5127b3b6-0396-4ecd-a2ab-0d4eb61fe826": {"__data__": {"id_": "5127b3b6-0396-4ecd-a2ab-0d4eb61fe826", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4a4c7a86-55ca-4fea-86b4-31b073c4c7a4", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "bf0f5bbdf9c986e94f31a6aded84c3449336d4cecf029b853fe63ba87fc1d646", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Usability Engineering\n\n* Process to \"build\" usability into products \n* Helps to ensure \"high quality\" of products\n\n----\n\n**Why is Usability Engineering important?**\n\n**How can we describe usability?**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 204, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "181101e7-b7f0-4a5c-8f26-2c4e0a926e02": {"__data__": {"id_": "181101e7-b7f0-4a5c-8f26-2c4e0a926e02", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c732afba-4e52-4c28-b884-4898cbbf8cdd", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "1d98c86a8b66ca1a6b7b8b9cebd23d1701a62375a084293ef6d6e207eac97982", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Usability\n\n* **Learnability** \u2014 How quickly can users grasp the user interface? \n* **Efficiency** \u2014 Once mastered, does the interface enable swift and efficient usage? \n* **Memorability** \u2014 Can users easily recall how to navigate and use the interface? Is the design memorable and user-friendly over time? \n* **Error Handling & Robustness** \u2014 How well does the system handle errors or unexpected user actions? \n* (subjective) **Satisfaction & User Experience** \u2014 Does the user interface offer an enjoyable and satisfying experience?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 539, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7ae099af-2305-4fc1-a0c0-c81b9fb112d4": {"__data__": {"id_": "7ae099af-2305-4fc1-a0c0-c81b9fb112d4", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2c5c2ddf-7e81-4453-bd3c-1820ccf464fe", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "4f7e7ab09c2d53ee0271976525ac320989da3d733c6f2b66dc32619d329051ce", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Usability (cont.)\n\n* **Consistency:** Is the interface design uniform across different sections, reducing cognitive load for users? `(7\u00b12) !`\n* **Flexibility:** Can users customize the interface to better suit their individual preferences and needs? E.g., IDE themes\n* **Task Completion:** How effectively does the interface support users in accomplishing their intended tasks without unnecessary complications?\n* **Feedback:** Does the interface provide users with helpful feedback after performing an action or guidance when they encounter difficulties or make errors?\n* \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 577, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a5ba9817-a5d2-488f-b85a-0d1a52593071": {"__data__": {"id_": "a5ba9817-a5d2-488f-b85a-0d1a52593071", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c92d81c9-a929-45c3-a048-9a6079e2325c", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "3094d4692805d73d7a8c148bc1ad6115b6298d0d9d89e3cad94f747db99746d8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Usability requirements\n\n**NFR1 Student Learnability [Usability]:** Students must be able to use the system without needing a manual.\n\n**NFR2 Instructor Learnability [Usability]:** Instructors must be able to learn and recall the main functionality of the system after following a user tutorial.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 307, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "365743a5-9d9f-4233-a559-198392666f13": {"__data__": {"id_": "365743a5-9d9f-4233-a559-198392666f13", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d5489249-da51-4c41-99b0-7272b2fd55db", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "65a0a541cbb6308acb633bb864ad071722ed34429418cae538ac0b9964751835", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Usability requirements\n\n**NFR1 Student Learnability [Usability]:** Students must be able to use the system to **complete basic tasks within 10 minutes** without requiring a manual.\n\n**NFR2 Instructor Learnability [Usability]:** Instructors must be able to learn and recall **90% of the core system functionality after completing a one-hour tutorial and must be able to perform key tasks within 5 minutes after a one-week break**.\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 468, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7c7e803c-b7cc-4098-bf47-14a970fed3cc": {"__data__": {"id_": "7c7e803c-b7cc-4098-bf47-14a970fed3cc", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "45d2774f-fd5e-422f-889e-9b49ebe8aabb", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "56839438c414deb64c6dd5181120e904be769a95c76debb7c4f502c8e8fcb293", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Usability requirements\n\n> Initial version. Measurability is vague, should be revised and refined when more is known\n\n**NFR1 Student Learnability [Usability]:** Students must be able to use the system without needing a manual. \n**NFR2 Instructor Learnability [Usability]:** Instructors must be able to learn and recall the main functionality of the system after following a user tutorial.\n\n> Revised / more detailed version\n\n**NFR1 Student Learnability [Usability]:** Students must be able to use the system to complete basic tasks within 10 minutes without requiring a manual. \n**NFR2 Instructor Learnability [Usability]:** Instructors must be able to learn and recall 90% of the core system functionality after completing a one-hour tutorial and must be able to perform key tasks within 5 minutes after a one-week break.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 836, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a872cb37-41f0-4edf-9734-b48da18fb4ab": {"__data__": {"id_": "a872cb37-41f0-4edf-9734-b48da18fb4ab", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f0b615a9-16af-4b1e-88b9-7851aff8a6bf", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "19cb8dd5a5bbfe32c53a215b6b2d0f959544eb9a36a91bb7a619a0c44b9ff4e1", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Deriving requirements \n - [Recap] Deriving functional requirements \n - Non-functional requirements \n* Organizational: Team Project", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 157, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e7cbff7d-1181-479f-a570-edbc3e78e753": {"__data__": {"id_": "e7cbff7d-1181-479f-a570-edbc3e78e753", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "782dd48e-91d1-4ac3-8964-5c039488bebe", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "91cab62321ca6f983969d87b97ead05116a1ee884aed172ca3f49f5b7c7c74af", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Team Project\n\n* **Team:** 4 - 6 students \n* **Goal:** Develop a software system throughout this term \n - Learn to apply SE best practices \n - Become more confident in using git and build up your GitHub profile \n - Setup a development pipeline and follow a workflow \n - Create test cases \n - Learn to use new tools \n - \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 335, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "588ec552-d024-40cb-8227-661219987a07": {"__data__": {"id_": "588ec552-d024-40cb-8227-661219987a07", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "13f9a580-e911-46b8-942f-a573c653285e", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "d6703d77b46c6bd81d7d6f328f3b35fda9b7aacd5773f562cd9cbe0945d9cf3a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Team Project** Timeline & First Tasks\n\n* Team forming: Due **September 18, 2025, 11:59pm** \n* Problem statement: Due **September 25, 2025, 11:59pm** \n* Find someone (your customer) who has a **problem** that **can be solved** with a (somewhat) complex **software system** \n - Customers can be: \n - Family members, friends \n - Pitt community: Professor (me included), staff \n - Local shop owner \n - \u2026 \n\n> \u2757\u2757 **If you already have an idea, please make use of Discord to find a team by 09/18.** \n> Otherwise I will allocate the teams.\n\n* System examples: \n - Campus navigation app \n - Fitness challenge platform \n - Personal finance tracker \n - Smart grocery list \n - Local events website \n - Sustainability tipps app \n - Coding challenge website \n - \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 792, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e5ccf591-1040-41ae-be1d-a8346f207f33": {"__data__": {"id_": "e5ccf591-1040-41ae-be1d-a8346f207f33", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "91261279-84e1-4e31-8385-422fc05bf691", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "f8f081c9d8632f656cfddcdbf59deabfecad450e9d09bd0f6c6b15fc9219b187", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Team Project** Timeline & First Tasks\n\n* Team forming: Due **September 18, 2025, 11:59pm**\n* If you **already have a team**, you must register it -> **Q2**\n - Name + email + GitHub handle\n - Roles: PO & Scrum Master (can rotate later)\n* **If you do not have a team -> Q1**\n - Name + Email + GitHub handle\n - Preferred Role: (PO, SM, Developer \u2014 or \"no preference\", can be changed later)\n - Project interests (short text or category you find interesting), no guarantee though \ud83d\ude43\n\n> \u203c **If you already have a project idea but no team / not enough members, please make use of Discord to find a team by 09/17,** \n> otherwise I will allocate you into teams.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 662, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e5ace444-4f8a-4d6f-b321-ed511d2dfa22": {"__data__": {"id_": "e5ace444-4f8a-4d6f-b321-ed511d2dfa22", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "baeede9e-dd88-42be-8318-e867b5f18e1b", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "59fedf9efc64752147623a677484a8d4e4aa5af0bae3859a7445223b0014ff0a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Team Project** Basic requirements\n\n* Project must be hosted open-source (GitHub or GitLab) (more on that soon!)\n* Project must contain:\n - User interface\n - Middleware (logical components)\n - Data storage\n - *Optional*: connect to an external API\n\n* Meet at least on a (bi-) weekly basis\n* Work as a TEAM (you are all responsible for the outcome!)\n - Each major milestone will include a peer review of the other team members.\n\n[The image shows four men standing together, dressed in distinct styles, positioned on the right side of the slide. The University of Pittsburgh logo is in the top right corner.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 615, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4e496608-68d4-4426-8289-00aaec8c5a1c": {"__data__": {"id_": "4e496608-68d4-4426-8289-00aaec8c5a1c", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4a61b464-204b-4c5d-a1cd-4a2e8d2ec383", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "ce566594650788d4f831279d4a5b443896f049a10640c3f0a2a339129f81b564", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Team project schedule *[tentative]*\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
#MilestonePtStartDueFormat
-Team formation109/1609/18Team / preferences
0Project Kickoff
(Problem Statement)
509/1909/25Problem Statement
1Sprint 1: Requirements & Use Cases1509/2510/07Requirements, user stories, use case diagram, acceptance criteria
2Sprint 2: Analysis & Modeling1010/0710/21Analysis object model, class diagram,
2 dynamic models
3Sprint 3: Architecture & Tech Stack1010/2111/04Architecture model, choice of stack
4Sprint 4: Implementation011/0411/18Basic skeleton running
5Sprint 5: Presentation & Delivery5011/1812/05Final code, documentation, live demo
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1229, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "71a928b2-dd65-4147-ae36-a611b24ec474": {"__data__": {"id_": "71a928b2-dd65-4147-ae36-a611b24ec474", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a59bee68-7978-4dea-b538-21f517b45231", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "8c43b94de8f279b3fcfd4e307d82c6e2fcb223120977d0520030546341ef7ff6", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Homework assignment schedule *[tentative]*\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
AssignmentPtStartDueTopic
A12509/1809/27Requirements
A22510/0710/16Modeling
A32510/3011/11Patterns
A42511/1812/05Testing
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 518, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "223d108d-3a96-4fc3-86af-cd7ad0f869a9": {"__data__": {"id_": "223d108d-3a96-4fc3-86af-cd7ad0f869a9", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6e7782fa-7c64-4be6-b1a8-b775384c6045", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "c6c88ad4948aea2d92157a3f2eb18688450cc5ae85898a008e46ec4a71f607e2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Take-Away: Overview of requirements elicitation\n\n* User-Centric Approach: Prioritize understanding the needs and perspectives of end-users and stakeholders\n* Effective Communication: Establish clear and open channels of communication to gather accurate requirements\n* Iterative Process: Requirements elicitation is an ongoing, iterative process, adapting to evolving project needs\n* Documentation: Thoroughly document gathered requirements to ensure clarity and alignment throughout the project lifecycle\n\nYOUR USER REQUIREMENTS INCLUDE FOUR HUNDRED FEATURES.\n\nDO YOU REALIZE THAT NO HUMAN WOULD BE ABLE TO USE A PRODUCT WITH THAT LEVEL OF COMPLEXITY?\n\nGOOD POINT. I'D BETTER ADD \"EASY TO USE\" TO THE LIST.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 709, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d9e92c63-6c38-44e8-84e8-ecbc7a945bb1": {"__data__": {"id_": "d9e92c63-6c38-44e8-84e8-ecbc7a945bb1", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "cf46b441-f121-4ceb-b962-533de2ab09ef", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L07 Requirements Elicitation II.pdf"}, "hash": "33bb082e5576c0878201d8bee0087732cfd3b737c16baae83f69f738f8b2c5ec", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L07 Requirements Elicitation II\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 179, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dba849df-4ab3-48c1-a42a-681574bf5874": {"__data__": {"id_": "dba849df-4ab3-48c1-a42a-681574bf5874", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b7c22205-d09c-4c1b-8769-27187f8f8f3c", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "560af1c5b50f59b1d7f3c08f266daa85c667d344a926b23c7279df6fdb74653f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L01 Introduction\n\nCS 1530 Software Engineering\n\nNadine von Frankenberg\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu\n\nFall 2025", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 163, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "18892d8c-f772-4afe-9a4c-7e3248c913f7": {"__data__": {"id_": "18892d8c-f772-4afe-9a4c-7e3248c913f7", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1b5246dc-12b7-4622-adbb-65c56b283528", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "4899f4f66cf4084d39842e44f80029d7bf638e21e8c7de865edd7b8838420a84", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet.\n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes.\n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n* Material from these notes is obtained from various sources, including, but not limited to, the following:\n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009.\n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994.\n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011.\n - [http://scrum.org/])(http://scrum.org/)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1384, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c575b97f-68ff-4e6e-8893-abba43e9882c": {"__data__": {"id_": "c575b97f-68ff-4e6e-8893-abba43e9882c", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0f09bfc6-d04a-40da-ae1c-216cd687c2a8", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "52487f3fb76ac0494118d804e073c395f77fee91b6f7056100423400241c997f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Organizational & syllabus\n - Prerequisites\n - Learning goals & course organization\n - Grading\n - Tools\n - Communication & Feedback\n* Q&A\n* Intro to Software Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 195, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dfe1af4c-e6f7-4e72-976d-cd544f46d6ca": {"__data__": {"id_": "dfe1af4c-e6f7-4e72-976d-cd544f46d6ca", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "301b59e1-7bfd-424e-bbea-c78435a4e74f", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "62fb9d63a3c63fadfb75c9c8f0b34c34765e2fb92c592829693346f8d7997750", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Organizational matters\n\n* Please review the syllabus & course policies on Canvas!\n* If you need specific **accommodations**, please **__email me & the DRS ASAP!__**\n* Make sure you fulfill the prerequisites for this course", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 225, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b331adce-78c4-4106-aec0-e265f3c93550": {"__data__": {"id_": "b331adce-78c4-4106-aec0-e265f3c93550", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4c3acf80-a37c-4608-b91f-7d138698cc39", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "6750fcc0def7bd3bcae117a589d07b0acf905676f5649aca9ac088d42d9a965c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Prerequisites & assumptions for this course\n\n* You have some programming experience \n - Previous experience with **Java** OR Python, C, C++, Visual Basic, \u2026 \n - Lecture code examples & coding homework assignments will be in Java \n - Team project (*more later*) can be in any language \n* You have access to a computer and use it during the lectures", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 357, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e79562a0-d816-49ba-b5d7-6e22b2262755": {"__data__": {"id_": "e79562a0-d816-49ba-b5d7-6e22b2262755", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6a94ba21-36ed-4666-b23d-68c960f0e51f", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "b7e99a43b400db6f71762d416ab66b2cc2cf55dd917330607d124596d5da1004", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Material to refresh your knowledge (Java)\n\n* Interactive online tutorials\n - https://www.learnjavaonline.org\n - https://www.w3schools.com/java/\n* Java tutorials covering the basics: https://docs.oracle.com/javase/tutorial/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 227, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cc9f9c4b-da7b-4308-8a2e-d16ce5da2549": {"__data__": {"id_": "cc9f9c4b-da7b-4308-8a2e-d16ce5da2549", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a796ce72-4b56-4e6b-9153-af284fec00ff", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "aa8d1fa1df7c36296a2246250ce36d8733241e4bbc7c3aa539632eeb955779e7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Organizational & syllabus\n - Prerequisites\n - Learning goals & course organization\n - Grading\n - Tools\n - Communication & Feedback\n* Q&A\n* Intro to Software Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 195, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2af20fc5-f229-4a96-8b32-21d8d206296b": {"__data__": {"id_": "2af20fc5-f229-4a96-8b32-21d8d206296b", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e415bf5b-c8df-4d49-8f9e-929870e90d82", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "d00fd6ef89f5ea2923479744da0b9f894e35b9001f7ed2707fe806c0fa93ea6e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Course learning goals\n\n* You know the most important software engineering terms and workflows \n* You understand the basic concepts and phases of a software project \n* You can apply suitable concepts and methods for concrete problems in complex projects \n* You are familiar with and can apply problem-solving techniques \n* You are able to analyze and evaluate given problems", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 380, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f2a62183-e832-4709-9a26-36e803bffe7e": {"__data__": {"id_": "f2a62183-e832-4709-9a26-36e803bffe7e", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "26d95543-2609-44ca-a060-642c622650a6", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "95f50e5c0409396c2ef331706666579d7a2c30875be9a78c2f06884252e7ceeb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Teaching philosophy\n\n*Tell me and I forget,* \n*teach me and I remember,* \n*involve me and I learn.* \n\u2014 Chinese proverb | Confucius", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 136, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "db0bef2b-e52c-4e6f-839b-8e551556273b": {"__data__": {"id_": "db0bef2b-e52c-4e6f-839b-8e551556273b", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9f131792-ce60-4bd0-9d09-76c9faf87792", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "17461c22e380a486e3c23fee27fed720147322474788e657b3965ed3e6965c1e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Teaching & learning framework\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n\n \n \n \n\n \n
LectureIn-class exercisesQuizzes &
Rapid Recaps
Theoretical knowledgeApply knowledgeTest knowledge
GuidedCollaborativeSelf
Team ProjectAssignments
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1305, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "31b5046c-98a9-4b23-a6b7-5a8c6ae14d2f": {"__data__": {"id_": "31b5046c-98a9-4b23-a6b7-5a8c6ae14d2f", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3233a8d8-e958-4023-9cd3-e31a1fe713cc", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "ec694bd200db97c8af8c3057c666c48f4c511fb01a7950d83ea4a3460cd7029d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# This course\u2019s roadmap\n\n* Intro to Problem-Solving \n* Model-based Engineering (UML) \n* Software Development Lifecycle Models (Waterfall, Spiral, Agile, \u2026) \n* Requirements Engineering \n* System Design and Architecture > Order is subject to change \n* Object-Oriented Analysis and Design \n* Design Patterns \n* Software Testing and Quality Assurance \n* Project Management in Software Engineering \n* Software Configuration Management & Deployment \n\n* ~~User Interface Design and Usability~~ \n* ~~Emerging Trends in Software Engineering (AI in SE, Blockchain, etc.)~~ > If time permits \n* ~~Verification and Validation~~", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 630, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1c04a149-9edc-42f4-b82f-4ac9dad20fc4": {"__data__": {"id_": "1c04a149-9edc-42f4-b82f-4ac9dad20fc4", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fcc46606-2a7c-4b00-8e9c-02ef0088ec48", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "722573918b7255b910ea5d28723fdf2a686783449210b829f345771a96e4df60", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Course organization \u2014 Lectures\n\n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n\n \n\n \n \n
#DateSubject
108/26/2025Introduction
08/28/2025
209/02/2025Model-based Engineering
09/04/2025
309/09/2025Requirements Analysis
09/11/2025
\u2026\u2026
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 674, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6810bf0b-5de0-4a95-a4e0-59cafa0b0549": {"__data__": {"id_": "6810bf0b-5de0-4a95-a4e0-59cafa0b0549", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9a689495-cd44-40f8-8713-1e688b3fea5a", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "c6fd5001dcec4b3fc27eb568eb964090ac4c7d479eaee7a33c6cb91ea2a3fa2e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Organizational & syllabus\n - Prerequisites\n - Learning goals & course organization\n - Grading\n - Tools\n - Communication & Feedback\n* Q&A\n* Intro to Software Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 195, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dc857518-0890-4de9-9bcd-73fa9c03cf9e": {"__data__": {"id_": "dc857518-0890-4de9-9bcd-73fa9c03cf9e", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "23a4e7cf-847d-4167-887a-9503eebeb38c", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "fc9649da7f3b7085a9f1ff68066b781792802ab038059b5bdb5b4a09b5ec59f2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Grading \u2014 Scale\n\n\n \n \n \n \n\n \n \n \n \n\n \n \n\n \n \n\n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n \n \n \n\n \n \n\n \n \n\n \n\n\n\n\n
% LG Breakdown
>= 90%A100% \u2014 97% A+
96% \u2014 94% A
93% \u2014 90% A-
>= 80%B89% \u2014 87% B+
86% \u2014 84% B
83% \u2014 80% B-
>= 70%C79% \u2014 77% C+
76% \u2014 74% C
73% \u2014 70% C-
>= 60%D69% \u2014 67% D+
66% \u2014 64% D
63% \u2014 60% D-
< 60%F59% \u2014 0%F
\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1190, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "552ce3fd-f6be-44e8-8cfc-1ecd642c9e34": {"__data__": {"id_": "552ce3fd-f6be-44e8-8cfc-1ecd642c9e34", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "073d7554-2822-495a-88c3-8181a0d96057", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "46c0384c6ddb273ab8c019faa9ae00d409b136eed4238b242150834c0240cb56", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Grading \u2014 Composition\n\n* Rapid recaps (in-class) [10%]\n* In-class exercises [20%]\n* Individual Homework Assignments [30%]\n - You will complete several assignments on your own\n - More information soon!\n* Team Project [40%]\n - In small teams, you will complete several assignments (more soon)\n - Each team must present their project (end of term)\n* No exams :-)\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n
TypePercentage
In-class
Rapid Recaps
10%
In-class
Exercises
20%
Individual
Homework
Assignments
30%
Team Project40%
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 793, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d0cb3c00-ce6f-4e68-8801-b59965fd9f50": {"__data__": {"id_": "d0cb3c00-ce6f-4e68-8801-b59965fd9f50", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0861b705-526f-4ec5-8512-5a223a554697", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "0e4c6c5124d7af643c07e11c9b598b44a02bce4d9272f656460c71609de1ae02", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Rapid Recaps (RRs) [10%]\n\n* Short quiz questions about the previous week\u2019s content \n* Every **Tuesday** at the beginning of class, **11:00 am on the dot** \u23f0 \n* Open book, up to 5 questions, time will vary from ~ 3 - 10 min \n* There are no repetitions! No exceptions! \n* Your worst two RR results will be dropped", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 318, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "100e256c-b31c-4980-8b18-66bb26e5658e": {"__data__": {"id_": "100e256c-b31c-4980-8b18-66bb26e5658e", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "299bdafd-87c1-43ad-ab20-1e15cea35998", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "7c4d66618acf0e05fd6295dd5978d748556f7d61c158aa5fc5ba94e5d5c7fb4b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# In-class Exercises [20%]\n\n* You will be given some time in-class to work on a problem in **pairs**\n* Follow-alongs or short exercises to be completed in class (latest by 11:59 pm)\n - E.g., programming exercises, modeling exercises, quiz questions, \u2026\n* After some time, a pair present their results\n - You receive feedback from peers & me\n - Allows you to adapt your solution before submitting it!\n - You see other solutions and understand other approaches\n - Practice communication skills", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 498, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6194bf94-85ef-478f-8032-9777db67d686": {"__data__": {"id_": "6194bf94-85ef-478f-8032-9777db67d686", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "86419b13-fe0b-4ebf-b289-7a76d092426f", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "51290d1c48fa69d7e24562c57bafd2fa843cde1cb4d4b3c75502ddce5a79475f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Individual Homework Assignments [30%] \u2014 Preview\n\n* Individual submissions \n* Assignments allow you to apply & deepen your knowledge \n* *More & schedule soon*", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 162, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "748d2d9e-d021-473f-85d0-4dc7dbd466af": {"__data__": {"id_": "748d2d9e-d021-473f-85d0-4dc7dbd466af", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a0b3d243-a1be-478e-af7f-5cb685263367", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "6f26ab1f0ee872218e94ca8da454bf45cd4efe43f3b87da7d8854bbec4ee112f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Team Project [40%] \u2014 Preview\n\n* In small teams, you will work together on designing a software system (and implementing parts of it) throughout the term\n* You will come up with your own idea / find someone with an idea\n* Each team member must contribute somewhat equally (will be assessed!)\n* Each team must present their system\n* *More & schedule soon*", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 356, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "417bb18f-2806-4d2b-9105-5c8ab590d81f": {"__data__": {"id_": "417bb18f-2806-4d2b-9105-5c8ab590d81f", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fd270dac-04c1-4540-bad7-be889e6f13b6", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "d7c3284297403aac1f328ef6772739dee8a786b9af12d9648bd23c9dfe70b557", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Organizational & syllabus\n - Prerequisites\n - Learning goals & course organization\n - Grading\n - Tools\n - Communication & Feedback\n* Q&A\n* Intro to Software Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 195, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1e7df8b9-7dde-4853-b068-94bef3c1cce6": {"__data__": {"id_": "1e7df8b9-7dde-4853-b068-94bef3c1cce6", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "79cdcea3-4106-4852-af23-05376dc62149", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "ed014e993f9382fd0ea277d53212969dd89c0515908fa7037f85b815dbbda55e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Main course tools (1)\n\n**Canvas** \n* Access lecture material \n* Take rapid recaps \n\n**TopHat** \n* Follow-along with the slides \n* Complete in-class exercises \n\n**Gradescope** \n* Access & submit coding exercises (in-class, assignments)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 244, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ac42d99f-c337-4120-81da-21d4ec5f3994": {"__data__": {"id_": "ac42d99f-c337-4120-81da-21d4ec5f3994", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "14d5a4f1-97d4-4afa-b7e2-ce34b22ee040", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "99bef9b47c0c4fca39c43cd7f88b0318e1138f6d018fb3777f9486b6a3ea483b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Main course tools (2)\n\n## Discord\n* Communicate with instructor, TA, & fellow students\n* Ask general questions about the organization, lectures, and exercises\n* Receive announcements\n* You can find the invite link on Canvas", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 226, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "db8dcb55-38f3-4529-8cea-a2251d43ca78": {"__data__": {"id_": "db8dcb55-38f3-4529-8cea-a2251d43ca78", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c8c1849e-79b1-4ea8-9416-eadcf372d06d", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "6b16b5790ae712a00173dfe659993be626648b8b61415d3de2554a6c78b8f82b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Organizational & syllabus\n - Prerequisites\n - Learning goals & course organization\n - Grading\n - Tools\n - Communication & Feedback\n* Q&A\n* Intro to Software Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 195, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "80bd1f7e-f5aa-4f48-80ce-3ec2020d2ec6": {"__data__": {"id_": "80bd1f7e-f5aa-4f48-80ce-3ec2020d2ec6", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c38b6e84-c14e-4c89-a98c-203da93122f2", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "437fa8d4783dcc061f67987d9817240d6515401e36b5375ae77dc042c89a83a4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \"Life happens\" - Late submissions & Extensions\n\n* Reach out **asap** in case of medical/family/\u2026 emergencies \n - I will need some **proof**, e.g., doctor\u2019s note \n - (E.g., your roommate\u2019s friend\u2019s COVID test is NOT a valid form of proof) \n - **Alternative:** \n Reach out to **Lynnsey Doane** (`led114@pitt.edu`, Director of Student Success) \n\n* Non-emergency late submissions/extensions \n - Please reach out if unsure how to handle a situation before the deadline (no later than 3 days past the due date)! \n - Late assignments/in-class exercises: see late policy in the syllabus \n - RR: in total, you can miss two (your best 10 RR scores will count) \n\n[The image shows a two-panel comic of a dog sitting calmly in a room on fire, saying \"THIS IS FINE.\"]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 776, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a1274bf9-7155-408d-964c-6a26033a2418": {"__data__": {"id_": "a1274bf9-7155-408d-964c-6a26033a2418", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "24c147ae-2bd1-4716-89b2-a4ccd9964cfe", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "a21fec4e8d1f51c20c22fcbeb373df6fac7f9800588e2a14d69b8c44ae7429d9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# \u203c Expectations \u2014 Questions (in-class & Discord)\n\n* **Ask questions!**\n - If asking a question \"publicly\" makes you a little uncomfortable, I still encourage you to do so; it will be good practice & benefit you in the long run (e.g., being more comfortable to ask questions in a job later on)\n - **THERE ARE NO STUPID QUESTIONS!**\n - Remember, you are here to **learn**! \n If you have a question, there is a high chance of someone else having the same question\n - If my/your TA\u2019s answer does not satisfy you, also please let do me/them know! \n What is obvious to us might not be obvious to you, but if we don\u2019t know, we can\u2019t change anything\n* **If there are no questions, I will assume that everyone understood everything!**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 739, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ad1fa5bd-9807-4b34-8c3b-306b626c2ab5": {"__data__": {"id_": "ad1fa5bd-9807-4b34-8c3b-306b626c2ab5", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "cf158de9-7c38-42aa-a93f-23d893e79d03", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "d03cbc0fda18cc88906259b2a6136676f3dec370dc8ab51e05bf22ef5894746d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Expectations \u2014 Feedback\n\n* If you have any feedback, **please talk to me!**\n* I can only make changes if I know about what\u2019s working for you and what isn\u2019t\n - Knowing what\u2019s working for you is important for me!\n - Don\u2019t wait for the surveys, please reach out anytime!\n* There will be frequent questions/feedback TopHat discussions - do use them!\n* There will be two 'official' surveys throughout the course\n - **Midterm evaluation:** 09/08 - 10/20/2025 \n > Based on this feedback, I will make changes for the remainder of the semester\n - \u2757\u2757 **Final course evaluation: 11/17 - 12/07/2025** \n > **Most important one!**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 631, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cc53da89-a4e8-44fc-b199-757185d1aa6a": {"__data__": {"id_": "cc53da89-a4e8-44fc-b199-757185d1aa6a", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1afb2557-03af-4d8c-9e3f-91403f1e7a0f", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "697f021cbf303f4ffb68590d9e922d28a015aad63af6d43b11e4f0da54e4c04d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Previous Knowledge\n\n\u23f3 5-10 min \ud83d\udcca Survey **Please complete this survey by the end of today!**\n\n[University of Pittsburgh logo]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 130, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1824ef33-3ae1-4007-990e-2a38a329eee1": {"__data__": {"id_": "1824ef33-3ae1-4007-990e-2a38a329eee1", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "aa8a5db0-1399-4397-9812-efe1d991257f", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "5e18322add8baf6919ba3c974c419a103015e5085965f3aab734fc346d1d8fa9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Organizational & syllabus\n - Prerequisites\n - Learning goals & course organization\n - Grading\n - Tools\n - Communication & Feedback\n* Q&A\n* Intro to Software Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 195, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "edad2037-5822-4d1d-841d-66ded241e10b": {"__data__": {"id_": "edad2037-5822-4d1d-841d-66ded241e10b", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "96bc6cf5-071b-40f2-a18e-7228b28f954b", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "6333708f61680c53e4f1f2f07460b6db427e500e5da8d33385c15dbec3266e4e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "Questions? \nConcerns? \nFeedback?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 35, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fbae79a1-b97a-49e7-b325-491294704e07": {"__data__": {"id_": "fbae79a1-b97a-49e7-b325-491294704e07", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e682343e-cde9-4486-b456-e475edfcbdfb", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "8515a21915c7126b1ba1b1f16f624f1c5eec56751bf07bbcfd2b8953d85dba41", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Useful websites every programmer should know & use\n\n* Google ![Google logo]\n* Stack Overflow ![Stack Overflow logo]\n* GitHub ![GitHub logo]\n\n* Other useful websites:\n - Geeks for Geeks\n - SourceForge\n - Codecademy\n - CodeBeautify", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 236, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8fa28574-ef92-4c6c-b836-a486fc0311c3": {"__data__": {"id_": "8fa28574-ef92-4c6c-b836-a486fc0311c3", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2c0df155-53aa-42c6-a41c-1f606533b23d", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "a4fdaf00b43d47823587177d5ad6b4bb339f46a2d0d7c80c656f7173afbdc062", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "What are your expectations for this class?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 43, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "72677465-31f5-4878-bbb7-93947e22b346": {"__data__": {"id_": "72677465-31f5-4878-bbb7-93947e22b346", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9090fba3-be99-400b-a1da-530771880f18", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "b1133922333629505c600834bfcd9e6211b2230946a4575645c2947946a8b850", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Organizational & syllabus\n - Prerequisites\n - Learning goals & course organization\n - Grading\n - Tools\n - Communication & Feedback\n* Q&A\n* Mini-Intro to Software Engineering", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 200, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "74e65e2d-e14f-4cc5-8016-e3766e4319a8": {"__data__": {"id_": "74e65e2d-e14f-4cc5-8016-e3766e4319a8", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c702bfd8-9800-49c7-92fb-b693c6145849", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "ff2168e03d1432f34eb9dfd3fed752133d35bd0a795186abca66ca0ded499a64", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# What is software?\n\n* Software is **complex** \n - Typically composed of many parts\n* Software can be **complicated** \n - No sufficient documentation = not easy to understand \n - Often requires in-depth knowledge to make a change\n* Building & maintaining software involves many **stakeholders** \n - E.g., developer, customer, user, \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 342, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9a6ef3ac-b79a-4356-b902-35ed95df741d": {"__data__": {"id_": "9a6ef3ac-b79a-4356-b902-35ed95df741d", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b0c6553b-33ee-4108-96ee-62f106037168", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "7b88e8e7fcc5c922d4f2aa576b856ed3dbcf2ca514abf0662987851a15833874", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# What is software engineering?\n\n> Code? \n> Coding?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 53, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "696ba37e-8197-4a87-8c57-69869db5cbd3": {"__data__": {"id_": "696ba37e-8197-4a87-8c57-69869db5cbd3", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "26481353-f152-4f38-9411-b83984780735", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "8139899bf3ca5961891136dd4df8fc6feba23b23a029aad80bdf5bd4663a9028", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "*Software Engineering is not rocket science nor textbook knowledge*\n\n# Software Engineering is the use of **common sense** and **discipline** to **solve real-world problems**\n\n[University of Pittsburgh logo in the top right corner]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 232, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5fadc877-5586-4b9e-a555-77bdd03dfae4": {"__data__": {"id_": "5fadc877-5586-4b9e-a555-77bdd03dfae4", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "02d62435-c5fa-48cc-9f0e-fb7aeb8c728e", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "5857c88f270c87679a05741f1f88736320ba27ec0d4e2bf69dcc00ff394df8f5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# What is software engineering?\n\n* Software engineering is much more than 'just writing code' \n - Programming is a subset of software engineering!\n\n* **Software engineering is the** **process** **of applying scientific principles to the design & creation of software** \n - Systematic approach to designing, building, testing, and maintaining software \n - Focuses on problem-solving and decision-making throughout the project lifecycle \n - Collaboration and teamwork across various roles & stakeholders \n - Emphasizes quality assurance, scalability, and sustainability\n\n* Involves both technical and non-technical skills \n > Communication & project management", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 671, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f93cbaa7-56e2-443a-8c05-f4a2f768520c": {"__data__": {"id_": "f93cbaa7-56e2-443a-8c05-f4a2f768520c", "embedding": null, "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e64df88d-e942-40b8-ab22-c5364989388f", "node_type": "4", "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "49af37af4013a1a1abe207b33d4ea183bb59dee33fa89a7b3a9a860cafbc9ccb", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Key concepts in software engineering\n\n* Software engineering builds on **problem-solving** abilities \n 1. Understand the problem \n 2. Propose a solution and a project plan \n 3. Engineer a system using best practices and good design principles \n\n> The proposed solution is often called and used as a 'prototype'\n\n* Software engineering is about **dealing with complexity** \n - Creating abstractions and models \n - Notations for abstractions \n\n* Software engineering is concerned with **dealing with change** \n - Requirements elicitation, analysis, design, implementation, validation of the system, delivery and maintenance", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 638, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "72a7ec13-75f2-4f7b-9315-bf2ab8e1bcec": {"__data__": {"id_": "72a7ec13-75f2-4f7b-9315-bf2ab8e1bcec", "embedding": null, "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6092dddd-47de-4263-b7fc-a3ecfecdb2cf", "node_type": "4", "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "57f4d65ad0e91fca0841e5fb3cc49388a74092dd83c6a6e4fe92851a43feeaf8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Why you should learn about software engineering\n\n* Building software without discipline is crazy!\n* Software is critical to society\n - Economy\n - Enterprises\n - Key part of many complex systems\n - Essential for designing products\n - Embedded in systems you are using daily\n - \u2026\n* Realizing large, complex projects is hard\n* Software crisis (*more next lecture*)\n* It\u2019s fun \ud83e\udd13", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 383, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b0024046-c605-412d-a67d-c4feb989ee23": {"__data__": {"id_": "b0024046-c605-412d-a67d-c4feb989ee23", "embedding": null, "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6284aa5a-d57b-40b1-86ca-1dc2ddb4f77e", "node_type": "4", "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "78cd7c3b62ff70f5d719842bc34ee2a82e6f06f99b94422a533dc8cec9264932", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# RR00 - Demo\n\n\u23f3 2 min \u26a1 Rapid Recap \n\n> **Practice time!** \n> (Today\u2019s results will count as a bonus \ud83d\udcaa)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 108, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f461ffe1-3e70-4beb-8e4e-2fb4513d940a": {"__data__": {"id_": "f461ffe1-3e70-4beb-8e4e-2fb4513d940a", "embedding": null, "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b62617e8-5b2e-4ecb-8f1f-43e6137f9488", "node_type": "4", "metadata": {"page_number": 40, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "40904850d8c5a1634ec43661516e1e2da4f1021bac14ff00273982171a26f012", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# How to build a complex system?\n\n## Where to start?", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 53, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "786fd7c3-f6c0-4853-9e02-18d51ec84468": {"__data__": {"id_": "786fd7c3-f6c0-4853-9e02-18d51ec84468", "embedding": null, "metadata": {"page_number": 41, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c867a2ae-a7d9-425a-a1de-196b65d9b431", "node_type": "4", "metadata": {"page_number": 41, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "8791ddce1b0f6879e8ef57b887d646ccedb9718db4f21a4cfb1f0a32464b1826", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# I01 \u2014 Group Exercise \u23f3 10 min \ud83d\udcac In-class\n\n## Problem Statement: \n*Imagine you're in a new city for the first time, and you're very hungry. You want to find a good place to eat but don't know the area. How would you go about solving this problem?*\n\n## Your Task:\n* Form small groups of 2 \u2014 3 students \n* Identify steps you would naturally need to solve this problem \n* You now want to share your approach with many people in various cities! \n* **Design & build this system:** *How many possible solutions are there? Which solution is correct? Where to start?* \n* Share your results! \n\n\n \n \n\n \n\n \n\n \n
gradescopeI1 - Defining a system
2 points by Turnitin
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 744, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c3eead52-fc52-4935-8e0c-17c3e66a0d49": {"__data__": {"id_": "c3eead52-fc52-4935-8e0c-17c3e66a0d49", "embedding": null, "metadata": {"page_number": 42, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a05b4cb2-113f-4bf3-be3c-04b7d84b88da", "node_type": "4", "metadata": {"page_number": 42, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "6dcad74d5bbb565d526de14ad5e237acbf1c1191fad0976ba0a0c3c340775778", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# I01 \u2014 Group Exercise \u23f3 10 min \ud83d\udcac In-class\n\n----\n\n**Problem Statement:** \n*Imagine you're in a new city for the first time, and you're very hungry. You want to find a good place to eat but don't know the area. How would you go about solving this problem?*\n\n----\n\n**Questions you might consider:**\n\n* What do you need to build this system? \n* What assumptions are you making? \n* How will the user interact with the system? \n* How will you collect information about available restaurants? \n* Are other stakeholders involved? Who are they? \n* How will you measure the success of the system? \n* What happens after you have built this system? \n* \u2026\n\n----\n\n> Via **Gradescope.** \n> One submission per group, please! \n> You can add your group members after submitting the exercise.\n\n\n \n \n\n \n\n \n \n
gradescopeI1 - Defining a system
2 points by Turnitin
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 954, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "68257f21-2395-453e-b427-e449a71cf1e5": {"__data__": {"id_": "68257f21-2395-453e-b427-e449a71cf1e5", "embedding": null, "metadata": {"page_number": 43, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "12209d31-5909-44ad-841d-8d24c207b7fb", "node_type": "4", "metadata": {"page_number": 43, "file_name": "data/Fall25 1530 - L01 Introduction (1000).pdf"}, "hash": "ed1b7983a2030b18bd8d6a6d0c3dc407daf16fa70e864806a44a755e0c66f42e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L01 Introduction\n\nCS 1530 Software Engineering\n\nNadine von Frankenberg\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 152, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "61d73bee-5e2d-489d-823d-0563b5462d6b": {"__data__": {"id_": "61d73bee-5e2d-489d-823d-0563b5462d6b", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7df62fdd-2eaa-4daa-94b5-eb47e66a77d0", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "7c753553b6baf825bdc4fc03054fc21f5d1f018baf96186d3a6589a3fefe7b1c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Finite Automata 03\n\nThumrongsak Kosiyatrakul \ntkosiyat@cs.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 70, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "79afa0b5-9289-4e77-97a6-77fedcf62191": {"__data__": {"id_": "79afa0b5-9289-4e77-97a6-77fedcf62191", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ad712aa0-cfb6-477a-b7a8-f688e69bc2a6", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "b220251ba34e95223795635959dd8130b3597c4fa175e5460d39675094b5ba1b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Nondeterministic Finite Automaton\n\n```\n 0, 1 0, 1\n \u21bb \u21bb\n(q\u2081) \u20141\u2192 (q\u2082) \u20140, \u03b5\u2192 (q\u2083) \u20141\u2192 (q\u2084) \u21bb\n```\n\n* Let \\( \\Sigma = \\{0, 1\\} \\)\n* Different between Deterministic Finite Automaton (DFA) and Nondeterministic Finite Automaton (NFA):\n - DFA always has exactly one exiting transition arrow for each symbol in the alphabet\n * NFA may have none, one, or many exiting arrows for each symbol\n - DFA have no arrow with the label \\( \\varepsilon \\)\n * NFA may have zero, one, or many arrows exiting from each state with the label \\( \\varepsilon \\).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 564, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6105b810-1abb-40a3-b00a-ac84c03b4110": {"__data__": {"id_": "6105b810-1abb-40a3-b00a-ac84c03b4110", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9424c67c-0023-4cbb-a07b-55ddb2e96746", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "dfb636a62cb8592a3b9141ffc7bcebf4cd0552f3e0f101734ed5876fd147eaba", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Compute an NFA\n\n```\n 0, 1 0, 1\n\n \u2192 (q\u2081) --1--> (q\u2082) --0, \u03b5--> (q\u2083) --1--> ((q\u2084))\n \u2191 \u2191\n | |\n 0,1 0,1\n```\n\n* If you encounter a state with multiple ways to proceed for a regular input:\n - The machine splits into multiple copies of itself.\n - The machines follow all the possibilities in parallel.\n - Each copy of the machine takes one of the possible ways.\n\n* If you encounter a state with an $\\varepsilon$ symbol as an exiting arrow:\n - Without reading any input, the machine splits into multiple copies.\n - Each follows each of the exiting $\\varepsilon$-labeled arrows, and\n - One stays at the current state.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 703, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bd07802f-a077-4fbc-ab10-9d0b766136a3": {"__data__": {"id_": "bd07802f-a077-4fbc-ab10-9d0b766136a3", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a59eff89-d205-408b-9480-3ac62d20ac25", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "58bb067b34d85555013bdd050e9564d96596f1e374b9aa31e84a0e4940ecf411", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Compute an NFA (Computational Tree)\n\n* Computation of the machine on input `010110`\n\n```mermaid\nstateDiagram-v2\n [*] --> q1: Start\n q1 --> q1: 0,1\n q1 --> q2: 1\n q2 --> q3: 0, \u03b5\n q3 --> q4: 1\n q4 --> q4: 0,1\n state q4 {\n <>\n }\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 275, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "87f41955-fa21-472e-8dc0-cd4711c3a796": {"__data__": {"id_": "87f41955-fa21-472e-8dc0-cd4711c3a796", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "1052f264-49dd-47d2-a3d6-8443a6955451", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "fbafa46e611d0a51514e01323a1d3635356e202bc646cd81ea0c852d1a3037ca", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Compute an NFA (Computational Tree)\n\n* Computation of the machine on input `010110`\n\n----\n\nSymbol read | State \n------------|--------\n0 | ![circle with q1 inside] Start \n0 | ![circle with q1 inside] \n\n----\n\nMermaid diagram representing the NFA:\n\n```mermaid\nstateDiagram-v2\n [*] --> q1\n q1 --> q1: 0,1\n q1 --> q2: 1\n q2 --> q3: 0, \u03b5\n q3 --> q4: 1\n q4 --> q4: 0,1\n```\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 03", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 483, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f3ada881-f366-49e2-974f-fac699dcc276": {"__data__": {"id_": "f3ada881-f366-49e2-974f-fac699dcc276", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f46a460e-58b5-46bd-a6b4-347d8650a1f3", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "773174403f224ba7b60c37e8f7cbb67a416c0d55684d92b8f58f71a84e4adcc5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Compute an NFA (Computational Tree)\n\n* Computation of the machine on input `010110`\n\n----\n\nSymbol read | | | | \n---|---|---|---|---\n | | | | \n0 | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n | | | | \n\n----\n\nMermaid diagram representing the NFA and its computational tree:\n\n```mermaid\ngraph TD\n subgraph Computational Tree\n A1((q1)) --> A2((q1))\n A2 --> B1((q1))\n A2 --> B2((q2))\n A2 --> B3((q3))\n end\n\n subgraph NFA\n Q1((q1)) -->|1| Q2((q2))\n Q2 -->|0, \u03b5| Q3((q3))\n Q3 -->|1| Q4((q4))\n Q1 -->|0,1| Q1\n Q4 -->|0,1| Q4\n end\n\n style Q4 stroke-width:3px,stroke:#000\n style Q1 stroke-width:3px,stroke:#000\n```\n\n----\n\n* Start state: `q1`\n* Input string: `010110`\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 03", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 961, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8e85461e-56c6-4a43-a9c2-1460615792dd": {"__data__": {"id_": "8e85461e-56c6-4a43-a9c2-1460615792dd", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "ff3189ee-6cee-4ea0-af55-214386c4311e", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "932575de5a9831053fbcb015ce79910aa7841e4b2e798281cefb254fdd68b503", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Compute an NFA (Computational Tree)\n\n* Computation of the machine on input `010110`\n\n\n \n \n\n \n\n \n\n \n\n \n\n\n\n \n\n \n\n\n \n
Symbol readq1 Start
0q1
1\n \n\n\n \n \n\n\n \n
q1q2q3
\n\n
0,10,1
0\n \n\n\n \n \n\n \n
q1q3
\n\n
\n \n\n\n \n \n\n\n\n\n\n\n \n
q11q20, \u03b5q31q4
\n\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 801, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "87452903-5997-468c-892a-4d4233a18f1c": {"__data__": {"id_": "87452903-5997-468c-892a-4d4233a18f1c", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9f775235-b052-436e-9a44-029203885d7e", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "43d0bfe3d9b81349eb199822fb93ede29b7eb65d13bff47fe0a8beeb3219dcea", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Compute an NFA (Computational Tree)\n\n* Computation of the machine on input `010110`\n\n```mermaid\ngraph TD\n %% Computational Tree on input 010110\n Start((q\u2081)) --> q1_1((q\u2081))\n q1_1 -->|1| q1_2((q\u2081))\n q1_1 -->|1| q2_1((q\u2082))\n q1_1 -->|1| q3_1((q\u2083))\n q1_2 -->|0| q1_3((q\u2081))\n q2_1 -->|0| q3_2((q\u2083))\n q3_1 -->|0| q4_1((q\u2084))\n q1_3 -->|1| q1_4((q\u2081))\n q1_3 -->|1| q2_2((q\u2082))\n q1_3 -->|1| q3_3((q\u2083))\n q3_2 -->|1| q4_2((q\u2084))\n```\n\n```mermaid\ngraph LR\n %% NFA Diagram\n start --> q1((q\u2081))\n q1 -- \"1\" --> q2((q\u2082))\n q2 -- \"0, \u03b5\" --> q3((q\u2083))\n q3 -- \"1\" --> q4((q\u2084))\n q1 -- \"0,1\" --> q1\n q4 -- \"0,1\" --> q4\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 651, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "b8035955-6e30-47bc-a4e1-611048db7055": {"__data__": {"id_": "b8035955-6e30-47bc-a4e1-611048db7055", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f9196c41-455c-440a-9fbd-4c48c23b1073", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "b68ade13125f0566955fe72c95aceacffa85b741c94bf5d5e6d463969991aa38", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Compute an NFA (Computational Tree)\n\n* Computation of the machine on input `010110`\n\n```mermaid\ngraph TD\n %% Computational tree on the left\n A1((q1)) --> A2((q1))\n A2 -->|1| B1((q1))\n A2 -->|1| B2((q2))\n A2 -->|1| B3((q3))\n B1 -->|0| C1((q1))\n B2 -->|0| C2((q3))\n B3 -->|0| C3((q1))\n C1 -->|1| D1((q1))\n C1 -->|1| D2((q2))\n C1 -->|1| D3((q3))\n C2 -->|1| D4((q4))\n C3 -->|1| D5((q4))\n D1 -->|1| E1((q1))\n D2 -->|1| E2((q2))\n D3 -->|1| E3((q3))\n D4 -->|1| E4((q4))\n D5 -->|1| E5((q4))\n\n %% NFA diagram on the right\n subgraph NFA\n direction LR\n Q1((q1)) -->|1| Q2((q2))\n Q2 -->|\"0, \u03b5\"| Q3((q3))\n Q3 -->|1| Q4((q4))\n Q1 -->|0,1| Q1\n Q4 -->|0,1| Q4\n end\n```\n\n* Symbol read and states:\n\n| Symbol read | States at this step |\n|-------------|---------------------------------------------|\n| Start | q\u2081 |\n| 0 | q\u2081 |\n| 1 | q\u2081, q\u2082, q\u2083 |\n| 0 | q\u2081, q\u2083 |\n| 1 | q\u2081, q\u2082, q\u2083, q\u2084 |\n| 1 | q\u2081, q\u2082, q\u2083, q\u2084, q\u2084 |\n\n----\n\nThumrongsak Kosiyatrakul `tkosiyat@cs.pitt.edu` \nFinite Automata 03", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1361, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "95a6c872-151d-4014-aa31-2437d61168f4": {"__data__": {"id_": "95a6c872-151d-4014-aa31-2437d61168f4", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "140c7a6d-d3b2-4654-94da-9c360bd4924a", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "963c02b91a3e4699d96f09cd2d277b61407c457ce1fd0967df794a710800072b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Compute an NFA (Computational Tree)\n\n* Computation of the machine on input `010110`\n\n----\n\n### Computational Tree for the input `010110`\n\n| Symbol read | | | | | | |\n|-------------|-------|-------|-------|-------|-------|-------|\n| | | | | | | |\n| 0 | | | | | | |\n| | | | | | | |\n| | | | | | | |\n| | | | | | | |\n| | | | | | | |\n\n```mermaid\ngraph TD\n A1((q1)) --> A2((q1))\n A2 --> B1((q1))\n A2 --> B2((q2))\n A2 --> B3((q3))\n B1 --> C1((q1))\n B1 --> C2((q2))\n B1 --> C3((q3))\n B2 --> C4((q3))\n B3 --> C5((q4))\n C1 --> D1((q1))\n C2 --> D2((q2))\n C3 --> D3((q3))\n C4 --> D4((q4))\n C5 --> D5((q4))\n D1 --> E1((q1))\n D2 --> E2((q3))\n D4 --> E3((q4))\n D5 --> E4((q4))\n```\n\n----\n\n### NFA Diagram\n\n```mermaid\nstateDiagram-v2\n [*] --> q1\n q1 --> q1: 0,1\n q1 --> q2: 1\n q2 --> q3: 0, \u03b5\n q3 --> q4: 1\n q4 --> q4: 0,1\n q4: accept\n```\n\n----\n\n> If there is at least one copy in an accept state, the machine accepts the input string.\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 03", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1391, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dab178e8-44d6-4ed4-8d29-b250367ee35a": {"__data__": {"id_": "dab178e8-44d6-4ed4-8d29-b250367ee35a", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3fd70f57-777c-4642-8892-0ffefdcd50e6", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "8df0828326c77529d7d48dc4d800d2af623c3c2dc9d7c12117793f2cc7d30a81", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Let \\( A \\) be the language consisting of all strings over \\(\\{0,1\\}\\) containing a 1 in the third position from the end (e.g., 000100 is in \\( A \\) but 0011 is not in \\( A \\)).\n\n* Design a DFA for this problem is quite complicate \n* Design an NFA is easier\n\n```mermaid\nstateDiagram-v2\n [*] --> q1\n q1: 0,1\n q1 --> q1: 0,1\n q1 --> q2: 1\n q2 --> q3: 0,1\n q3 --> q4: 0,1\n state q4 {\n <>\n }\n```\n\n* The transition from \\( q_1 \\) to \\( q_2 \\) is our guess that this is the 1 in the third position from the end. \n* If our guess is wrong: \n - The input string is shorter, it will end at reject state. \n - The input string is longer, the machine will die but other one remains alive.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 733, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "232f7354-00ee-4af3-b01d-62e2a6cf1a21": {"__data__": {"id_": "232f7354-00ee-4af3-b01d-62e2a6cf1a21", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3b30874b-f2b3-416b-9e10-2f652fab7ae2", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "3df0b8589384b6b12b8782d0b90925dbd9293f9fce291bdbe44796f744d2ad67", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* An equivalent DFA machine\n\n```mermaid\nstateDiagram-v2\n direction LR\n [*] --> q000\n q000: q_{000}\n q000 --> q000: 0\n q000 --> q001: 1\n\n q001: q_{001}\n q001 --> q100: 1\n q001 --> q010: 0\n q001 --> q000: 1\n\n q100: q_{100}\n q100 --> q000: 0\n q100 --> q001: 1\n\n q010: q_{010}\n q010 --> q100: 0\n q010 --> q101: 1\n\n q101: q_{101}\n q101 --> q011: 1\n q101 --> q110: 0\n q101 --> q010: 0\n\n q011: q_{011}\n q011 --> q111: 1\n q011 --> q101: 0\n\n q111: q_{111}\n q111 --> q110: 0\n q111 --> q111: 1\n\n q110: q_{110}\n q110 --> q100: 0\n q110 --> q111: 0\n```\n\n* Name states according to the last three symbols", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 685, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1a4ccf2d-69b0-4c6a-b47b-cbcd8656fb08": {"__data__": {"id_": "1a4ccf2d-69b0-4c6a-b47b-cbcd8656fb08", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "487b3eb8-8cab-406c-8060-a2e6e36a8ad8", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "f9c89f2c8c196f5efb1e9b04968d02ef5290916efa81b68b2b5527e42b5ab462", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Suppose the alphabet \\(\\Sigma\\) is \\(\\{0\\}\\). Design a machine that recognizes the language \\(A\\) where \\(A\\) is an empty string or all strings over \\(\\Sigma\\) that their length is a multiple of 2 or 3.\n\n```mermaid\nstateDiagram-v2\n [*] --> S0\n S0: (start, accept)\n S1: (accept)\n S0 --> S1: 0\n S1 --> S0: 0\n```\n\n(Note: The diagram above shows a two-state machine with states S0 and S1. S0 is the start and accepting state. There are transitions labeled \"0\" going from S0 to S1 and from S1 back to S0.)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 529, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9da2d37c-95b6-4260-aa56-f9a6e39fb71a": {"__data__": {"id_": "9da2d37c-95b6-4260-aa56-f9a6e39fb71a", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bcc9a12f-2bce-4e9b-b756-a2b1d08dad75", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "bc55d83ab8ce0481d21a453d217570cb59f7a7ef10d5c5795d2f8439d523f603", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Suppose the alphabet \\(\\Sigma\\) is \\(\\{0\\}\\). Design a machine that recognizes the language \\(A\\) where \\(A\\) is an empty string or all strings over \\(\\Sigma\\) that their length is a multiple of 2 or 3.\n\n```mermaid\nstateDiagram-v2\n [*] --> S0\n S0: (accepting)\n S1: (accepting)\n S2: \n S3: \n S4: (accepting)\n S5: \n S0 --> S1: 0\n S1 --> S0: 0\n S0 --> S3: 0\n S3 --> S4: 0\n S4 --> S5: 0\n S5 --> S3: 0\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 452, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "739158d1-2fb3-4caa-83c4-ef42559e09c9": {"__data__": {"id_": "739158d1-2fb3-4caa-83c4-ef42559e09c9", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0a0fc459-8fe1-4b48-a380-b63513da438d", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "f83a9a6a596accb5e159394585bde639cc904f5adcbb49f33f14c253707ac44b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n> Suppose the alphabet \\(\\Sigma\\) is \\(\\{0\\}\\). Design a machine that recognizes the language \\(A\\) where \\(A\\) is an empty string or all strings over \\(\\Sigma\\) that their length is a multiple of 2 or 3.\n\n```mermaid\nstateDiagram-v2\n [*] --> S0\n S0: (accepting)\n S0 --> S1: 0\n S1 --> S0: 0\n\n S0 --> T0: \u03b5\n T0: (accepting)\n T0 --> T1: 0\n T1 --> T2: 0\n T2 --> T0: 0\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 406, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bb35196e-acec-44d3-94b4-03f4ba22373b": {"__data__": {"id_": "bb35196e-acec-44d3-94b4-03f4ba22373b", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "36bfac59-dc60-465f-b915-1005e705be87", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "103fc844153a0346be4275221de5294dccd6cecb4475e86c98a23ad5b59ca2a7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Formal Definition of A Nondeterministic Finite Automaton\n\nA **nondeterministic finite automaton** is a 5-tuple\n\n$$\n(Q, \\Sigma, \\delta, q_0, F)\n$$\n\n1. \\( Q \\) is a finite set of states \n2. \\( \\Sigma \\) is a finite alphabet \n3. \\( \\delta : Q \\times \\Sigma_{\\varepsilon} \\to \\mathcal{P}(Q) \\) is the transition function, \n - \\( \\Sigma_{\\varepsilon} = \\Sigma \\cup \\{\\varepsilon\\} \\) and \n - \\( \\mathcal{P}(Q) \\) is the **powerset** of \\( Q \\) (set of set of states). \n4. \\( q_0 \\in Q \\) is the start state \n5. \\( F \\subseteq Q \\) is the set of accept states.\n\n**Notes** \n* In an NFA, one input symbol can change the state of the machine to multiple states. \n - Split to multiple copies with different current states \n - Example: \\( \\delta(q_0, 1) = \\{q_0, q_1\\} \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 778, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "03875b2e-46aa-448c-a638-f3b4d34d686b": {"__data__": {"id_": "03875b2e-46aa-448c-a638-f3b4d34d686b", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a74c4f60-ea99-49c7-a20a-06789922b60b", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "1c4e6d0030bae7670f170047aec5344f92b14830a8a5f215cbab01f02a3eefc5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\nDiagram of states and transitions:\n\n- States: \\( q_1, q_2, q_3, q_4 \\)\n- Transitions:\n - From \\( q_1 \\):\n - Loop on input 0 or 1 back to \\( q_1 \\)\n - On input 1 to \\( q_2 \\)\n - From \\( q_2 \\):\n - On input 0 or \\(\\varepsilon\\) to \\( q_3 \\)\n - From \\( q_3 \\):\n - On input 1 to \\( q_4 \\)\n - From \\( q_4 \\):\n - Loop on input 0 or 1 back to \\( q_4 \\)\n\n----\n\n* \\( Q = \\{ q_1, q_2, q_3, q_4 \\} \\)\n* \\( \\Sigma = \\{0, 1\\} \\) and \\( \\Sigma_{\\varepsilon} = \\{0, 1, \\varepsilon\\} \\)\n* \\( \\delta \\) is given as\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n \n
\\(\\delta\\)01\\(\\varepsilon\\)
\\(q_1\\)\\(\\{q_1\\}\\)\\(\\{q_1, q_2\\}\\)\\(\\emptyset\\)
\\(q_2\\)\\(\\{q_3\\}\\)\\(\\emptyset\\)\\(\\{q_3\\}\\)
\\(q_3\\)\\(\\emptyset\\)\\(\\{q_4\\}\\)\\(\\emptyset\\)
\\(q_4\\)\\(\\{q_4\\}\\)\\(\\{q_4\\}\\)\\(\\emptyset\\)
\n\n* We treat \\(\\varepsilon\\) as a regular input symbol\n* If there is no \\(\\varepsilon\\) transitions, we can ignore the \\(\\varepsilon\\) column\n* \\( q_1 \\) is the start state\n* \\( F = \\{ q_4 \\} \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1315, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6b41a10c-13f5-4d44-8080-8ff81315e875": {"__data__": {"id_": "6b41a10c-13f5-4d44-8080-8ff81315e875", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fec25271-d813-41b3-b484-99b53b8fccfb", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "6d1273455ccbef88a6266475b6d5066b07b3eb3d0ac70320661028beb4fa0964", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# NFA and DFA\n\n* NFA is a slightly different computation model compared to DFA\n - NFA can split into multiple copies\n - NFA may have \\( \\varepsilon \\) transitions\n* Is there a language that can be recognized by an NFA but cannot be recognized by any DFAs?\n* In theory of computation, we try to see whether we can capture the behavior of an NFA using a DFA", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 358, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3e7ffe36-12db-4f88-b6e4-3b5ad7af0b1d": {"__data__": {"id_": "3e7ffe36-12db-4f88-b6e4-3b5ad7af0b1d", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dd0a9c1d-115f-466a-bf74-24eeb03a0ba3", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "6e672954390577b454118d671d77585a85642d7d0e7a1ba7ef0f3e4dd758864e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a56c9b23-c481-44bf-bc26-f353c0d3847c", "node_type": "1", "metadata": {}, "hash": "b67f087f88418332f9e146396243b1106f295415a0d31eda929d02d4a0993f41", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Simulating and NFA with a DFA\n\n*Simulate 010110*\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\u03b401\u03b5
q1{q1}{q1, q2}\u2205
q2{q3}\u2205{q3}
q3\u2205{q4}\u2205
q4{q4}{q4}\u2205
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
StateTransition/InputNext State(s)Set RepresentationResulting Set
q1Start{q1}= {q1}
q10q1= {q1}
q11q1, q2, q3{q1, q2, q3}= {q1, q2, q3}
0q1, q3{q1} \u222a {q3} \u222a \u2205= {q1, q3}
1q1, q2, q3, q4{q1, q2, q3} \u222a {q4}= {q1, q2, q3, q4}
1q1, q2, q3, q4{q1, q2, q3} \u222a \u2205 \u222a {q4} \u222a {q4}= {q1, q2, q3, q4}
0q1, q3, q4{q1} \u222a {q3} \u222a \u2205 \u222a {q4} \u222a {q4}= {q1, q3,", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1995, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a56c9b23-c481-44bf-bc26-f353c0d3847c": {"__data__": {"id_": "a56c9b23-c481-44bf-bc26-f353c0d3847c", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "dd0a9c1d-115f-466a-bf74-24eeb03a0ba3", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "6e672954390577b454118d671d77585a85642d7d0e7a1ba7ef0f3e4dd758864e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3e7ffe36-12db-4f88-b6e4-3b5ad7af0b1d", "node_type": "1", "metadata": {"page_number": 19, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "2bafbe39f8438d4fcbbabf0b809d85cb373fccff16b3671f3fa07fbdb34156c7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "q2, q3} \u222a \u2205 \u222a {q4} \u222a {q4}= {q1, q2, q3, q4}
0q1, q3, q4{q1} \u222a {q3} \u222a \u2205 \u222a {q4} \u222a {q4}= {q1, q3, q4}
\n\n[The diagram on the page shows a tree-like structure of states and transitions simulating the NFA with a DFA for the input string 010110, illustrating the subset construction method.]\n\n----\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 03", "mimetype": "text/plain", "start_char_idx": 1644, "end_char_idx": 2298, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c8ee41d4-888f-4964-ba60-aae034fed8dd": {"__data__": {"id_": "c8ee41d4-888f-4964-ba60-aae034fed8dd", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b6b592f8-7b24-4370-a06c-86013706fef3", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "b5fbe9cff189031aa7a61b5883dcb91a35fd179cbbeb56bd5cdfff47ad79dcf9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Equivalence of NFAs and DFAs\n\n> Every nondeterministic finite automaton has an equivalent deterministic finite automaton.\n\n* Let \\( N = (Q, \\Sigma, \\delta, q_0, F) \\) be the NFA recognizing some language \\( A \\)\n* We are going to construct a DFA \\( M = (Q', \\Sigma, \\delta', q_0', F') \\) recognizing \\( A \\)\n* Let\u2019s consider the case where \\( N \\) has no \\(\\varepsilon\\) transitions.\n 1. \\( Q' = \\mathcal{P}(Q) \\)\n 2. \\( \\delta'(R, a) = \\bigcup_{r \\in R} \\delta(r, a) \\)\n 3. \\( q_0' = \\{ q_0 \\} \\)\n 4. \\( F' = \\{ R \\in Q' \\mid R \\text{ contains an accept state of } N \\} \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 580, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "dd0adeb3-984c-4b58-913f-ee347afc4bee": {"__data__": {"id_": "dd0adeb3-984c-4b58-913f-ee347afc4bee", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "7b5d463d-d3de-4791-a2fe-4a4dff9bb6b7", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "8f093cdb5c891ff7e56572b3751b40d100fcd4f677278b0b486b48bb3fdc4da2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Let \\(\\Sigma\\) be \\(\\{0, 1\\}\\). The following NFA \\(N\\) recognizes the language \\(A\\) where \\(A\\) is a set of strings that end with a 1.\n\n```\n 0, 1\n \u21bb\n (q_0) ----1----> ((q_1))\n```\n\n* \\(N = (Q, \\Sigma, \\delta, q_0, F)\\)\n 1. \\(Q = \\{q_0, q_1\\}\\),\n 2. \\(\\Sigma = \\{0, 1\\}\\)\n 3. \\(\\delta\\) is given as\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n \n
01
\\(q_0\\)\\(\\{q_0\\}\\)\\(\\{q_0, q_1\\}\\)
\\(q_1\\)\\(\\emptyset\\)\\(\\emptyset\\)
\n\n 4. \\(q_0\\) is the start state \n 5. \\(F = \\{q_1\\}\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 687, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9bbd0c3b-82cd-4e5e-bc4b-01fdcae31938": {"__data__": {"id_": "9bbd0c3b-82cd-4e5e-bc4b-01fdcae31938", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3c91e7e0-16a3-4ccd-b7ab-d0d8c4d7eb5e", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "0747b76c809224a95f1e50cd6745e41e89dcb1f653251cc1892e2b0d1941553b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Construct a DFA \\( M = (Q', \\Sigma, \\delta', q'_0, F') \\)\n * \\( Q' = \\mathcal{P}(Q) = \\mathcal{P}(\\{q_0, q_1\\}) \\)\n \n $$\n Q' = \\{\\emptyset, \\{q_0\\}, \\{q_1\\}, \\{q_0, q_1\\}\\}\n $$\n\n* We will construct \\(\\delta'\\) later\n* \\( q'_0 = \\{q_0\\} \\) where \\( q_0 \\) is the start state of the NFA\n* \\( F' = \\{ R \\in Q' \\mid R \\text{ contains an accept state of } N \\} \\)\n\n $$\n F' = \\{\\{q_1\\}, \\{q_0, q_1\\}\\}\n $$\n\nwhere \\( F = \\{q_1\\} \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 446, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "590e7498-f4a9-4b9a-b8e7-56688901f0b4": {"__data__": {"id_": "590e7498-f4a9-4b9a-b8e7-56688901f0b4", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a8d0ae09-ac89-4e73-8aef-8b45d3e55522", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "83510d7fc4669041068da7917eca48e48f3e76c9c55838d38b153a7e707494d5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Let\u2019s focus on transition functions\n* The transition function \\(\\delta\\) of the NFA is as follows:\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n \n
01
\\(q_0\\){\\(q_0\\)}{\\(q_0, q_1\\)}
\\(q_1\\)\u2205\u2205
\n\n* Recall that the set of state of the equivalent DFA is the power set of set of state of the NFA\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
\\(\\delta'\\)01
\u2205\u2205\u2205
{\\(q_0\\)}{\\(q_0\\)}{\\(q_0, q_1\\)}
{\\(q_1\\)}\u2205\u2205
{\\(q_0, q_1\\)}{\\(q_0\\)}{\\(q_0, q_1\\)}
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 915, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5a3b743a-33a7-4c1e-ba74-9f532f407616": {"__data__": {"id_": "5a3b743a-33a7-4c1e-ba74-9f532f407616", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0382de30-f2cc-4207-b40e-c03dd9526da7", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "c1e93070056ae007c9576869da4fc3061b0ec2ac7369bd03b4765ef940a844c7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Machine \\( M = (Q', \\Sigma, \\delta', q'_0, F') \\) equivalent to \\( N \\) can be defined as follows:\n * \\( Q' = \\mathcal{P}(Q) = \\{\\emptyset, \\{q_0\\}, \\{q_1\\}, \\{q_0, q_1\\}\\} \\),\n * \\[\n \\delta'(R, a) = \\bigcup_{r \\in R} \\delta(r, a)\n \\]\n * \\[\n \\delta'(\\emptyset, 0) = \\bigcup_{r \\in \\emptyset} \\delta(r, 0) = \\emptyset\n \\]\n * \\[\n \\delta'(\\emptyset, 1) = \\bigcup_{r \\in \\emptyset} \\delta(r, 1) = \\emptyset\n \\]\n * \\[\n \\delta'(\\{q_0\\}, 0) = \\bigcup_{r \\in \\{q_0\\}} \\delta(r, 0) = \\delta(q_0, 0) = \\{q_0\\}\n \\]\n * \\[\n \\delta'(\\{q_0\\}, 1) = \\bigcup_{r \\in \\{q_0\\}} \\delta(r, 1) = \\delta(q_0, 1) = \\{q_0, q_1\\}\n \\]\n * \\[\n \\delta'(\\{q_1\\}, 0) = \\bigcup_{r \\in \\{q_1\\}} \\delta(r, 0) = \\delta(q_1, 0) = \\emptyset\n \\]\n * \\[\n \\delta'(\\{q_1\\}, 1) = \\bigcup_{r \\in \\{q_1\\}} \\delta(r, 1) = \\delta(q_1, 1) = \\emptyset\n \\]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 867, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "08cbe4ad-c49a-4959-8a6d-c8e9d9f9461c": {"__data__": {"id_": "08cbe4ad-c49a-4959-8a6d-c8e9d9f9461c", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "68f337d1-3425-4e8c-b46e-e92da8276b9b", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "cec95f7763c417cd394fcd731b12ded8444afede5b728ff0052b96e23e723970", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Machine \\( M \\) (Continue)\n * \\( \\delta' \\) (Continue)\n * \n $$\n \\delta'(\\{q_0, q_1\\}, 0) = \\bigcup_{r \\in \\{q_0, q_1\\}} \\delta(r, 0) = \\delta(q_0, 0) \\cup \\delta(q_1, 0) = \\{q_0\\} \\cup \\emptyset = \\{q_0\\}\n $$\n * \n $$\n \\delta'(\\{q_0, q_1\\}, 1) = \\bigcup_{r \\in \\{q_0, q_1\\}} \\delta(r, 1) = \\delta(q_0, 1) \\cup \\delta(q_1, 1) = \\{q_0, q_1\\} \\cup \\emptyset = \\{q_0, q_1\\}\n $$\n* Thus \\( \\delta' \\) is given by\n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n\n \n\n\n \n\n \n\n\n \n\n \n\n\n \n \n
\\( \\delta' \\)01
\u2205\u2205\u2205
{\\( q_0 \\)}{\\( q_0 \\)}{\\( q_0, q_1 \\)}
{\\( q_1 \\)}\u2205\u2205
{\\( q_0, q_1 \\)}{\\( q_0 \\)}{\\( q_0, q_1 \\)}
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 891, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d2121c03-ca57-4920-930d-2806d96a5540": {"__data__": {"id_": "d2121c03-ca57-4920-930d-2806d96a5540", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "376f03af-7831-4263-944f-067a8a739610", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "1a0958f4b16b9d54b29fc0e261cc4a6d3ce72975e0b33c9dad58d66f6596f5b7", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* The state diagram of the machine \n $$ M = (Q', \\Sigma, \\delta', q'_0, F') $$\n equivalent to \n $$ N \\quad (L(M) = L(N)) $$\n is shown below:\n\n```mermaid\nstateDiagram-v2\n [*] --> q0\n q0: {q_0}\n q0 --> q0: 0\n q0 --> q01: 1\n q01: {q_0, q_1}\n q01 --> q0: 0\n q01 --> q01: 1\n q1: {q_1}\n q1 --> empty: 0\n q1 --> empty: 1\n empty: \u2205\n empty --> empty: 0\n empty --> empty: 1\n```\n\n* Without bottom part, it is the same as one of our previous example\n* It is okay for a DFA to have unreachable states", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 542, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "76adf11d-d524-4787-bbd0-a77a5bdfd853": {"__data__": {"id_": "76adf11d-d524-4787-bbd0-a77a5bdfd853", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "65963bed-bac0-49d6-a9de-d65a242db975", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "8cd784aa4d48e655be915ccd3fba59998b2e17301bd029042a9c966046bc2b50", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# NFA to DFA with \\(\\varepsilon\\) Symbol\n\n* Let \\(E(R)\\) be the collection of states that can be reached from members of \\(R\\) by going only along \\(\\varepsilon\\) arrows, including the members of \\(R\\) themselves. \n $$\n E(R) = \\{ q \\mid q \\text{ can be reached from } R \\text{ by travel along } 0 \\text{ or more } \\varepsilon \\text{ arrows} \\}\n $$\n\n* Note that a state \\(q\\) can be reached from its own state \\(q\\) by travel along no \\(\\varepsilon\\) arrow \\(\\left(R \\subseteq E(R)\\right)\\).\n\n* Example:\n\n```mermaid\nstateDiagram-v2\n [*] --> q1\n q1 --> q1: 0, 1\n q1 --> q2: 1\n q2 --> q3: 0, \\varepsilon\n q3 --> q4: 1\n q4 --> q4: 0, 1\n state q4 <>\n```\n\n* \\(E(\\{q_1\\}) = \\{q_1\\}\\) \n* \\(E(\\{q_2\\}) = \\{q_2, q_3\\}\\) \n* \\(E(\\{q_1, q_2\\}) = \\{q_1, q_2, q_3\\}\\) \n* \\(E(\\{q_1, q_3\\}) = \\{q_1, q_3\\}\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 827, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7cb02807-3a6b-4322-a1d6-d8aece2f2bf7": {"__data__": {"id_": "7cb02807-3a6b-4322-a1d6-d8aece2f2bf7", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b43b6e13-0f5a-425d-9275-2729a955c844", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "c6c9bc3ee5d9f30cf1695a0fd22eab041c9618e6f331837b21fc5ef28bb20d04", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# NFA to DFA with \\(\\varepsilon\\) Symbol\n\n* Let NFA \\(N = (Q, \\Sigma, \\delta, q_0, F)\\) with \\(\\varepsilon\\) transitions that recognizes a language \\(A\\).\n* We can construct a DFA \\(M = (Q', \\Sigma, \\delta', q'_0, F')\\) as\n 1. \\(Q' = \\mathcal{P}(Q)\\)\n 2. \\(\\delta'\\) is given by \n $$\n \\delta'(R, a) = \\bigcup_{r \\in R} E(\\delta(r, a))\n $$\n 3. \\(q'_0 = E(\\{q_0\\})\\) \n - If \\(q_0\\) has no exiting arrow for \\(\\varepsilon\\), then \\(q'_0 = \\{q_0\\}\\)\n 4. \\(F' = \\{ R \\in Q' \\mid R \\text{ contains an accept state of } N \\}\\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 533, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5dcc40da-7eb2-472b-b22c-6775eb440a35": {"__data__": {"id_": "5dcc40da-7eb2-472b-b22c-6775eb440a35", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "29c3b60a-bb82-4527-bde0-350a15fbae8f", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "ca5418686c1e3d287b5a76af89ed8e68449fde8f9a34cf6c79c09ba8c2b09979", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Consider the following NFA machine:\n\nStates and transitions diagram:\n\n- State 1 (initial and accepting state) has:\n - a transition labeled **b** to state 2\n - an epsilon (\u03b5) transition to state 3\n- State 2 has:\n - a loop on **a**\n - a transition labeled **a, b** to state 3\n- State 3 has:\n - a transition labeled **a** back to state 1\n\n$$\nN = (Q, \\Sigma, \\delta, q_0, F)\n$$\n\n* \\( Q = \\{1, 2, 3\\} \\)\n* \\( \\Sigma = \\{a, b\\} \\)\n* \\( \\delta \\) is given by\n\n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n \n \n
ab\u03b5
1\u2205{2}{3}
2{2, 3}{3}\u2205
3{1}\u2205\u2205
\n\n* \\( q_0 = 1 \\)\n* \\( F = \\{1\\} \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 863, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c5c359ca-e3cd-4bfc-a33d-1c1a7d0f1599": {"__data__": {"id_": "c5c359ca-e3cd-4bfc-a33d-1c1a7d0f1599", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3d053e94-cef1-4380-b5b1-e0b0d51c5222", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "6a768b6a239b2a2002c157ba75ecc5064deb53590ce980171d0bdf5f9ff2f68b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Machine \\( M = (Q', \\Sigma, \\delta', q'_0, F') \\) equivalent to \\( N \\):\n * \\( Q' = \\mathcal{P}(Q) = \\mathcal{P}(\\{1, 2, 3\\}) \\)\n \n $$\n Q' = \\{\\emptyset, \\{1\\}, \\{2\\}, \\{3\\}, \\{1, 2\\}, \\{1, 3\\}, \\{2, 3\\}, \\{1, 2, 3\\}\\}\n $$\n\n* Start state is \\( E(\\{1\\}) = \\{1, 3\\} \\)\n* \\( F' \\) is a set of sets of states that contain accept states of \\( N \\) (\\( F = \\{1\\} \\)).\n\n $$\n F' = \\{\\{1\\}, \\{1, 2\\}, \\{1, 3\\}, \\{1, 2, 3\\}\\}\n $$\n\n* Transition function:\n\n $$\n \\delta'(R, a) = \\bigcup_{r \\in R} E(\\delta(r, a))\n $$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 528, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "14d5d01f-e73e-40d1-846f-b207bf893c48": {"__data__": {"id_": "14d5d01f-e73e-40d1-846f-b207bf893c48", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "313d1cc0-c831-4786-a0da-932c1fc8bc88", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "64722774738db271b53fc3429d9da7c2bdeb25e754a9605050ca5effef5e022c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Let\u2019s focus on transition functions \n* The transition function \\(\\delta\\) of the NFA is as follows:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\\(\\delta\\)ab\\(\\varepsilon\\)
1\u2205{2}{3}
2{2, 3}{3}\u2205
3{1}\u2205\u2205
\n\n* Recall that the set of state of the equivalent DFA is the power set of set of state of the NFA\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\\(\\delta'\\)ab
\u2205\u2205\u2205
{1}\u2205{2}
{2}{2, 3}{3}
{3}{1, 3}\u2205
{1, 2}{2, 3}{2, 3}
{1, 3}{1, 3}{2}
{2, 3}{1, 2, 3}{3}
{1, 2, 3}{1, 2, 3}{2, 3}
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1061, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "edd13447-bbd1-4ad7-ad95-8d1c79ba38c0": {"__data__": {"id_": "edd13447-bbd1-4ad7-ad95-8d1c79ba38c0", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "35a7a5d5-29d2-44dd-9aa5-27639f970e07", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "da3a9c4f1501aad098b811d5f867bae796d759e508624282d2510b714fd31106", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Machine \\( M \\)'s \\(\\delta'\\)\n\n$$\n\\begin{aligned}\n\\delta'(\\emptyset, a) &= \\bigcup_{r \\in \\emptyset} E(\\delta(r, a)) \\\\\n&= \\emptyset \\\\\n\\\\\n\\delta'(\\emptyset, b) &= \\bigcup_{r \\in \\emptyset} E(\\delta(r, b)) \\\\\n&= \\emptyset \\\\\n\\\\\n\\delta'(\\{1\\}, a) &= \\bigcup_{r \\in \\{1\\}} E(\\delta(r, a)) \\\\\n&= E(\\delta(1, a)) \\\\\n&= E(\\emptyset) \\\\\n&= \\emptyset \\\\\n\\\\\n\\delta'(\\{1\\}, b) &= \\bigcup_{r \\in \\{1\\}} E(\\delta(r, b)) \\\\\n&= E(\\delta(1, b)) \\\\\n&= E(\\{2\\}) \\\\\n&= \\{2\\} \\\\\n\\\\\n\\delta'(\\{2\\}, a) &= \\bigcup_{r \\in \\{2\\}} E(\\delta(r, a)) \\\\\n&= E(\\delta(2, a)) \\\\\n&= E(\\{2, 3\\}) \\\\\n&= \\{2, 3\\} \\\\\n\\\\\n\\delta'(\\{2\\}, b) &= \\bigcup_{r \\in \\{2\\}} E(\\delta(r, b)) \\\\\n&= E(\\delta(2, b)) \\\\\n&= E(\\{3\\}) \\\\\n&= \\{3\\} \\\\\n\\\\\n\\delta'(\\{3\\}, a) &= \\bigcup_{r \\in \\{3\\}} E(\\delta(r, a)) \\\\\n&= E(\\delta(3, a)) \\\\\n&= E(\\{1\\}) \\\\\n&= \\{1, 3\\} \\\\\n\\\\\n\\delta'(\\{3\\}, b) &= \\bigcup_{r \\in \\{3\\}} E(\\delta(r, b)) \\\\\n&= E(\\delta(3, b)) \\\\\n&= E(\\emptyset) \\\\\n&= \\emptyset \\\\\n\\\\\n\\delta'(\\{1, 2\\}, a) &= \\bigcup_{r \\in \\{1, 2\\}} E(\\delta(r, a)) \\\\\n&= E(\\delta(1, a)) \\cup E(\\delta(2, a)) \\\\\n&= \\emptyset \\cup \\{2, 3\\} \\\\\n&= \\{2, 3\\}\n\\end{aligned}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1109, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e01af6d8-e78f-4b51-b017-6a668eaca36e": {"__data__": {"id_": "e01af6d8-e78f-4b51-b017-6a668eaca36e", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "14b6087f-7eb1-4559-b618-81303dba6bad", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "3dc43d13c7342ff5e7d0ede427e23bdf18e9f2f8f345043c3e0ff38d18a0aa54", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "$$\n\\text{Machine } M \\text{'s } \\delta'\n$$\n\n$$\n\\begin{aligned}\n\\delta'(\\{1, 2\\}, b) &= \\bigcup_{r \\in \\{1,2\\}} E(\\delta(r, b)) \\\\\n&= E(\\delta(1, b)) \\cup E(\\delta(2, b)) \\\\\n&= \\{2\\} \\cup \\{3\\} \\\\\n&= \\{2, 3\\}\n\\end{aligned}\n$$\n\n$$\n\\begin{aligned}\n\\delta'(\\{1, 3\\}, a) &= \\bigcup_{r \\in \\{1,3\\}} E(\\delta(r, a)) \\\\\n&= E(\\delta(1, a)) \\cup E(\\delta(3, a)) \\\\\n&= \\emptyset \\cup \\{1, 3\\} \\\\\n&= \\{1, 3\\}\n\\end{aligned}\n$$\n\n$$\n\\begin{aligned}\n\\delta'(\\{1, 3\\}, b) &= \\bigcup_{r \\in \\{1,3\\}} E(\\delta(r, b)) \\\\\n&= E(\\delta(1, b)) \\cup E(\\delta(3, b)) \\\\\n&= \\{2\\} \\cup \\emptyset \\\\\n&= \\{2\\}\n\\end{aligned}\n$$\n\n$$\n\\begin{aligned}\n\\delta'(\\{2, 3\\}, a) &= \\bigcup_{r \\in \\{2,3\\}} E(\\delta(r, a)) \\\\\n&= E(\\delta(2, a)) \\cup E(\\delta(3, a)) \\\\\n&= \\{2, 3\\} \\cup \\{1, 3\\} \\\\\n&= \\{1, 2, 3\\}\n\\end{aligned}\n$$\n\n$$\n\\begin{aligned}\n\\delta'(\\{2, 3\\}, b) &= \\bigcup_{r \\in \\{2,3\\}} E(\\delta(r, b)) \\\\\n&= E(\\delta(2, b)) \\cup E(\\delta(3, b)) \\\\\n&= \\{3\\} \\cup \\emptyset \\\\\n&= \\{3\\}\n\\end{aligned}\n$$\n\n$$\n\\begin{aligned}\n\\delta'(\\{1, 2, 3\\}, a) &= \\bigcup_{r \\in \\{1,2,3\\}} E(\\delta(r, a)) \\\\\n&= E(\\delta(1, a)) \\cup E(\\delta(2, a)) \\cup E(\\delta(3, a)) \\\\\n&= \\emptyset \\cup \\{2, 3\\} \\cup \\{1, 3\\} \\\\\n&= \\{1, 2, 3\\}\n\\end{aligned}\n$$\n\n$$\n\\begin{aligned}\n\\delta'(\\{1, 2, 3\\}, b) &= \\bigcup_{r \\in \\{1,2,3\\}} E(\\delta(r, b)) \\\\\n&= E(\\delta(1, b)) \\cup E(\\delta(2, b)) \\cup E(\\delta(3, b)) \\\\\n&= \\{2\\} \\cup \\{3\\} \\cup \\emptyset \\\\\n&= \\{2, 3\\}\n\\end{aligned}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1426, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "17650171-9692-484b-8800-0431b1999129": {"__data__": {"id_": "17650171-9692-484b-8800-0431b1999129", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9023d277-fae0-45f5-95a6-6469aed88c6b", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "64c0f27a4094faa1ec28d6d05e113fec6171be77417065a27cb5765643c7f395", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Example\n\n* Recall the transition function of \\( M \\)\n\n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n
ab
\u2205\u2205\u2205
{1}\u2205{2}
{2}{2, 3}{3}
{3}{1, 3}\u2205
{1, 2}{2, 3}{2, 3}
{1, 3}{1, 3}{2}
{2, 3}{1, 2, 3}{3}
{1, 2, 3}{1, 2, 3}{2, 3}
\n\n* The state diagram of \\( M \\)\n\n```mermaid\nstateDiagram-v2\n [*] --> \u2205\n \u2205 --> \u2205: a,b\n {1} --> \u2205: a\n {1} --> {2}: b\n {2} --> {2,3}: a\n {2} --> {3}: b\n {3} --> {1,3}: a\n {3} --> \u2205: b\n {1,2} --> {2,3}: a,b\n {1,3} --> {1,3}: a\n {1,3} --> {2}: b\n {2,3} --> {1,2,3}: a\n {2,3} --> {3}: b\n {1,2,3} --> {1,2,3}: a\n {1,2,3} --> {2,3}: b\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 935, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d51528f0-e47c-46ef-a09c-f7fa954bb167": {"__data__": {"id_": "d51528f0-e47c-46ef-a09c-f7fa954bb167", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b94e7616-e08f-459d-b18e-d9c8cccc5c04", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "ad6ee40311646c1db056c9daba05f63c36d295f60408a957ce46eda5f97ac3a2", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Union Operation\n\n- \\(N_1\\) recognizes a regular language \\(A\\)\n- \\(N_2\\) recognizes a regular language \\(B\\)\n- \\(N\\) recognizes \\(A \\cup B\\) \\((A \\cup B \\text{ is regular})\\)\n\n```mermaid\ngraph TD\n subgraph N1\n A1(( )) --> B1(( ))\n C1(( )) --> D1(( ))\n end\n subgraph N2\n A2(( )) --> B2(( ))\n C2(( )) --> D2(( ))\n end\n subgraph N\n start(( )) --> Nstart(( ))\n Nstart --> N1start(( ))\n Nstart --> N2start(( ))\n subgraph N1\n A1(( )) --> B1(( ))\n C1(( )) --> D1(( ))\n end\n subgraph N2\n A2(( )) --> B2(( ))\n C2(( )) --> D2(( ))\n end\n end\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 690, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cb47fab4-3a26-4663-971d-d0b1896002e3": {"__data__": {"id_": "cb47fab4-3a26-4663-971d-d0b1896002e3", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f190840c-f1c7-4a6c-9501-64b2db54a31f", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "9ad9aa86fb9e0e8c4b07e7e23806ff35b36024f51942b09e89299c8a7c63bfcc", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Union Operation\n\n* Let \\( N_1 = (Q_1, \\Sigma, \\delta_1, q_1, F_1) \\) recognizes \\( A_1 \\).\n* Let \\( N_2 = (Q_2, \\Sigma, \\delta_2, q_2, F_2) \\) recognizes \\( A_2 \\).\n* To construct \\( N = (Q, \\Sigma, \\delta, q_0, F) \\) to recognizes \\( A_1 \\cup A_2 \\):\n 1. \\( Q = \\{q_0\\} \\cup Q_1 \\cup Q_2 \\)\n 2. The state \\( q_0 \\) is the start state of \\( N \\)\n 3. The set of accept state \\( F = F_1 \\cup F_2 \\)\n 4. \\( \\delta \\) is given by\n\n$$\n\\delta(q, a) = \\begin{cases}\n\\delta_1(q, a) & q \\in Q_1 \\\\\n\\delta_2(q, a) & q \\in Q_2 \\\\\n\\{q_1, q_2\\} & q = q_0 \\text{ and } a = \\varepsilon \\\\\n\\emptyset & q = q_0 \\text{ and } a \\neq \\varepsilon\n\\end{cases}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 661, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7d7f38d0-f610-414d-95e3-c3c680064ebb": {"__data__": {"id_": "7d7f38d0-f610-414d-95e3-c3c680064ebb", "embedding": null, "metadata": {"page_number": 37, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "849394fc-644f-4569-8500-914171e26ecf", "node_type": "4", "metadata": {"page_number": 37, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "a439bd5607e3850c422f5c02e8f92a4ff0e992ffa5183a001db5616f9b10798c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Union Operation\n\n* Given state diagrams of finite-state machines \\(N_1\\) and \\(N_2\\)\n* To draw a state diagram of a new machine \\(N\\) where\n $$L(N) = L(N_1) \\cup L(N_2):$$\n 1. Draw the state diagram of \\(N_1\\) on the top half \n 2. Draw the state diagram of \\(N_2\\) on the bottom half \n 3. Add a new start state \n 4. Add \\(\\varepsilon\\) transitions from the new start state to the start states of \\(N_1\\) and \\(N_2\\), respectively", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 454, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4a253d66-1583-4cfd-bea9-984528c6e8ab": {"__data__": {"id_": "4a253d66-1583-4cfd-bea9-984528c6e8ab", "embedding": null, "metadata": {"page_number": 38, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b5c10dbe-54b3-4806-8983-d3a98129a858", "node_type": "4", "metadata": {"page_number": 38, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "802a145ecec00c7d07d321229d0935f0052ee1c0213dee2dc123e26c0710045d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Union Operation\n\n* Draw \\( N_1 \\) on the top half\n\n[The image shows a rectangular box labeled \\( N_1 \\) containing several circles, some of which are double-circled, and an arrow pointing to one of the circles inside the box.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 243, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9ca1348c-2def-4c68-a259-7d11d229331a": {"__data__": {"id_": "9ca1348c-2def-4c68-a259-7d11d229331a", "embedding": null, "metadata": {"page_number": 39, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "e356ac61-993e-4364-a94e-f7b445b0a58b", "node_type": "4", "metadata": {"page_number": 39, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "4100937331eb2c9122da8b033e2db2eaf2b7fa152cbff789b2d1d2a02c95119b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Union Operation\n\n* Draw \\( N_2 \\) on the bottom half\n\n[The image shows two rectangular automata diagrams stacked vertically. The top rectangle is labeled \\( N_1 \\) and contains several states represented by circles, with one initial state indicated by an incoming arrow and two double-circled accepting states. The bottom rectangle is labeled \\( N_2 \\) and similarly contains several states with one initial state and three double-circled accepting states.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 474, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9d0b0d10-d046-4e08-bbfe-d3a26db58db9": {"__data__": {"id_": "9d0b0d10-d046-4e08-bbfe-d3a26db58db9", "embedding": null, "metadata": {"page_number": 40, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "73ea29ac-969b-4aeb-9022-a5bd0df59e05", "node_type": "4", "metadata": {"page_number": 40, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "5e81ad0c3cbf834523d751e957f7d86b8fa5ad433a3c735dff620e2d360649e8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Union Operation\n\n* Add new start state\n\n```mermaid\nstateDiagram-v2\n [*] --> NewStart\n state N1 {\n [*] --> S1\n S1 --> F1: double circle\n S2: circle\n S3: circle\n S4: circle\n F1: double circle\n }\n state N2 {\n [*] --> S1\n S2: circle\n S3: circle\n S4: circle\n F1: double circle\n }\n NewStart --> N1.S1\n NewStart --> N2.S1\n```\n\nThumrongsak Kosiyatrakul tkosiyat@cs.pitt.edu \nFinite Automata 03", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 501, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "49162b36-6737-473b-b3a9-7793482ee363": {"__data__": {"id_": "49162b36-6737-473b-b3a9-7793482ee363", "embedding": null, "metadata": {"page_number": 41, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "eac1c32c-3264-4aa1-bf3b-5fc59fa1b043", "node_type": "4", "metadata": {"page_number": 41, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "75dcc93cda9d98aac3b0e1f2baf46440aa1d211b0ea96d35008fffac7ff7728f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Union Operation\n\n* Add \\(\\varepsilon\\) transitions\n\n```mermaid\nstateDiagram-v2\n [*] --> N\n N --> N1 : \\(\\varepsilon\\)\n N --> N2 : \\(\\varepsilon\\)\n\n state N1 {\n [*] --> s1\n s1 --> s2\n s2 --> s3\n s3 --> s4\n s4 --> [*]\n }\n\n state N2 {\n [*] --> t1\n t1 --> t2\n t2 --> t3\n t3 --> t4\n t4 --> [*]\n }\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 403, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8ebc2396-6364-45ad-82ce-dbab340a70ea": {"__data__": {"id_": "8ebc2396-6364-45ad-82ce-dbab340a70ea", "embedding": null, "metadata": {"page_number": 42, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9526bc96-2551-4757-9b96-b103199d49a8", "node_type": "4", "metadata": {"page_number": 42, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "b26eb11960a2073aebcd43375c3e43255e381674b26ddb7bd03d111a54f2a522", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Concatenation Operation\n\n* Let \\( N_1 \\) recognizes \\( A \\) and \\( N_2 \\) recognizes \\( B \\)\n* Given a string \\( w \\), how do we know whether \\( w \\in AB \\)?\n* Recall the definition of \\( AB \\) (A concatenated by \\( B \\))\n\n $$\n AB = \\{ xy \\mid x \\in A \\text{ and } y \\in B \\}\n $$\n\n* For \\( w \\) to be in \\( AB \\), \\( w \\) must be divided into two strings \\( x \\) and \\( y \\) where \\( w = xy \\) such that \\( x \\in A \\) and \\( y \\in B \\)\n * If \\( x \\in A \\), \\( x \\in L(N_1) \\)\n * Since \\( x \\in L(N_1) \\), by simulating \\( N_1 \\) on input \\( x \\), the simulation will end in an accept state of \\( N_1 \\) (\\( N_1 \\) accepts \\( x \\))\n * But if \\( x \\notin A \\), simulation will end in a non-accept state of \\( N_1 \\)\n * If \\( y \\in B \\), \\( y \\in L(N_2) \\)\n * Since \\( y \\in L(N_2) \\), by simulating \\( N_2 \\) on input \\( y \\), the simulation will end in an accept state of \\( N_2 \\) (\\( N_2 \\) accepts \\( y \\))\n * But if \\( y \\notin B \\), simulation will end in a non-accept state of \\( N_2 \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1025, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "58822eb0-35e8-495a-8200-bdf3662c0cce": {"__data__": {"id_": "58822eb0-35e8-495a-8200-bdf3662c0cce", "embedding": null, "metadata": {"page_number": 43, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8ea0761b-9bdc-4d7a-9681-d8639b64bec9", "node_type": "4", "metadata": {"page_number": 43, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "82b406e9396035a5e84e246387d0ae359e704c964dc426bd5474f3e9f3d72376", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Concatenation Operation\n\n- \\(N_1\\) recognizes a regular language \\(A\\)\n- \\(N_2\\) recognizes a regular language \\(B\\)\n- \\(N\\) recognizes \\(AB\\) (\\(AB\\) is regular)\n\n----\n\nDiagram description:\n\n- Two separate automata \\(N_1\\) and \\(N_2\\) are shown.\n- \\(N_1\\) has an initial state with an arrow pointing to it, several intermediate states, and three accepting states.\n- \\(N_2\\) has an initial state with an arrow pointing to it, several intermediate states, and two accepting states.\n- The combined automaton \\(N\\) is shown below, containing both \\(N_1\\) and \\(N_2\\) as subcomponents.\n- The three accepting states of \\(N_1\\) have epsilon (\\(\\epsilon\\)) transitions to the initial state of \\(N_2\\).\n- The initial state of \\(N_1\\) is the initial state of \\(N\\).\n- The accepting states of \\(N_2\\) are the accepting states of \\(N\\).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 842, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e1275809-2525-44a9-bafb-15e14944f645": {"__data__": {"id_": "e1275809-2525-44a9-bafb-15e14944f645", "embedding": null, "metadata": {"page_number": 44, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "32061c73-6c51-4127-9f5e-6bb73e1ea3da", "node_type": "4", "metadata": {"page_number": 44, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "8311d7f8511ffa4ef6dd69df845a8300ba4ab6b4fa8b1a3b409e89b356046ff8", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Concatenation Operation\n\n* Let \\( N_1 = (Q_1, \\Sigma, \\delta_1, q_1, F_1) \\) recognizes \\( A_1 \\).\n* Let \\( N_2 = (Q_2, \\Sigma, \\delta_2, q_2, F_2) \\) recognizes \\( A_2 \\).\n* To construct \\( N = (Q, \\Sigma, \\delta, q_0, F) \\) to recognizes \\( A_1 \\circ A_2 \\):\n 1. \\( Q = Q_1 \\cup Q_2 \\)\n 2. The state \\( q_1 \\) is the start state of \\( N \\)\n 3. The set of accept state \\( F = F_2 \\)\n 4. \\( \\delta \\) is given by\n\n$$\n\\delta(q, a) = \n\\begin{cases}\n\\delta_1(q, a) & q \\in Q_1 \\text{ and } q \\notin F_1 \\\\\n\\delta_2(q, a) & q \\in Q_2 \\text{ and } a \\neq \\varepsilon \\\\\n\\delta_1(q, a) \\cup \\{q_2\\} & q \\in F_1 \\text{ and } a = \\varepsilon \\\\\n\\delta_2(q, a) & q \\in Q_2\n\\end{cases}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 699, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "769c905e-eb1c-4fdf-84f6-14f27e971937": {"__data__": {"id_": "769c905e-eb1c-4fdf-84f6-14f27e971937", "embedding": null, "metadata": {"page_number": 45, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "af10af35-89d4-4899-8f12-81ec55b469f6", "node_type": "4", "metadata": {"page_number": 45, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "99fa66c7ecd5f16c774cdca267b49bc165e022ddb3b121006438d45fb75c2e42", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Concatenation Operation\n\n* Given state diagrams of finite-state machines \\( N_1 \\) and \\( N_2 \\)\n* To draw a state diagram of a new machine \\( N \\) where \n $$ L(N) = L(N_1) \\circ L(N_2) : $$\n 1. Draw the state diagram of \\( N_1 \\) on the left side \n 2. Draw the state diagram of \\( N_2 \\) on the right side \n 3. For every accept state of \\( N_1 \\), add the \\(\\varepsilon\\) transition to the start state of \\( N_2 \\) \n 4. Change all accept states of \\( N_1 \\) to non-accept states", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 505, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bed8fca3-37f1-4a86-af25-385ae63ad65c": {"__data__": {"id_": "bed8fca3-37f1-4a86-af25-385ae63ad65c", "embedding": null, "metadata": {"page_number": 46, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c663017c-a0f0-46d9-8375-9598f20f5bf8", "node_type": "4", "metadata": {"page_number": 46, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "e3ba5cdf5f2f9647e2cd432c3e650090dd7d432b9132aca94983d1a77e68dd64", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Concatenation Operation\n\n* Draw the state diagram of \\( N_1 \\) on the left side\n\n```\n+-----------------------+\n| |\n| N_1 |\n| |\n| ( ) o o |\n| o o o |\n| |\n| ( ) ( ) ( ) (final states) \n| |\n| --> (start state) |\n+-----------------------+\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 412, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "915aeab3-6584-4617-9f58-fc713d80a9dc": {"__data__": {"id_": "915aeab3-6584-4617-9f58-fc713d80a9dc", "embedding": null, "metadata": {"page_number": 47, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d1de82e4-a7a6-4543-9d6d-42a010f1f92f", "node_type": "4", "metadata": {"page_number": 47, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "a9ac0b75a0d942b7e24506163ad055524e2cd354dd5468eb941c5460a1b7c11b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Concatenation Operation\n\n* Draw the state diagram of \\( N_2 \\) on the right side\n\n\n \n \n\n \n
\n \\( N_1 \\)\n
\n [Diagram of \\( N_1 \\) with states and transitions, including an initial state with an incoming arrow, multiple states, and three double-circled accept states on the right side]\n
\n \\( N_2 \\)\n
\n [Diagram of \\( N_2 \\) with states and transitions, including an initial state with an incoming arrow, multiple states, and two double-circled accept states on the right side]\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 582, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "79e3792a-83eb-4108-a9f8-bf22774d7ebc": {"__data__": {"id_": "79e3792a-83eb-4108-a9f8-bf22774d7ebc", "embedding": null, "metadata": {"page_number": 48, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b296c27a-953f-49b2-943c-493f33ba628b", "node_type": "4", "metadata": {"page_number": 48, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "434b3176b1dd17431d1b38486ea43ac8c04e61710d93d5cb0aff163b653a8d5a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Concatenation Operation\n\n* \\( \\varepsilon \\) from accept states of \\( N_1 \\) to start state of \\( N_2 \\)\n\n\n \n \n\n \n\n \n \n
\n \\( N_1 \\)
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \\( N_2 \\)
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Transitions:
\n \\(\\varepsilon\\) transitions from each accept state of \\(N_1\\) to the start state of \\(N_2\\)\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 2392, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "61753fa5-98cc-4327-96d5-64296678dbc1": {"__data__": {"id_": "61753fa5-98cc-4327-96d5-64296678dbc1", "embedding": null, "metadata": {"page_number": 49, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b2cbc931-737c-4e43-82b5-4787d6ff0a47", "node_type": "4", "metadata": {"page_number": 49, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "bfbf485e70505108d0c876e206c0950ccec8c1364e60ac18be1419e086b40193", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Concatenation Operation\n\n* Accept states of \\( N_1 \\) to non-accept states\n\n```mermaid\nstateDiagram-v2\n [*] --> N1_1\n N1_1 --> N1_2\n N1_2 --> N1_3\n N1_3 --> N1_4 : \u03b5\n N1_3 --> N1_5 : \u03b5\n N1_3 --> N1_6 : \u03b5\n N1_4 --> N2_1\n N1_5 --> N2_1\n N1_6 --> N2_1\n N2_1 --> N2_2\n N2_2 --> N2_3\n N2_3 --> [*]\n```\n\n- \\( N_1 \\) and \\( N_2 \\) are two automata.\n- The accept states of \\( N_1 \\) are connected via epsilon (\u03b5) transitions to the start state of \\( N_2 \\).\n- The accept states of \\( N_1 \\) become non-accept states in the concatenated automaton.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 591, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0ddc2be0-ce5a-4e4a-a046-e87ae0be01ec": {"__data__": {"id_": "0ddc2be0-ce5a-4e4a-a046-e87ae0be01ec", "embedding": null, "metadata": {"page_number": 50, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "433ec58a-41ab-4f6e-baa3-5537eec5d764", "node_type": "4", "metadata": {"page_number": 50, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "b5388199e75e150223b0eb32c0f7ad29b30fd5c789e3137a3ec3f08fe9295257", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Star Operation\n\n* Star operator is similar to concatenation except that it can be concatenated any number of times:\n\n$$\nA^* = \\{ x_1 x_2 x_3 \\ldots x_k \\mid k \\geq 0 \\text{ and } x_i \\in A \\}\n$$\n\nand\n\n$$\n\\varepsilon \\in A^* \\quad \\text{for any language } A\n$$\n\n* Automata diagrams:\n\n```\nN_1:\n (start) --> (state) --> ... --> (accept states)\n\nN:\n (start) --> \u03b5 --> (state) --\u03b5--> (accept states)\n \\--\u03b5--/\n```\n\n* $N_1$ recognizes a regular language $A$\n\n* $N$ recognizes $A^*$ ($A^*$ is regular)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 528, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f68b9e7d-da2f-4e1f-96b0-9d1bb241ca5c": {"__data__": {"id_": "f68b9e7d-da2f-4e1f-96b0-9d1bb241ca5c", "embedding": null, "metadata": {"page_number": 51, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d3469469-a7dc-48a1-8114-c6ad60289b02", "node_type": "4", "metadata": {"page_number": 51, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "f05b5ee7c855f519dcbc841c4ec14ab86d3763223bbe3b69f5ebe8fef12ce2ad", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Star Operation\n\n* Let \\( N_1 = (Q_1, \\Sigma, \\delta_1, q_1, F_1) \\) recognizes \\( A_1 \\).\n* To construct \\( N = (Q, \\Sigma, \\delta, q_0, F) \\) to recognizes \\( A_1^* \\):\n 1. \\( Q = \\{q_0\\} \\cup Q_1 \\)\n 2. The state \\( q_0 \\) is the start state of \\( N \\)\n 3. The set of accept state \\( F = \\{q_0\\} \\cup F_1 \\)\n 4. \\( \\delta \\) is given by\n\n$$\n\\delta(q, a) = \n\\begin{cases}\n\\delta_1(q, a) & q \\in Q_1 \\text{ and } q \\notin F_1 \\\\\n\\delta_1(q, a) & q \\in F_1 \\text{ and } a \\neq \\varepsilon \\\\\n\\delta_1(q, a) \\cup \\{q_1\\} & q \\in F_1 \\text{ and } a = \\varepsilon \\\\\n\\{q_1\\} & q = q_0 \\text{ and } a = \\varepsilon \\\\\n\\emptyset & q = q_0 \\text{ and } a \\notin \\varepsilon\n\\end{cases}\n$$", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 702, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "675d2460-93ba-4808-9665-89eab9f8d9cc": {"__data__": {"id_": "675d2460-93ba-4808-9665-89eab9f8d9cc", "embedding": null, "metadata": {"page_number": 52, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "92901df1-6b57-4508-9883-c67975b880bf", "node_type": "4", "metadata": {"page_number": 52, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "8c1f6f0cfe72c8284b69c62220b76d1b21c29e54a3a92f9b5d08b8188fae99a0", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Star Operation\n\n* Given state diagrams of finite-state machines \\( N_1 \\)\n* To draw a state diagram of a new machine \\( N \\) where \n $$ L(N) = L(N_1)^* : $$\n 1. Draw the state diagram of \\( N_1 \\)\n 2. Add a new start state and make it an accept state\n 3. Add \\(\\varepsilon\\) transition from the new start state to the start state of \\( N_1 \\)\n 4. For each **original** accept state of \\( N_1 \\), add \\(\\varepsilon\\) transition to the **original** start state of \\( N_1 \\)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 493, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1507ec4f-e5eb-4eae-adb6-b0da7e39a5e4": {"__data__": {"id_": "1507ec4f-e5eb-4eae-adb6-b0da7e39a5e4", "embedding": null, "metadata": {"page_number": 53, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9bf6d0f4-f6c7-47ff-ab18-11ad9a806eaf", "node_type": "4", "metadata": {"page_number": 53, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "d868fc194ce712ee6b0284d0a206ea736bd23bd4fbf76c761e1415751749815c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Star Operation\n\n* Draw the state diagram of \\( N_1 \\)\n\n[The image shows a rectangular box labeled \\( N_1 \\) containing four states represented by circles. One state on the left has an incoming arrow indicating it is the start state. Two states on the right are double circled, indicating they are accepting states. The other two states are single circled. The states are arranged with the start state on the left, two states in the middle, and two accepting states on the right.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 496, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "130f7a3f-48c9-41a3-85bf-f050bdb4cf02": {"__data__": {"id_": "130f7a3f-48c9-41a3-85bf-f050bdb4cf02", "embedding": null, "metadata": {"page_number": 54, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "c553e89a-8eff-46e3-9bf6-baeba39fb35e", "node_type": "4", "metadata": {"page_number": 54, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "3a8514919aa0a592158c2d30616b3d402195e29ed625d5c9f82762fb95a661a4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Star Operation\n\n* Add a new start state and make it an accept state\n\n```mermaid\nstateDiagram-v2\n [*] --> NewStartAcceptState: new start state (accept state)\n state N1 {\n [*] --> S1\n S1 --> S2\n S3 --> S4\n S2 --> S3\n S4 --> S1\n S3 --> S3: accept states\n S4 --> S4: accept states\n }\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 358, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "02aeba3e-3b4c-4e7a-bde4-4916d2109590": {"__data__": {"id_": "02aeba3e-3b4c-4e7a-bde4-4916d2109590", "embedding": null, "metadata": {"page_number": 55, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "477b0431-83eb-48bc-9e40-157830569fb8", "node_type": "4", "metadata": {"page_number": 55, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "1040eb382af8fd68a129b6d7b47e9c057b26a8b1748ebf24dd3e606cf698cf27", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Star Operation\n\n* Add \\(\\varepsilon\\) from the new start state to the original start state of \\(N_1\\)\n\n```mermaid\nstateDiagram-v2\n [*] --> NewStart\n NewStart --> N1Start: \u03b5\n state N1 {\n [*] --> S1\n S1 --> S2\n S3 --> S4\n S5 --> S6\n S2 --> [*]\n S4 --> [*]\n }\n```", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 331, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "d13cf60f-7ae0-414a-8adb-baf89547fa12": {"__data__": {"id_": "d13cf60f-7ae0-414a-8adb-baf89547fa12", "embedding": null, "metadata": {"page_number": 56, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "654b897d-5ce5-4d9e-a1d6-375372571733", "node_type": "4", "metadata": {"page_number": 56, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "5b47a585ab08fb88fdabb187a4f6461031abc7d520f1157d10e4e6eb52119b3e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Closure Under Star Operation\n\n* For each **original** accept state of \\( N_1 \\), add \\(\\varepsilon\\) transition to the **original** start state of \\( N_1 \\)\n\n```\nN\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 \u2502\n \u2502 N\u2081 \u2502\n \u2502 \u2502\n \u2502 (start) \u2192 ( ) \u2192 ( ) \u2502\n \u2502 \u03b5 \u03b5 \u03b5 \u2502\n \u2502 \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n* The diagram shows an NFA \\(N\\) with an \\(\\varepsilon\\)-transition to the start state of \\(N_1\\).\n* Inside \\(N_1\\), for each original accept state, there is an \\(\\varepsilon\\)-transition back to the original start state of \\(N_1\\).", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 676, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "4b4cfded-8949-4b05-a853-f4379e0166da": {"__data__": {"id_": "4b4cfded-8949-4b05-a853-f4379e0166da", "embedding": null, "metadata": {"page_number": 57, "file_name": "data/finite_automata_03_handout.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "edf49ec4-4d0b-4505-bff6-39e537e5d32e", "node_type": "4", "metadata": {"page_number": 57, "file_name": "data/finite_automata_03_handout.pdf"}, "hash": "2a688530da7ba6c4617c3def82bcef4e382997f5aba9f500594b5ecdf2fe8e33", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Conclusions\n\n* A Nondeterministic Finite Automata (NFA) has an equivalent Deterministic Finite Automata (DFA) \n - The algorithm how to convert from an NFA \\( N \\) to an equivalent DFA \\( D \\) where \\( L(N) = L(D) \\) has been discussed\n\n* The set of all regular languages is closed under union, concatenation, and star operations: \n - If \\( A \\) and \\( B \\) are regular languages, \\( A \\cup B \\) is a regular language \n - If \\( A \\) and \\( B \\) are regular languages, \\( AB \\) (\\( A \\circ B \\)) is a regular language \n - If \\( A \\) is a regular language, \\( A^* \\) is a regular language\n\n* The proof process also gives us an algorithm how to construct DFAs", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 666, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2e587b98-181b-4b7d-b59b-2c22706e75f0": {"__data__": {"id_": "2e587b98-181b-4b7d-b59b-2c22706e75f0", "embedding": null, "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8cdddba1-58cc-48ab-a868-f85419425888", "node_type": "4", "metadata": {"page_number": 1, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "91cf43ff0a215b03fe935ee8d45ddc58f44a2f612323dc7918e2360de2af217a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L06 Requirements Elicitation I\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 178, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f65e948b-543c-4c3e-9d06-36a16842a1ee": {"__data__": {"id_": "f65e948b-543c-4c3e-9d06-36a16842a1ee", "embedding": null, "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3b6e9bd9-77e5-41ce-84a2-340f4dc22022", "node_type": "4", "metadata": {"page_number": 2, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "5cfd0d1a43424ba2c03e1201cd21eb7858e538a6572c9c77a8251cbad821027b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Copyright\n\n* These slides are intended for use by students in CS 1530 at the University of Pittsburgh only and no one else. They are offered free of charge and must not be sold or shared in any manner. Distribution to individuals other than registered students is strictly prohibited, as is their publication on the internet. \n - All materials presented in this course are protected by copyright and have been duplicated solely for the educational purposes of the university in accordance with the granted license. Selling, modifying, reproducing, or sharing any portion of this material with others is prohibited. If you receive these materials in electronic format, you are permitted to print them solely for personal study and research purposes. \n - Please be aware that failure to adhere to these guidelines could result in legal action for copyright infringement and/or disciplinary measures imposed by the university. Your compliance is greatly appreciated.\n\n* Material from these notes is obtained from various sources, including, but not limited to, the following: \n - Bruegge, & Dutoit. Object\u2013oriented software engineering. using UML, patterns, and Java. Pearson, 2009. \n - Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns. Pearson, 1994. \n - Sommerville, Ian. \"Software Engineering\" Pearson. 2011. \n - http://scrum.org/", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1375, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9b52bcf5-6aea-40ae-aaf3-05e8d96df639": {"__data__": {"id_": "9b52bcf5-6aea-40ae-aaf3-05e8d96df639", "embedding": null, "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5305a6bb-8838-4138-a781-5f865e2a288a", "node_type": "4", "metadata": {"page_number": 3, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "7b46f669af6d8845843ed77ea87b2c46cc55e6ef1570b65b8d84b2f8f4447b45", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Learning goals\n\n* You have a better understanding of user, enduser, and customer \n* You can extract functional requirements from a problem statement", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 152, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5767ab18-6e20-4627-91af-3637d7f1a09d": {"__data__": {"id_": "5767ab18-6e20-4627-91af-3637d7f1a09d", "embedding": null, "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5d74f000-553f-4673-b3d0-28cbababecea", "node_type": "4", "metadata": {"page_number": 4, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "c367a1b958cae64cc10f96d52e36c1055d187842ea2ef2bab2b4655b47949d81", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Intro to requirements engineering\n* Functional requirements", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 81, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "6751d0ef-b8bb-443f-8614-b1d907c212c0": {"__data__": {"id_": "6751d0ef-b8bb-443f-8614-b1d907c212c0", "embedding": null, "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "fdd79aa2-d716-484a-a5fb-b48c5db3d5aa", "node_type": "4", "metadata": {"page_number": 5, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "d4b84c29b9234aecc3c1d2c6b4e95b2e326a720be6bcd1b002e67536532f84f3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Who is the user, enduser, and customer?\n\n* Company A builds a software product for Company B. \n Kim purchases the software product from Company B.\n\n* Company X develops an ordering platform for Restaurant Chain Y. \n Restaurant managers use an admin dashboard to update menus & track orders. \n Customers place orders through the app and get their food delivered.\n\n* Company M creates an online banking backend for Bank N. \n Bank tellers and support staff use the system to manage accounts. \n Bank customers use the mobile app or website to transfer money and check balances.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 596, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8ab66ea3-8192-4554-8f82-ea41d4e94aca": {"__data__": {"id_": "8ab66ea3-8192-4554-8f82-ea41d4e94aca", "embedding": null, "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "89380637-7b41-45f2-94b6-102faa2120cc", "node_type": "4", "metadata": {"page_number": 6, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "b286edb63251748ad1787d2612a7beb3580f2542d58e60fd436ed01692d4e5c9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# User vs enduser\n\n* **User** is anyone who interacts with the system \n - Includes maintainers or supporters of a system \n - Can be an external system \n - **[Example]** system operations / administrators, technical personnel \n* **Enduser** is the person who is intended to use the software for its _primary function_ \n - Does not need advanced technical knowledge of the system \n - **[Example]** person who downloads an app from the App Store/Google Play Store \n\n> The users of a software system should be defined \n> at the start of a project!", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 557, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "db6014ac-e6a5-49a6-9f7e-aa422426479f": {"__data__": {"id_": "db6014ac-e6a5-49a6-9f7e-aa422426479f", "embedding": null, "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f86f8db1-8f12-42ea-8488-e1c3f148d78e", "node_type": "4", "metadata": {"page_number": 7, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "86c9dff3d0990c11977faac041398bcc298865a87565fe3c6f2fab7270e1cf93", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# SDLC \n## Actors & Activities\n\n- Customer \n - Define problem \n - <> Develop software system\n\n- Project Manager \n - Define problem \n - Develop system \n - <> Develop software system\n\n- Developer \n - Develop system\n\n- Enduser \n - Operate System \n - <> Develop software system\n\n- System Administrator \n - Operate System\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 398, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bb6121b2-c770-4cd8-9d65-d67a062c63f4": {"__data__": {"id_": "bb6121b2-c770-4cd8-9d65-d67a062c63f4", "embedding": null, "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "b03e76c6-5dbd-4cc4-86b9-0c41fbb6e934", "node_type": "4", "metadata": {"page_number": 8, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "b3f5ead26424da479f07b851d8f7884a6579283a452ee11a729e316500e78630", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem definition\n\n* Typically documented as an informal problem statement\n* Describes the purpose of the system\n - Not necessarily something that is wrong\n - Could describe the gap between an existing and desired state\n - Could be an idea\n* **The problem is not the solution!**\n\n> Essential for building any system!\n\n----\n\nVAGUE IDEA OF THE PROBLEM \u2192 DIFFERENT PERSPECTIVES \u2192 CLEAR, SUCCINCT PROBLEM STATEMENT\n\n[The image shows a progression from a vague idea of the problem (depicted as a thought bubble with an exclamation mark inside a triangle), through different perspectives (multiple overlapping shapes with question marks and exclamation marks), to a clear, succinct problem statement (a single triangle with an exclamation mark and rays around it).]\n\n----\n\nUniversity of Pittsburgh\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L06 Requirements Elicitation: Functional requirements \nhttps://blog.prototypr.io/the-problem-with-problems-and-a-better-way-to-frame-them-visually-b3bb71f30baf", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1006, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f6195136-b503-4e23-bf30-71204259bd9a": {"__data__": {"id_": "f6195136-b503-4e23-bf30-71204259bd9a", "embedding": null, "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a44778b6-04dc-4c57-9d08-5713937c5fef", "node_type": "4", "metadata": {"page_number": 9, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "da500ecdb822af00abaac8f6b67339c0e7a4926934f6e07ba0007861697498ec", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Why is it important to separate the problem from the (concrete) solution?\n\n* **Clarity and understanding** \u2014 Avoid premature solution \n - Ensure well-informed solutions \n* **Flexibility** \u2014 Encourage creativity and innovation \n - Explore various solutions \n* **Communication** \u2014 Foster better collaboration \n - Enable a common understanding of the problem \n\n[The image shows a man in a shirt and tie standing in front of a wall covered with papers and red string connecting various points, gesturing animatedly.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 524, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "f94d4268-a09d-452c-b0d3-cf107a84fc94": {"__data__": {"id_": "f94d4268-a09d-452c-b0d3-cf107a84fc94", "embedding": null, "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "3b2847fa-3592-4070-aa79-ae706c9bea34", "node_type": "4", "metadata": {"page_number": 10, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "d124debb6191a74feee7a5c411b7f9a15e32a4dda66b06c3beb360af09daa160", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Application vs Solution Domain\n\n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n
Application DomainSolution DomainApplication Domain
Requirements
Elicitation
Requirements
Analysis
Deployment /
Delivery
Maintenance
\"What is the problem?\"System Design\"How is the system used / maintained?\"
Object Design
Implementation
Testing & Validation
\"What is the solution?\"
\n\nUniversity of Pittsburgh", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1858, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "e2783e38-ecf5-4d4e-a4b7-09c4e2ae2e6a": {"__data__": {"id_": "e2783e38-ecf5-4d4e-a4b7-09c4e2ae2e6a", "embedding": null, "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f79cdcab-543f-48e2-bb71-863126c6495c", "node_type": "4", "metadata": {"page_number": 11, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "020a6b2b711dca006482b7c7861d4fe6c53cafb4473afa783203ab8ea4d1ab13", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **[Example]** Application vs Solution Domain\n\n\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n
PhaseExample
Problem DefinitionStudents complain they can\u2019t find parking spots near class on time
Requirements ElicitationInterview students: Need real-time lot status, navigation to nearest open spot
Requirements AnalysisCreate a use-case diagram for \u2018Find Spot\u2019
& model state machine for lot occupancy
Solution Domain \u2013 DesignDecide: mobile app + backend API with sensor data
ImplementationBuild app using Flutter, connect to database
Testing/ValidationCheck that parking spot data updates every 10 seconds
Deployment/ MaintenanceRelease to App Store, monitor usage, fix bugs
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1145, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "71d5db72-221f-44ae-8812-54b0c05a8556": {"__data__": {"id_": "71d5db72-221f-44ae-8812-54b0c05a8556", "embedding": null, "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f721df7a-b66d-4897-9ea3-08df3e5b20ed", "node_type": "4", "metadata": {"page_number": 12, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "dbe3c44f8c35570651b6599905d4fb8b57b9948b0b811d9ace6e49e6d672fcce", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Different domains require different approaches\n\n## Greenfield Engineering\n* Developing a system from scratch; no prior system exists \n* Requirements: Extracted from stakeholders and (end)user input \n* Initiation: New market needs \n* Starting Point: Clear problem statement based on user needs", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 298, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "eb25e297-6a78-4bb2-973c-3de5fa8fc760": {"__data__": {"id_": "eb25e297-6a78-4bb2-973c-3de5fa8fc760", "embedding": null, "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bf341016-cc1e-424a-8872-7ea2560af094", "node_type": "4", "metadata": {"page_number": 13, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "60d4d445c6003a411a33e68107a6903e4765121d6c23416dd94a2d012c8293ce", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Different domains require different approaches\n\n**Re-engineering** \u2014 redesign or re-implementation of an existing system \n* Requirements: Driven by new technology \n* Initiation: Responds to technological advancements \n* Starting point: Problem statement rooted in technological evolution", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 293, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9bee7d1a-e45d-4743-9edf-53ce4139b13c": {"__data__": {"id_": "9bee7d1a-e45d-4743-9edf-53ce4139b13c", "embedding": null, "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "07352b2c-813b-41b2-b7cb-cabd91963b87", "node_type": "4", "metadata": {"page_number": 14, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "db55241a3c27a252a45613d4e71d570d7b6d3cc783ad7b23a26acd7380950b8f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Different domains require different approaches\n\n**Interface Engineering** \u2014 adapting an existing system to a new environment \n* Requirements: Prompted by technology or new market needs \n* Initiation: Responds to technology shifts or emerging market demands \n* Starting Point: Problem statement reflecting technological or market changes", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 342, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "fcca7c53-29a4-46e4-99ed-0ec171908c81": {"__data__": {"id_": "fcca7c53-29a4-46e4-99ed-0ec171908c81", "embedding": null, "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "98ecebcf-8483-4dff-99de-733175d15d8d", "node_type": "4", "metadata": {"page_number": 15, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "67cccb22c1e341441e4da6b9136fe161c67712b76433aaa60b246a54dd0c7fbe", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Today\u2019s roadmap\n\n* Intro to requirements engineering\n* Functional requirements", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 81, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "efe5721b-79de-48e0-a2d0-2389066fe3a4": {"__data__": {"id_": "efe5721b-79de-48e0-a2d0-2389066fe3a4", "embedding": null, "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bf851eec-2363-4255-bfce-6e5a2ce887d6", "node_type": "4", "metadata": {"page_number": 16, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "024625182c3d58aeba705a62910070e125b5bfb11593628e9d420ffb52c1bf21", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# System Requirements\n\n* Describe the functions to satisfy the stakeholder needs and requirements \n* Basis for designing a software system \n* Describe how the user requirements should be provided by the system \n* Expressed in textual statements \n* Types of requirements: \n - **Functional** (Focus is on the functionality) \n - **Quality** / **Non-functional** (Focus is on quality attributes) \n - **Constraints** (Focus is on limitations) \n\n> WALLY, WE DON\u2019T HAVE TIME TO GATHER THE PRODUCT REQUIREMENTS AHEAD OF TIME. \n> I WANT YOU TO START DESIGNING THE PRODUCT ANYWAY. OTHERWISE IT WILL LOOK LIKE WE AREN\u2019T ACCOMPLISHING ANYTHING. \n> OF ALL MY PROJECTS, I LIKE THE DOOMED ONES BEST.\n\n\u00a9 2025 Nadine von Frankenberg \nCS 1530 - L06 Requirements Elicitation: Functional requirements", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 795, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "cf6e7a4c-3047-4a28-b9f8-f9950b935083": {"__data__": {"id_": "cf6e7a4c-3047-4a28-b9f8-f9950b935083", "embedding": null, "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "9482f7ce-699b-4e10-9e1c-330a59a1ac13", "node_type": "4", "metadata": {"page_number": 17, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "b0a6a178dd5b5d92fa9129df1d3563c372d0452e95f611b74e7b08606ba823bf", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Functional Requirements\n\n* Describe the essential functionality of the system\n* Define one requirement per function (feature)\n* They should be phrased in a general manner\n\n```\nFR# Short title : Description\n```\n\n> Should be numbered based on their \u2794 priority \n> Phrased in **imperative mood** (verb + noun) \n> The description should not include implementation details\n\n**[Example]** \n`FR7 View Map:` The user can view a map that displays their current location and any historic landmarks around them, within a 5 mile radius.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 532, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "8bd3240a-47b5-4a05-ae24-3ea8daa969b6": {"__data__": {"id_": "8bd3240a-47b5-4a05-ae24-3ea8daa969b6", "embedding": null, "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d333ef46-2cbe-44c7-8cd2-7d22ef295230", "node_type": "4", "metadata": {"page_number": 18, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "77eb5080390d37f8c78e8f9b30c241a193b3871fde2a9b6754af8a2f9be5501b", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Functional Requirements\n\n* Describe the essential functionality of the system\n* Define one requirement per function (feature)\n* They should be phrased in a general manner\n\n```\nFR# Short title : Description\n```\n\n> Should be numbered based on their \u2794 priority \n> Phrased in **imperative mood** (verb + noun) \n> The description should not include implementation details\n\n**[Example]** \n\u274c `\"FR1 Select location: The user can select a button to zoom in Google Maps and look at a red and green-colored heat map of popular areas.\"`", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 533, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "bdc9d362-8f2c-434a-9e92-09a5bfd224f6": {"__data__": {"id_": "bdc9d362-8f2c-434a-9e92-09a5bfd224f6", "embedding": null, "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "d5899192-847d-48b4-8348-1000d74a02e0", "node_type": "4", "metadata": {"page_number": 19, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "14e11cecf9789e68a642f9ed790223dc6202f0db10aa094ad6e05fe56d662df4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# What is functionality?\n\n* Describes specific tasks the system performs to achieve an intended goal \n e.g., processing data, user interactions, or system operations\n* Focuses on how the system responds to inputs and deliver outputs\n* Defines **features and services the user can invoke / system provides** \n e.g., login, view a report, create a report, \u2026\n\n> Functionality does not describe qualities, e.g., response time, platform type, etc!\n\n## [Example]\n\n* Functionality: \"The user can upload files.\"\n* Quality attributes \n - \"The system can upload files with minimal delay of max. 15 seconds, even with the maximum supported file size.\" \n - \"The system can store uploaded files with a size of up to 2GB.\" \n - \"The system supports files of the types .pdf, .jpg, and .txt\"", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 785, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "0487618e-03c2-4e67-b652-56f46ad28697": {"__data__": {"id_": "0487618e-03c2-4e67-b652-56f46ad28697", "embedding": null, "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "00dff377-29bc-4669-8075-bfab96c2ca66", "node_type": "4", "metadata": {"page_number": 20, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "697b1b890496d59a69c52f4a808c5774c2a33e6b8b5ecb3bb90bc85a4e6cc58f", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# What is functionality? (cont.)\n\n* **Single purpose:** Each functional requirement should represent one logical unit of work (one operation or one step from the actor\u2019s/user\u2019s perspective)\n* **Low complexity:** Complex requirements should be split into separate requirements (or grouped as sub-requirements)\n* **Unified testing & maintenance:** Each functional requirement should be treated as one unit during testing and maintenance\n* An **atomic requirement** is a requirement that cannot be further broken down into individual tasks\n\n> Splitting complex requirements into smaller, manageable requirements helps in system design to better identify reusable parts", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 666, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "7aa3a21f-8102-4da9-ba10-7ee71283fb95": {"__data__": {"id_": "7aa3a21f-8102-4da9-ba10-7ee71283fb95", "embedding": null, "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "bf4d503a-d04e-42cd-8153-0ab8786dba05", "node_type": "4", "metadata": {"page_number": 21, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "b82793a3fe1c4ca420c69dfa18e7cad10ec7a0020921d45e82a305a97f45da48", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Defining requirements\n\n**FR3 Login:** Students can login to the system using their email address and password.\n\n> User\u2019s perspective: Single operation/single purpose \n> Sequential dependency & low complexity \n> Testing & maintenance will most likely be treated as a single unit\n\n**FR4 Control room temperature automatically:** The system automatically controls the temperature for each room.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 406, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "38b8eef2-7afd-48f4-8f75-8b0a020124e6": {"__data__": {"id_": "38b8eef2-7afd-48f4-8f75-8b0a020124e6", "embedding": null, "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "5332aef8-8ef3-4fa0-b8ca-cdfbd77c062e", "node_type": "4", "metadata": {"page_number": 22, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "2b0bdad8d206165168c7646223520e2b1ae50f16069327ff052cda58691b7976", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Defining requirements\n\n> User\u2019s perspective: viewing and downloading an account statement are two distinct actions \n> Each has its own functionality and does not depend on each other \n> Testing & maintenance will most likely be treated separately\n\n**FR4 Access account statements:** The customer can access account statements. \n **FR4.1 View Monthly Statements:** The customer can view their past transactions in their account statement, updated monthly. \n **FR4.2 Download Statements:** The customer can download their statements as a PDF file. \n **FR4.3 Receive statements via email:** The customer can choose to receive their account statement automatically via email automatically each month.\n\n> Sub-steps indicate a logical categorization", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 770, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a926350a-786b-45fd-aa91-6adfe4fb3def": {"__data__": {"id_": "a926350a-786b-45fd-aa91-6adfe4fb3def", "embedding": null, "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "979f47ee-e5bb-433d-a991-5b92cb40f992", "node_type": "4", "metadata": {"page_number": 23, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "a5aea25000e3eb556f8433c9a52dcad985bac4062e07a5971ca60952ecc4d537", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Deriving requirements: FURPS+ Model\n\n* FURPS+ is a model used to categorize features and attributes\n* **F**unctional Requirements \n > What functionalities/features should the system provide?\n* Non-functional Requirements \n - **U**sability \n - **R**eliability \n - **P**erformance \n - **S**upportability \n - \u2026 \n > E.g., robustness, maintainability, \u2026\n* Constraints (pseudo-requirements) \n > E.g., standards, physical limitations, software limitations, dependencies, \u2026", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 486, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "113352a7-c106-4583-8bb2-06d6c0fbf89a": {"__data__": {"id_": "113352a7-c106-4583-8bb2-06d6c0fbf89a", "embedding": null, "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "4281f524-bc7b-4554-b8b9-a13b304bc605", "node_type": "4", "metadata": {"page_number": 24, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "3e23934de083decc93b7e5713acb6a49276fb34099215caad2168417e6ed706d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Abbott\u2019s textual analysis (technique)\n\n* Methodology used to identify and specify objects in a software system based on natural language\n* Review the natural language requirements / problem statement:\n 1. **Identify nouns** \u2192 actors / objects (or entities)\n 2. **Group and categorize** the nouns \u2192 define the objects\u2019 tasks/services\n 3. **Determine the relationships** between the identified objects\n - Adjectives \u2192 describe characteristics/attributes of objects\n - Verbs \u2192 correspond to methods or operations that objects perform\n - Relationships \u2192 describes how objects interact\n\n> Introduced by Russell J. Abbott (1983) as a way to systematically extract objects, attributes, and behavior from an (informal) textual description of a system", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 760, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "64187f61-a927-45ef-baef-2a35c3f136bb": {"__data__": {"id_": "64187f61-a927-45ef-baef-2a35c3f136bb", "embedding": null, "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "6a0515f2-807e-4b4b-ac9a-376f6efe938c", "node_type": "4", "metadata": {"page_number": 25, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "06224eebd7ad2af11066fc5cb97a31eb151d7086712c913bfc0f93fd3d361d6d", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Actor vs entity\n\n* **Actor** is anyone who interacts with the system from outside its boundaries \n - **[Example]** \n **Customer** who browses and purchases items \n Payment Processing System (external system)\n\n* **Entity** is a core object or concept within the boundaries of the system \n - **[Example]** \n Order, Product, Customer within an e-commerce system \n _e.g., system tracks Products (e.g., name, price, inventory count)_", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 451, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "44558ddc-be83-4265-b51a-d45e16a8caae": {"__data__": {"id_": "44558ddc-be83-4265-b51a-d45e16a8caae", "embedding": null, "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "de4298f5-fbc9-41a6-a59d-7c5f671d60a6", "node_type": "4", "metadata": {"page_number": 26, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "550fe6b4d78972ce9848ef5556d04beca28ffa9ba436a1c8be13bd25bd403da3", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **Example** Abbott\u2019s technique\n\nHomeowners want a system to control the temperature in different rooms of a house. The system should: \n* Keep track of the temperature in each room \n* Adjust heating or cooling to keep the rooms comfortable \n* Set different temperatures for each room \n* Be controlled through a mobile app \n* Send an alert if a room's temperature goes too far from the set point \n\n*simplified*", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 417, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "ee4d1527-accb-4dd6-9838-4c44408a2af9": {"__data__": {"id_": "ee4d1527-accb-4dd6-9838-4c44408a2af9", "embedding": null, "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0c36b890-20db-4625-88fe-dc89dd530421", "node_type": "4", "metadata": {"page_number": 27, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "689036fa73dfa6e867df1454c8032dea1443accee6c2b6d7ff2e1fc4da1a132c", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Abbott\u2019s technique \u2014 Identifying Actors ![University of Pittsburgh logo]\n\n**Homeowners** want a system to control the temperature in different rooms of a house. The **system** should: \n* Keep track of the temperature in each room \n* Adjust heating or cooling to keep the rooms comfortable \n* Set different temperatures for each room \n* Be controlled through a mobile app \n* Send an alert if a room's temperature goes too far from the set point \n\nRelevant **Actors**: \n* (End)`user` = *Homeowner* or *Occupant* \n> An actor is an entity that interacts with a system\n\n* *Home* (or *Heating and cooling system*) \n> At this stage, the system to be built can be seen as an actor, as the system boundaries still need to be defined.\n\n* *System* (to be built) \n\n*simplified*", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 790, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "1e7aa0a3-2aea-4491-8d56-57c784e9f604": {"__data__": {"id_": "1e7aa0a3-2aea-4491-8d56-57c784e9f604", "embedding": null, "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "8e43b393-8712-4bd4-90e5-4e9f272248b2", "node_type": "4", "metadata": {"page_number": 28, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "b5d2025b10520a50c2a6531c0c247ff9bb3c0c8835ecc8d974464899cf66b977", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **[Example]** Abbott\u2019s technique \u2014 Identifying Actors ![University of Pittsburgh logo]\n\nHomeowners want a system to control the temperature in different rooms of a house. The system should:\n\n* **Keep track of the temperature** in each room \n* **Adjust heating or cooling** to keep the rooms comfortable \n* **Set different temperatures** for each room \n* Be controlled through a mobile app \n* **Send an alert** if a room's temperature goes too far from the set point \n\n*simplified*", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 489, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "2fd8ee16-da22-4e9d-9936-c0c22d8e1ba1": {"__data__": {"id_": "2fd8ee16-da22-4e9d-9936-c0c22d8e1ba1", "embedding": null, "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "0a2cac94-e3ae-430e-853e-96e87c7c4076", "node_type": "4", "metadata": {"page_number": 29, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "dc30bb108aef1e560a7be1860d0cda1f265dd254f10f8e4f4915a918f930ace9", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Abbott\u2019s technique \u2014 Identifying Actors\n\nHomeowners want a system to control the temperature in different rooms of a house. The system should:\n\n* **Keep track of the temperature** in each room \n* **Adjust heating or cooling** to keep the rooms comfortable \n* **Set different temperatures** for each room \n* Be controlled through a mobile app \n* **Send an alert** if a room's temperature goes too far from the set point \n\nActors/_Entities_: \n* **HomeOwner:** View and set temperatures, receive alerts \n* **HeatingCoolingSystem:** Change the temperature in the rooms \n* ~~TemperatureSensor: Detect the temperature in each room~~", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 647, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "67e1cb8b-5256-48c1-a90e-ca6003f5c620": {"__data__": {"id_": "67e1cb8b-5256-48c1-a90e-ca6003f5c620", "embedding": null, "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "563600d9-22df-4913-9ee8-0d844699b933", "node_type": "4", "metadata": {"page_number": 30, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "b546987de0fa89d692f467b6ab28ebf0df900e32d1b18050cfd75ce717a7f5bc", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# **[Example]** Abbott\u2019s technique \u2014 Identifying Actors University of Pittsburgh\n\n```mermaid\ngraph LR\n HomeOwner(( )) -->|controls| HomeControl[HomeControl]\n HomeControl -->|monitor
read temperature| TemperatureSensor(( ))\n```\n\nHomeOwner \nTemperatureSensor", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 269, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "18dd071c-a3e0-44cd-af83-15e2cde938fc": {"__data__": {"id_": "18dd071c-a3e0-44cd-af83-15e2cde938fc", "embedding": null, "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "18c99039-ee9f-4928-8f54-809ac322b639", "node_type": "4", "metadata": {"page_number": 31, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "95a81b9e8ea6389d830731524c0f20aadcd072582337a4d6838564b58d5c2ac5", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Abbott\u2019s technique *simplified\n\n*The enduser or user of the system is defined as the home owner or occupant.*\n\n- FR1 View room temperature: The user can view the current temperature of each room.\n- FR2 Monitor room temperature: The system monitors the temperature of each room.\n - FR2.1 Sense temperature: The temperature sensor senses the room\u2019s current temperature.\n - FR2.2 Read temperature: The system reads the temperature sensor\u2019s temperature readings once a minute.\n- FR3 Control room temperature manually: The user can control the temperature for each room.\n- FR4 Control room temperature automatically: The system automatically controls the temperature for each room.\n- FR5 Send temperature alerts: The system sends alerts to the user if the temperature in a room deviates from the set preference by more than 4\u00b0F.\n- FR6 Set room temperature preferences: The user can set a desired temperature for each room.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 933, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "5cd3fc98-b977-4d9c-b7c6-4d3b25857ff1": {"__data__": {"id_": "5cd3fc98-b977-4d9c-b7c6-4d3b25857ff1", "embedding": null, "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "f846fa69-fbba-4bc4-b518-1fce147a6f1e", "node_type": "4", "metadata": {"page_number": 32, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "a5151ad9b12d6ccf90a5b147b2ee43b65b20f7ab6d0b8e6a4044822e299f29b4", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# [Example] Abbott\u2019s technique - alternative *simplified* \n\n*The enduser or user of the system is defined as the home owner or occupant.* \n*The software system to be developed is hereafter referred to as HomeControl.*\n\nFR1 View room temperature: The user can view the current temperature of each room. \nFR2 Monitor room temperature: HomeControl monitors the temperature in each room. \n- FR2.1 Sense temperature: The temperature sensor senses the room\u2019s current temperature. \n- FR2.2 Read temperature: HomeControl reads the temperature sensor\u2019s temperature readings once a minute. \nFR3 Control room temperature manually: The user can control the temperature for each room and set it to a specified temperature value. \nFR4 Control room temperature automatically: HomeControl automatically controls the temperature for each room and set it to a specified temperature value using a learning-based schedule (\u2192 FR8). \nFR5 Send temperature alerts: HomeControl sends alerts to the user if the temperature in a room deviates from the set preference by more than 4\u00b0F. \nFR6 Set room temperature preferences: The user can set a desired temperature for each room.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1160, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "a14086b3-9ff6-43da-a005-0537ec346656": {"__data__": {"id_": "a14086b3-9ff6-43da-a005-0537ec346656", "embedding": null, "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a38742a5-fa61-4ae4-8eb4-a33df82b70dc", "node_type": "4", "metadata": {"page_number": 33, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "22322cfcff119cafefc974bb06f16a85b59e06659233d64121518a73db88d043", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# System vs external system\n\n* **Software system** is a system/component that is being developed \n - Has specified boundaries \n* **External system** is a system/component outside of the boundary of the software system being developed that interacts with it \n - E.g., API, database, sensor, hardware, third-party system \n\n> **Boundaries** define what is inside the system (internal components) and what interacts with it from the outside (external actors, systems/components)", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 481, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "9072d78b-a77a-4797-8cd8-92fe4ee426fb": {"__data__": {"id_": "9072d78b-a77a-4797-8cd8-92fe4ee426fb", "embedding": null, "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "23480e28-694a-410e-8c32-c1564b42eb4b", "node_type": "4", "metadata": {"page_number": 34, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "ef223873d41edf800992fb806e84e62350b7b29fbc562101cb116353f7d9f08e", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem Statement\n\n[The image shows three photographs related to sinkholes and road collapses:\n- The first photo (top left) shows a bus partially fallen into a large sinkhole on a city street, with police caution tape around the area.\n- The second photo (top right) shows a large sinkhole on a paved road, also cordoned off with police caution tape.\n- The third photo (bottom center) shows a smaller sinkhole on a paved surface.]", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 432, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "c3d67f7c-f583-4e4d-b107-2555d2b17450": {"__data__": {"id_": "c3d67f7c-f583-4e4d-b107-2555d2b17450", "embedding": null, "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "904cc442-d779-4828-9fb7-2b83100b2806", "node_type": "4", "metadata": {"page_number": 35, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "f5a742398a90932f81a00e5cf3d2c345d72e2856b2783d119d9fbe83a36a4271", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem Statement\n\n## Background\n\nPittsburgh is facing an increasing number of potholes and sinkholes that pose a threat to public safety and infrastructure. These sudden ground collapses can cause considerable damage to roads, disrupt supply lines, and endanger human lives. Current methods of monitoring and responding to sinkholes are reactive and inefficient. There is an urgent need for a proactive, technology-based solution to detect, track, and predict sinkholes. This solution would enable municipal authorities to respond quickly to potential hazards, deploy resources more efficiently, and take preventative measures to mitigate the impact of sinkholes on the community and infrastructure.", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 703, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "93cfc5ca-d795-40cb-a027-a8bb477e988f": {"__data__": {"id_": "93cfc5ca-d795-40cb-a027-a8bb477e988f", "embedding": null, "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "905c92b8-d357-4515-b79e-5bff0111919b", "node_type": "4", "metadata": {"page_number": 36, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "1b6944291962aa8a889d2c5bc5c242af221ae74ee49e46389dd2211013831c59", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Problem Statement\n\nThe City of Pittsburgh requires the development of a Sinkhole Monitoring System (SiMCity) to address the issue of sinkholes within the city. The first version of SiMCity should enable residents and city officials to report sinkhole occurrences and track their locations.\n\nThe system should be easy to use, accessible through web and mobile platforms, and track sinkholes in real-time.\n\nResidents should be able to view sinkholes on a map, helping them to avoid such areas. It should also allow residents to report new sinkholes by sending in their location and photographic evidence for verification, or call for help. City officials can remove sinkholes from the map after they have been re-filled and repaired.\n\nSiMCity aims to increase public safety, facilitate rapid response to sinkholes, and improve the city\u2019s ability to manage and mitigate the impact of these geohazards.\n\n> **Let\u2019s develop this system!**", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 935, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "81f08320-54e0-4b34-8ba1-2353b3a272cb": {"__data__": {"id_": "81f08320-54e0-4b34-8ba1-2353b3a272cb", "embedding": null, "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "38cd58e3-b09e-44e0-94b1-3423dce4b9f8", "node_type": "4", "metadata": {"page_number": 37, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "cdf1fd97ab65aeb50067f0aa89d781ede4a0685fafc25f76c5c301c2fe085e5a", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# I06 \u2014 Define functional requirements \u23f3 15 min \ud83e\uddd1\ud83d\udcbb\ud83e\uddd1\ud83d\udcbb Pairs\n\nBased on the problem statement, define **functional requirements** for the SiMCity system\n\n
\ncontinued in L07!\n
", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 288, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "3106406f-8920-4dc2-a1de-29e4aae6c3e8": {"__data__": {"id_": "3106406f-8920-4dc2-a1de-29e4aae6c3e8", "embedding": null, "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "a795fad3-2212-4e02-9e00-514efac487c5", "node_type": "4", "metadata": {"page_number": 38, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "79cdad4aee34ccd5e70c0630f42832e3e28d74e298e2b851db001bb3f14d3b87", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# Take-Away: Overview of requirements elicitation\n\n* User-Centric Approach: Prioritize understanding the needs and perspectives of end-users and stakeholders\n* Effective Communication: Establish clear and open channels of communication to gather accurate requirements\n* Iterative Process: Requirements elicitation is an ongoing, iterative process, adapting to evolving project needs\n* Documentation: Thoroughly document gathered requirements to ensure clarity and alignment throughout the project lifecycle\n\n| YOUR USER REQUIREMENTS INCLUDE FOUR HUNDRED FEATURES. | DO YOU REALIZE THAT NO HUMAN WOULD BE ABLE TO USE A PRODUCT WITH THAT LEVEL OF COMPLEXITY? | GOOD POINT. I'D BETTER ADD \"EASY TO USE\" TO THE LIST. |\n|--------------------------------------------------------|------------------------------------------------------------------------------------------|--------------------------------------------------------|\n| | | |", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 1129, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}, "99896596-fae0-4b23-85d7-3ba9a58ee859": {"__data__": {"id_": "99896596-fae0-4b23-85d7-3ba9a58ee859", "embedding": null, "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "excluded_embed_metadata_keys": [], "excluded_llm_metadata_keys": [], "relationships": {"1": {"node_id": "2e108bd3-c332-42da-98dd-21c0e7067bc3", "node_type": "4", "metadata": {"page_number": 39, "file_name": "data/Fall25 1530 - L06 Requirements Elicitation _.pdf"}, "hash": "f6fee3f79b3378dfa594ba5d4f3fb8e1be81b93c9729db371f175df76d3d64ec", "class_name": "RelatedNodeInfo"}}, "metadata_template": "{key}: {value}", "metadata_separator": "\n", "text": "# L06 Requirements Elicitation I\n\nCS 1530 Software Engineering \nNadine von Frankenberg\n\nFall 2025\n\nUniversity of Pittsburgh \nSchool of Computing and Information \nsci.pitt.edu", "mimetype": "text/plain", "start_char_idx": 1, "end_char_idx": 178, "metadata_seperator": "\n", "text_template": "{metadata_str}\n\n{content}", "class_name": "TextNode"}, "__type__": "1"}}}