ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ PHẠM VIỆT HÙNG MỘT SỐ PHƯƠNG PHÁP MÃ HÓA LƯỢNG TỬ VÀ MƠ PHỎNG TRÊN MÁY TÍNH LUẬN VĂN THẠC SĨ HÀ NỘI - 2006 TIEU LUAN MOI download : skknchat@gmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ PHẠM VIỆT HÙNG MỘT SỐ PHƯƠNG PHÁP MÃ HĨA LƯỢNG TỬ VÀ MƠ PHỎNG TRÊN MÁY TÍNH Ngành: Công nghệ thông tin Mã số: 1.01.10 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS Phan Trung Huy HÀ NỘI - 2006 TIEU LUAN MOI download : skknchat@gmail.com MỤC LỤC LỜI CẢM ƠN Danh mục từ viết tắt Danh mục hình vẽ Mở đầu Chƣơng Các khái niệm 10 1.1 Ký hiệu Bra-Ket 10 1.2 Nguyên lý học lƣợng tử 11 1.3 Qubit ghi lƣợng tử 13 1.3.1 Khái niệm Qubit 13 1.3.2 Khái niệm ghi lƣợng tử 14 1.3.3 Phép biến đổi Unita phép đo 16 1.4 Nguyên lý rối lƣợng tử (Nguyên lý Entanglement) 17 1.5 Nguyên lý song song lƣợng tử 18 1.6 Nguyên lý chép (No-Cloning Theorem) 18 1.7 Mạch Cổng logic lƣợng tử 20 1.7.1 Cổng qubit 21 1.7.2 Cổng qubit 23 1.7.3 Cổng qubit 25 1.7.4 Cổng phổ dụng 26 Chƣơng Một số thuật toán lƣợng tử 28 TIEU LUAN MOI download : skknchat@gmail.com 2.1 Thuật toán lƣợng tử 28 2.2 Thuật toán Deutsch-Jozsa 29 2.3 Biến đổi Fourier lƣợng tử 34 2.3.1 Phép biến đổi Fourier rời rạc 34 2.3.2 Phép biến đổi Fourier lƣợng tử 35 2.3.3 Phép biến đổi nhanh Fourier lƣợng tử 36 2.3.4 Sự thực QFFT cổng lƣợng tử 37 2.4 Thuật tốn phân tích thừa số nguyên tố Peter Shor 38 Chƣơng Mã hoá lƣợng tử 47 3.1 Giao thức phân phối khoá lƣợng tử BB84 48 3.1.1 Giao thức phân phối khố lƣợng tử BB84 trƣờng hợp khơng nhiễu 48 3.1.2 Giao thức phân phối khoá lƣợng tử BB84 trƣờng hợp có nhiễu 52 3.1.3 Một số nhƣợc điểm giao thức phân phối khoá lƣợng tử BB84 54 3.1.4 Về độ an toàn giao thức phân phối khoá BB84 55 3.2 Kết luận mã hoá lƣợng tử thám mã lƣợng tử 58 Chƣơng IV Xây dựng công cụ mô 59 4.1 Hƣớng giải 59 4.2 Thƣ viện cốt lõi cho mơ tính tốn lƣợng tử 62 4.2.1 Một số vấn đề phải giải lập trình mơ 62 4.2.2 Xây dựng lớp 63 4.3 Ngôn ngữ Q – Ngơn ngữ lập trình lƣợng tử 74 4.3.1 Cấu trúc chƣơng trình viết ngơn ngữ Q 75 TIEU LUAN MOI download : skknchat@gmail.com 4.3.2 Sơ lƣợc ngôn ngữ Q 76 KẾT LUẬN 81 TÀI LIỆU THAM KHẢO 83 Tài liệu tiếng Việt 83 Tài liệu tiếng Anh 84 PHỤ LỤC A File Lex/Flex YACC/Bison ngôn ngữ Q 89 A1 File q.lex (File định nghĩa phân tích từ vựng) 89 A2 File q.y (File định nghĩa phân tích cú pháp) 96 PHỤ LỤC B Thuật tốn Peter Shor viết ngơn ngữ Q 103 B1 File shor.q 103 B2 File tinhtoansonguyen.q 104 B3 File biendoifourier.q 109 PHỤ LỤC C Một số hình kết chƣơng trình 110 PHỤ LỤC D Thƣ đồng ý tác giả Bernhard Ömer 111 TIEU LUAN MOI download : skknchat@gmail.com Danh mục từ viết tắt Chữ viết tắt Mơ tả B92 Giao thức phân phối khóa lƣợng tử B92 BB84 Giao thức phân phối khóa lƣợng tử BB84 CGI Giao diện cổng lập trình chung (Common Gateway Interface) FFT Phép biến đổi Fourier nhanh (Fast Fourier Transform) FT Phép biến đổi Fourier (Fourier Transform) ISAPI Internet Server Application Programming Interface LALR Look-Ahead LR parsers QFFT Phép biến đổi Fourier nhanh lƣợng tử (Quantum Fast Fourier Transform) qubit Bit lƣợng tử (Quantum bit) qureg Thanh ghi lƣợng tử (Quantum Register) RSA Mã hóa cơng khai RSA STL Thƣ viện khuôn mẫu chuẩn (Standard Template Library) TIEU LUAN MOI download : skknchat@gmail.com Danh mục hình vẽ Hình 1.1 Biểu diễn cổng NOT 22 Hình 1.2 Biểu diễn cổng Z 22 Hình 1.3 Biểu diễn cổng Hadamard 23 Hình 1.4 Biểu diễn cổng CNOT 24 Hình 1.5 Biểu diễn cổng Swap 24 Hình 1.6 Biểu diễn cổng dịch pha có điểu khiển 25 Hình 1.7 Biểu diễn cổng Toffoli 26 Hình 1.8 Biểu diễn cổng Toffoli 26 Hình 2.1 Sơ đồ mạch thuật tốn Deutch-Jozsa 33 Hình 2.2 Biểu diễn cổng quay góc 37 Hình 2.3 Phép biến đổi Fourier lƣợng tử 38 Hình 3.1 Sơ đồ giao thức BB84 49 Hình 4.1 Mơ hình xử lý trình biên dịch Q 75 Hình 4.2 Sơ đồ biểu diễn thuật tốn lƣợng tử đƣợc xử lý ngôn ngữ Q 76 TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh Mở đầu Hiện nay, kết hợp vật lý lƣợng tử sở toán học đại tạo móng cho việc xây dựng máy tính lƣợng tử tƣơng lai Theo dự báo máy tính lƣợng tử xuất vào khoảng năm 2010-2020 Isaac L Chuang, ngƣời đứng đầu nhóm nghiên cứu IBM máy tính lƣợng tử khẳng định ―Máy tính lượng tử bắt đầu định luật Moore kết thúc – vào khoảng năm 2020, mạch dự báo đạt đến kích cỡ nguyên tử phân tử‖ (nguyên văn ―Quantum computing begins where Moore's Law ends about the year 2020, when circuit features are predicted to be the size of atoms and molecules‖ http://domino.watson.ibm.com/comm/pr.nsf/pages/news.20000815_quantum.html) Với khả xử lý song song tốc độ tính tốn nhanh, mơ hình máy tính lƣợng tử đặt vấn đề lĩnh vực CNTT Vào năm 1994, Peter Shor đƣa thuật tốn phân tích số thừa số ngun tố máy tính lƣợng tử với độ phức tạp thời gian đa thức [45,46,47,48] Nhƣ máy tính lƣợng tử xuất dẫn đến hệ mã đƣợc coi an toàn nhƣ RSA [51] khơng cịn an tồn Điều đặt vấn đề nghiên cứu hệ mật [21,40,43,44,55,58] để đảm bảo an tồn máy tính lƣợng tử xuất Đồng thời, máy tính lƣợng tử xuất phịng thí nghiệm, nhu cầu mơ thuật tốn lƣợng tử máy tính thơng thƣờng tất yếu Ở Việt Nam nay, nhà tốn học bƣớc đầu có nghiên cứu tính tốn lƣợng tử mơ tính tốn lƣợng tử máy tính thơng thƣờng Ví dụ nhƣ nhóm Quantum trƣờng Đại học Bách Khoa Hà Nội [5] Tuy nhiên nhiều vấn đề để mở, việc cần có đầu tƣ thích đáng, tìm tòi, thực nghiệm sở thành tựu lý thuyết kinh nghiệm sẵn có giới, đồng thời áp dụng vào thực tế (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh Mục đích, đối tượng nội dung luận văn Trong khuôn khổ luận văn này, sở thành tựu có giới nƣớc tơi trình bày tổng quan nghiên cứu lý thuyết tính tốn lƣợng tử, đồng thời xây dựng cơng cụ mơ tính tốn lƣợng tử thuật tốn lƣợng tử Luận văn gồm có phần mở đầu, kết luận 04 chƣơng đề cập tới nội dung nhƣ sau: Chương 1: Các khái niệm nghiên cứu sở lý thuyết tính tốn lƣợng tử, khái niệm nhƣ qubit, ghi lƣợng tử, cổng mạch lƣợng tử nhƣ ngun lý tính tốn lƣợng tử nhƣ nguyên lý song song lƣợng tử, nguyên lý chép… Chương 2: Một số thuật toán lượng tử nghiên cứu số thuật toán lƣợng tử quan trọng nhƣ thuật toán Deutsch-Jozsa (thuật toán lƣợng tử đầu tiên), biến đổi Fourier lƣợng tử quan trọng thuật tốn Peter Shor tìm chu kỳ hàm số từ dẫn đến tốn phân tích số thừa số ngun tố Thuật tốn Peter Shor cho thấy sức mạnh tính tốn lƣợng tử so với tính tốn máy tính cổ điển Chương 3: Mã hố lượng tử Do có khả tính tốn bùng nổ theo cấp luỹ thừa tính tốn lƣợng tử dẫn đến việc phải nghiên cứu phƣơng pháp mã hoá sử dụng tính tốn lƣợng tử để chống lại khả thám mã sử dụng tính tốn lƣợng tử Mục đích chƣơng đề cập đến ví dụ mã hoá lƣợng tử thám mã lƣợng tử hệ mã lƣợng tử đơn giản phân phối khoá lƣợng tử BB84 Chương 4: Xây dựng công cụ mô Trên sở nghiên cứu lý thuyết tính tốn lƣợng tử thuật tốn lƣợng tử trên, phần trình bày chi tiết phƣơng pháp xây dựng mơ hình mơ tính tốn lƣợng tử máy tính cổ điển xây dựng trình biên dịch Q (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh dựa tảng mã nguồn mở có hỗ trợ cú pháp tiếng Việt nhằm mơ chƣơng trình lƣợng tử Ý nghĩa khoa học thực tiễn đề tài: Bảo mật đã, tiếp tục vấn đề sôi động lĩnh vực nghiên cứu khoa học nhƣ ứng dụng thực tế Không lĩnh vực quan cần đến bảo mật mà ứng dụng dân cần phải có đảm bảo bảo mật an toàn liệu Đặc biệt ứng dụng thƣơng mại điện tử ngày phát triển nhƣ bảo mật vấn đề sống ứng dụng Các hệ mã hố cơng khai (nhƣ RSA) hay bí mật (nhƣ AES) giao thức chia bí mật phần khơng thể thiếu ứng dụng ngày Nhƣng máy tính lƣợng tử xuất hệ mã hố đƣợc coi an toàn sử dụng rộng rãi nhƣ RSA khơng cịn đảm bảo an tồn Do việc nghiên cứu tính tốn lƣợng tử hệ mã dựa tính tốn lƣợng tử vấn đề cấp thiết nhằm đáp ứng nhu cầu tƣơng lai gần, mà máy tính lƣợng tử đƣợc thƣơng mại hố Điều khơng đảm bảo cho ứng dụng dân mà đảm bảo an toàn cho ứng dụng quân sự, nơi an tồn liệu đƣợc đặt lên hàng đầu Do đó, việc nghiên cứu tính tốn lƣợng tử có ý nghĩa thực tế, tiền đề xây dựng ứng dụng tính tốn lƣợng tử, khơng lĩnh vực bảo mật mà cịn mở rộng lĩnh vực khác Đặc biệt bối cảnh ―đi tắt đón đầu‖ Việt Nam, việc nghiên cứu tính tốn lƣợng tử góp phần giúp CNTT nƣớc nhà tiếp cận với công nghệ cao giới (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 97 sDefList* DEFLIST; string* STRING; } %type %type %type %type %type %type %type %type objlist obj eof expr exprlist stmt stmtlist block bodystm arg constdef vardef functdef quopdef procdef qufundef deflist arglist bodydef %token %token %token %token %token %token %token %token %token tokTYPE tokTENSOR tokID 402 tokCONS tokBASEFUNCT tokLISTFUNCT tokINCLUDE tokSET tokIDCALL 408 %token %token %token %token %token %token %token %token %token %token %token %token %token %token %token %token %token %token %token %token %token %token tokCONST tokCOND tokEXTERN tokOP tokPROC tokQUFUN tokFOR tokTO tokWHILE tokUNTIL tokBREAK tokRETURN tokIF tokELSE tokRANGE_LENGTH tokRANGE_END tokSTEP tokINPUT tokPRINT tokEXIT tokMEASURE tokRESET %token tokNEU %token tokTHI 400 401 403 404 405 406 407 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 550 551 (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 98 %token tokNGUOCLAI %token tokBATDAULAP %token tokCHODENKHI 552 553 554 %token %token %token %token %token %token 601 tokDUMP tokINSPECT 602 tokLOAD tokSAVE tokPLOT tokSHELL %token tokEOF %token tokERROR %nonassoc %left %left %left %nonassoc %left %left %left %left %left %left 603 604 605 606 900 901 tokTRANS tokINVTRANS tokSWAP tokOR tokXOR tokAND tokNOT tokEQ tokLEEQ tokGREQ tokNOTEQ '' '+' '-' '&' tokMOD '*' '/' tokNEG '^' '#' %% objlist: obj { $$ = YYNEW(objlist); YYTRY($$->push_back($1)); } | eof { yyObjList = $$ = YYNEW(objlist); YYACCEPT; } | objlist obj { YYTRY($1->push_back($2)); $$=$1; } | objlist eof { yyObjList = $$ = $1; YYACCEPT; } ; eof: tokEOF | ';' eof { $$ = 0; } { $$ = 0; } ; obj: | | | | | | functdef quopdef qufundef procdef vardef constdef stmt { { { { { { $$ $$ $$ $$ $$ $$ = $1; = $1; = $1; = $1; = $1; = $1; { $$ } } } } } } = $1; } (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 99 | block { $$ = $1; } | tokINCLUDE ';'{ $$ = YYNEW(sInclude(*$1)); } | ';' obj { $$ = $2; } ; functdef: tokTYPE tokIDCALL arglist ')' bodydef bodystm { $$ = YYNEW(sFunctDef(tType($1),$2,$3,$5,$6)); } | tokTYPE tokTENSOR tokIDCALL arglist ')' bodydef bodystm $$ = YYNEW(sFunctDef(tType($1,$2),$3,$4,$6,$7)); } ; quopdef: tokOP tokIDCALL arglist ')' bodydef bodystm { $$ = YYNEW(sQuOpDef($2,$3,$5,$6)); } | tokEXTERN tokOP tokIDCALL arglist ')' ';' { $$ = YYNEW(sQuOpDef($3,$4,0,0,0,1)); } | tokCOND tokOP tokIDCALL arglist ')' bodydef bodystm $$ = YYNEW(sQuOpDef($3,$4,$6,$7,1)); } | tokEXTERN tokCOND tokOP tokIDCALL arglist ')' ';' { $$ = YYNEW(sQuOpDef($4,$5,0,0,1,1)); } ; { { qufundef: tokQUFUN tokIDCALL arglist ')' bodydef bodystm { $$ = YYNEW(sQuFunDef($2,$3,$5,$6)); } | tokEXTERN tokQUFUN tokIDCALL arglist ')' ';' { $$ = YYNEW(sQuFunDef($3,$4,0,0,0,1)); } | tokCOND tokQUFUN tokIDCALL arglist ')' bodydef bodystm { $$ = YYNEW(sQuFunDef($3,$4,$6,$7,1)); } | tokEXTERN tokCOND tokQUFUN tokIDCALL arglist ')' ';' { $$ = YYNEW(sQuFunDef($4,$5,0,0,1,1)); } | tokQUFUN tokOP tokIDCALL arglist ')' bodydef bodystm { $$ = YYNEW(sQuFunDef($3,$4,$6,$7)); YYTRY($$->setFlag(flagFUNOP)); } | tokCOND tokQUFUN tokOP tokIDCALL arglist ')' bodydef bodystm { $$ = YYNEW(sQuFunDef($4,$5,$7,$8,1)); YYTRY($$->setFlag(flagFUNOP)); } ; procdef: tokPROC tokIDCALL arglist ')' bodydef bodystm { $$ = YYNEW(sProcDef($2,$3,$5,$6)); } | tokPROC tokIDCALL ')' bodydef bodystm { $$ = YYNEW(sProcDef($2,new sDefList(),$4,$5)); } ; vardef: tokTYPE tokID ';' { $$ = YYNEW(sVarDef(tType($1),$2)); } | tokTYPE tokID '[' expr ']' ';' { $$ YYNEW(sVarDef(tType($1),$2,$4,0)); } | tokTYPE tokTENSOR tokID '[' expr ']' ';' { $$ YYNEW(sVarDef(tType($1,$2),$3,$5,0)); } (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com = = (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 100 | tokTYPE tokID '=' expr ';' { YYNEW(sVarDef(tType($1),$2,0,$4)); } | tokTYPE tokTENSOR tokID '=' expr ';' YYNEW(sVarDef(tType($1,$2),$3,0,$5)); } | tokTYPE tokID '=' tokCOND ';' { $$ = YYNEW(sVarDef(tType($1),$2,0,new tId(CONDID)))); YYTRY($$->setFlag(flagCONDDEF)); } ; $$ { $$ = = sVar(new constdef: tokCONST tokID '=' expr ';' { $$ = YYNEW(sConstDef($2,$4)); }; block: '{' stmtlist '}' { $$ = $2; } | '{' '}' { $$ = YYNEW(sStmtList()); } ; bodydef: '{' deflist { $$ = $2; } | '{' { $$ = YYNEW(sDefList()); } ; bodystm: stmtlist '}' { $$ = $1; } | '}' { $$ = YYNEW(sStmtList()); } ; deflist: vardef { $$ = | constdef { $$ = | deflist vardef { | deflist constdef ; arg: YYNEW(sDefList()); YYTRY($$->append($1)); } YYNEW(sDefList()); YYTRY($$->append($1)); } YYTRY($1->append($2)); $$=$1; } { YYTRY($1->append($2)); $$=$1; } tokTYPE tokID { $$ = YYNEW(sArgDef(tType($1),$2)); } | tokTYPE tokTENSOR tokID { $$ = YYNEW(sArgDef(tType($1,$2),$3)); } ; arglist: arg { $$ = YYNEW(sDefList()); YYTRY($$->append($1)); } | arglist ',' arg { YYTRY($1->append($3)); $$=$1; } ; stmtlist: stmt { $$ = YYNEW(sStmtList()); YYTRY($$->append($1)); } | stmtlist stmt { YYTRY($1->append($2)); $$=$1; } ; stmt: tokIDCALL exprlist ')' ';' { $$ = YYNEW(sCall($1,$2)); } | tokIDCALL ')' ';' { $$ = YYNEW(sCall($1,new sExprList())); } | '!' tokIDCALL exprlist ')' ';' { $$ = YYNEW(sCall($2,$3,1)); } | tokID '=' expr ';' { $$ = YYNEW(sAssign(new sVar($1),$3)); } (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 101 | tokID '[' exprlist ']' '=' expr ';' { $$ = YYNEW(sAssign(new sVar($1),$6,$3)); } | expr tokSWAP expr ';' { $$ = YYNEW(sCall(new tId(SWAPID),new sExprList($1,$3))); } | expr tokTRANS expr ';' { $$ = YYNEW(sCall(new tId(FANOUTID),new sExprList($1,$3))); } | expr tokINVTRANS expr ';' { $$ = YYNEW(sCall(new tId(FANOUTID),new sExprList($1,$3),1)); } | tokFOR tokID '=' expr tokTO expr block { $$ = YYNEW(sFor(new sVar($2),$4,$6,$7)); } | tokFOR tokID '=' expr tokTO expr tokSTEP expr block { $$ = YYNEW(sFor(new sVar($2),$4,$6,$9,$8)); } | tokIF expr block { $$ = YYNEW(sIf($2,$3)); } | tokIF expr block tokELSE block { $$ = YYNEW(sIf($2,$3,$5)); } | tokNEU expr tokTHI block { $$ = YYNEW(sIf($2,$4)); } | tokNEU expr tokTHI block tokNGUOCLAI block { $$ = YYNEW(sIf($2,$4,$6)); } | tokWHILE expr block { $$ = YYNEW(sWhile($2,$3)); } | block tokUNTIL expr ';' { $$ = YYNEW(sUntil($3,$1)); } | tokBATDAULAP block tokCHODENKHI expr ';' { $$ = YYNEW(sUntil($4,$2)); } | tokBREAK ';' { $$ = YYNEW(sBreak()); } | tokRETURN expr ';' { $$ = YYNEW(sReturn($2)); } | tokINPUT tokID ';' { $$ = YYNEW(sInput(new sVar($2),0)); } | tokINPUT expr ',' tokID ';' { $$ = YYNEW(sInput(new sVar($4),$2)); } | tokPRINT ';' { $$ = YYNEW(sPrint(new sExprList())); } | tokPRINT exprlist ';' { $$ = YYNEW(sPrint($2)); } | tokEXIT ';' { $$ = YYNEW(sExit(0)); } | tokEXIT expr ';' { $$ = YYNEW(sExit($2)); } | tokMEASURE expr ';' { $$ = YYNEW(sMeasure($2,0)); } | tokMEASURE expr ',' tokID ';' { $$ = YYNEW(sMeasure($2,new sVar($4))); } | tokRESET ';' { $$ = YYNEW(sReset()); } | tokDUMP ';' { $$ = YYNEW(sDump(0)); } | tokDUMP expr ';' { $$ = YYNEW(sDump($2)); } | tokPLOT ';' { $$ = YYNEW(sPlot()); } | tokPLOT expr ';' { $$ = YYNEW(sPlot($2)); } | tokPLOT expr ',' expr ';' { $$ = YYNEW(sPlot($2,$4)); } | tokINSPECT ';' { $$ = YYNEW(sInspect(0)); } | tokINSPECT exprlist ';' { $$ = YYNEW(sInspect($2)); } | tokLOAD ';' { $$ = YYNEW(sLoad(0)); } | tokLOAD expr ';' { $$ = YYNEW(sLoad($2)); } | tokSAVE ';' { $$ = YYNEW(sSave(0)); } | tokSAVE expr ';' { $$ = YYNEW(sSave($2)); } | tokSHELL ';' { $$ = YYNEW(sShell()); } | tokSET ';' { $$ = YYNEW(sSet(*$1,0)); } | tokSET expr ';' { $$ = YYNEW(sSet(*$1,$2)); } (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 102 ; exprlist: expr { $$ = YYNEW(sExprList()); YYTRY($$->append($1)); } | exprlist ',' expr { YYTRY($1->append($3)); $$=$1; } ; expr: tokCONS { $$ = $1; } | tokID { $$ = YYNEW(sVar($1)); } | tokID '[' exprlist ']' { $$ = YYNEW(sSubscript(new sVar($1),$3)); } | tokID '[' expr tokRANGE_LENGTH expr ']' { $$ = YYNEW(sSubRange(new sVar($1),$3,$5,SUBRANGE_LENGTH)); } | tokID '[' expr tokRANGE_END expr ']' { $$ = YYNEW(sSubRange(new sVar($1),$3,$5,SUBRANGE_END)); } | tokIDCALL exprlist ')' { $$ = YYNEW(sFunctCall($1,$2)); } | '-' expr %prec tokNEG { $$ = YYNEW(sNeg($2)); } | tokNOT expr { $$ = YYNEW(sNot($2)); } | '#' expr { $$ = YYNEW(sLength($2)); } | expr tokOR expr { $$ = YYNEW(sOr($1,$3)); } | expr tokXOR expr { $$ = YYNEW(sXor($1,$3)); } | expr tokAND expr { $$ = YYNEW(sAnd($1,$3)); } | expr tokEQ expr { $$ = YYNEW(sEqual($1,$3)); } | expr tokLEEQ expr { $$ = YYNEW(sLeEq($1,$3)); } | expr tokGREQ expr { $$ = YYNEW(sLeEq($3,$1)); } | expr tokNOTEQ expr { $$ = YYNEW(sNotEq($1,$3)); } | expr '' expr { $$ = YYNEW(sLess($3,$1)); } | expr '+' expr { $$ = YYNEW(sAdd($1,$3)); } | expr '-' expr { $$ = YYNEW(sSub($1,$3)); } | expr '&' expr { $$ = YYNEW(sConcat($1,$3)); } | expr tokMOD expr { $$ = YYNEW(sMod($1,$3)); } | expr '*' expr { $$ = YYNEW(sMult($1,$3)); } | expr '/' expr { $$ = YYNEW(sDiv($1,$3)); } | expr '^' expr { $$ = YYNEW(sPow($1,$3)); } | '(' expr ')' { $$ = $2; } | tokBASEFUNCT expr ')' { $$ = YYNEW(sBaseFunct($1,$2)); } | tokLISTFUNCT exprlist ')' { $$ = YYNEW(sListFunct($1,$2)); } | tokLISTFUNCT ')' { $$ = YYNEW(sListFunct($1,new sExprList())); } ; (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 103 PHỤ LỤC B Thuật toán Peter Shor viết ngôn ngữ Q B1 File shor.q thu vien ngoai "tinhtoansonguyen.q"; thu vien ngoai "biendoifourier.q"; thu tuc petershor(songuyen number) { songuyen width=ceil(log(number,2)); thanhghiluongtu thanhghi1[2*width]; thanhghiluongtu thanhghi2[width]; songuyen qmax=2^width; songuyen factor; songuyen m; sothuc c; songuyen x; songuyen p; songuyen q; songuyen a; songuyen b; songuyen e; // size of number in bits // first register // second register // e=x^(q/2) mod number neu number mod == thi { hienthi "so phai la so le"; thoat; } neu kiemtranguyento(number) thi { hienthi "So nhan vao la so nguyen to"; thoat; } neu kiemtraluythuanguyento(number) thi { hienthi "So nhan vao la luy thua cua so nguyen"; thoat;}; bat dau lap { bat dau lap { x=floor(random()*(number-3))+2; } cho den gcd(x,number)==1; hien thi "chon ngau nhien x =",x; H(thanhghi1); expn(x,number,thanhghi1,thanhghi2); ghi thanhghi2; dft(thanhghi1); ghi thanhghi1,m; lam sach; neu m==0 thi { hien thi "Do duoc gia tri tai ghi thu nhat Thu lai "; } nguoc lai { c=m*0.5^(2*width); q=timphanso(c,qmax); p=floor(q*c+0.5); hien thi "Do duoc tai bit thu", m,"voi xac suat", c,", xap xi cua ",c,"la",p,"/",q; (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 104 neu q mod 2==1 va 2*q1 va factor1 thi { CNot(sum[1],sum[0] & s & e); } CNot(sum[0],s & e); neu a0 thi { Not(s); } } nguoc lai { neu a0 va a1 thi { neu #sum>1 thi { CNot(sum[1],sum[0] & e); } CNot(sum[0],e); } }; neu #sum>1 thi { CNot(sum[1],b & sum[0]); } CNot(sum[0],b); // a0 and a1 dneufer? // write a into sect qubit // set carry neu available // add a // restore sect qubit // set carry neu available // add a // Add qubit b // set carry neu available // add b } // conditional multiplexed binary adder for one of integers // and thanhghiluongtu No output carry cond qufunct muxadd(int a0,int a1,hangsoluongtu sel,hangsoluongtu b,quvoid sum) { int i; lap i=0 toi #b-2 { // fulladd first #b-1 bits muxaddbit(bit(a0,i),bit(a1,i),sel,b[i],sum[i:i+1]); } // half add last bit muxaddbit(bit(a0,#b-1),bit(a1,#b-1),sel,b[#b-1],sum[#b-1]); } // Comparison operator flag is toggled neu bMSB(b) disable further comparison neu MSB(a)b[i] neu still undecided (j[0]=1) result is LSB(a)>LSB(b) } // conditional addition mod n for integer and thanhghiluongtu // flag is set neu a+b (a+sum) mod n cond qufunct oaddn(int a,int n,thanhghiluongtu sum) { thanhghiluongtu j[#sum]; thanhghiluongtu f[1]; hangsoluongtu e=cond; // explicit enable register (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 107 neu e thi { addn(a,n,sum,f,j); } // junk -> a+b mod n Swap(sum,j); // swap junk and sum CNot(f,e); // toggle flag neu e thi { !addn(n-a,n,sum,f,j); } // uncompute b to zero } // Conditional Multiplication thanhghiluongtu b, // prod ab mod n cond qufunct omuln(int a,int n,thanhghiluongtu b) { thanhghiluongtu j[#b]; neu gcd(a,n)>1thi { thoat "omuln: a and n have to be relativly prime"; } muln(a,n,b,j); !muln(invmod(a,n),n,j,b); cxor(j,b); cxor(b,j); } // Modular exponentiation: b -> x^a mod n cond qufunct expn(int a,int n,hangsoluongtu b,quvoid ex) { int i; Not(ex[0]); lap i=0 toi #b-1 { neu b[i] thi { omuln(powmod(a,2^i,n),n,ex); } } // start with // ex -> ex*a^2^i mod n } (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 108 set library 0; (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 109 B3 File biendoifourier.q set library 1; // pseudo classic operator to swap bit order cond qufunct flip(qureg q) { songuyen i; // declare loop counter lap i=0 toi #q/2-1 { // swap symmetric bits Swap(q[i],q[#q-i-1]); } } // discrete Fourier transform (Coppersmith) operator dft(thanhghiluongtu q) { // main operator hangso n=#q; // set n to length of input songuyen i; songuyen j; // declare loop counters lap i=1 toi n { lap j=1 toi i-1 { // apply conditional phase gates V(pi/2^(i-j),q[n-i] & q[n-j]); } H(q[n-i]); // qubit rotation } flip(q); // swap bit order of the output } set library 0; (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh 110 PHỤ LỤC C Một số hình kết chương trình Kết chạy thuật tốn Peter Shor phân tích số 15: Kết chạy thuật tốn Peter Shor phân tích số 21: (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh (LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh(LUAN.van.THAC.si).mot.so.phuong.phap.ma.hoa.luong.tu.va.mo.phong.tren.may.tinh