Kwantowe języki programowania



Podobne dokumenty
Wykorzystanie metod ewolucyjnych w projektowaniu algorytmów kwantowych

Informatyka Kwantowa Sekcja Informatyki Kwantowej prezentacja

Obliczenia inspirowane Naturą

Algorytm Grovera. Kwantowe przeszukiwanie zbiorów. Robert Nowotniak

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Funkcja (podprogram) void

Symulacja obliczeń kwantowych

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Wstęp do algorytmiki kwantowej

Protokół teleportacji kwantowej

Informatyka kwantowa. Karol Bartkiewicz

Obliczenia inspirowane Naturą

Wstęp do Programowania, laboratorium 02

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wprowadzenie do teorii komputerów kwantowych

Język programowania komputerów kwantowych oparty o model macierzy gęstości

Szablony funkcji i szablony klas

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Składnia języka EPL. EUCIP Programming Language

Część 4 życie programu

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Field of study: Computer Science Study level: First-cycle studies Form and type of study: Full-time studies. Auditorium classes.

Podstawy programowania. Wprowadzenie

PARADYGMATY PROGRAMOWANIA Wykład 4

Python wstęp do programowania dla użytkowników WCSS

Wstęp do programowania

Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego

Wstęp do programowania

High level programming in quantum computer science

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 13

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

EGZAMIN MATURALNY 2011 INFORMATYKA

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Informatyka kwantowa i jej fizyczne podstawy Rezonans spinowy, bramki dwu-kubitowe

Paradygmaty programowania

O ALGORYTMACH I MASZYNACH TURINGA

Współczesna problematyka klasyfikacji Informatyki

KOMPILATOR JĘZYKA QCL QCL2QML 1

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

bity kwantowe zastosowania stanów splątanych

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wprowadzenie do szablonów szablony funkcji

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Wstęp do programowania

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Proste algorytmy w języku C

Wprowadzenie do szablonów szablony funkcji

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Język C zajęcia nr 11. Funkcje

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

Alan M. TURING. Matematyk u progu współczesnej informatyki

1 Podstawy c++ w pigułce.

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Jerzy Nawrocki, Wprowadzenie do informatyki

TEMAT : KLASY DZIEDZICZENIE

O informatyce kwantowej

Komputery Kwantowe. Sprawy organizacyjne Literatura Plan. Komputery Kwantowe. Ravindra W. Chhajlany. 27 listopada 2006

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Wskaźniki. Informatyka

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Zaawansowany kurs języka Python

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Wykład 1

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Wskaźniki. Programowanie Proceduralne 1

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Semestr 1 suma pkt ECTS dla wszystkich kursów w semestrze: 30

Algorytm selekcji Hoare a. Łukasz Miemus

KOTLIN. Język programowania dla Androida

Podstawy programowania komputerów

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Teoria obliczeń i złożoność obliczeniowa

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

PRZEWODNIK PO PRZEDMIOCIE

Proste algorytmy w języku C

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Język ludzki kod maszynowy

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Podstawy programowania skrót z wykładów:

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Kurs rozszerzony języka Python

Wprowadzenie do programowania

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Podstawy programowania C. dr. Krystyna Łapin

Informatyka kwantowa. Zaproszenie do fizyki. Zakład Optyki Nieliniowej. wykład z cyklu. Ryszard Tanaś. mailto:tanas@kielich.amu.edu.

Transkrypt:

Kwantowe języki programowania Robert Nowotniak IV rok informatyki (Sztuczna Inteligencja) WWW: http://robert.nowotniak.com/ e-mail: <robercik@stud.ics.p.lodz.pl>

Plan referatu Możliwość symulacji komputera kwantowego Obecne języki kwantowe Biblioteki kwantowe dla Perla Język QCL Informacje ogólne Podstawy składni Proste przykłady Dalsze informacje Podsumowanie

Symulowanie komputera kwantowego Czy można symulować takie komputery? W jaki sposób? Prace Alana Turinga (1936) Wykonywanie dowolnego procesu algorytmicznego może być symulowane za pomocą odpowiedniego, abstrakcyjnego mechanizmu (maszyna Turinga, rachunek lambda Church'a). Maszyna Turinga Matematyczny model komputera MT = <Q, Σ, δ, Γ, q 0, B, F> Kwantowa Maszyna Turinga (David Deutsch, 1985)

Symulowanie komputera kwantowego Maszyna Turinga pozwala symulować także algorytmy kwantowe, jednak ta symulacja ma wykładniczą złożoność obliczeniową. Liniowy przyrost liczby kubitów w rejestrze kwantowym powoduje wykładniczy przyrost wymiaru przestrzeni stanów takiego rejestru. Symulując komputer kwantowy, nie mamy dobrodziejstw kwantowej równoległości, którą musimy symulować z powyższą złożonością.

Języki programowania kwantowego Zrealizowane implementacje: QCL (interpreter języka napisany w C++) Biblioteki Perla: Quantum::Entaglement Umożliwia kwantowe splątanie zmiennych jako przykład zaimplementowany jest algorytm Shora Quantum::Superposition libquantum (biblioteka dla języka C) Q-gol (w języku CaML + interfejs Tcl/Tk) Niezaimplementowane (jedynie projekty): qgcl, QML, Quantum C

Quantum::Entanglement #!/usr/bin/perl use Quantum::Entanglement qw(:default :complex :QFT); my $c = entangle(0.7071, 0, 0.7071*i, 1); # sqrt(2) / 2 * ( 0> + i 1>) my $d = entangle(0.7071, 0, 0.7071, 1); # sqrt(2) / 2 * ( 0> + 1>) # # $e <- 0.5* 0*0> + 0.5*i 0*1> + 0.5* 1*0> + 0.5*i 1*1> # Kwantowe splatanie zmiennej $e z $c oraz $d # $e = $c * $d; # # Pomiar wartoś ci $e. Redukcja funkcji falowej # if ($e == 1) { # Rezultatem pomiaru jest, ż e $c == 1, $d == 1 print '$e == 1'; print "\n"; } else { } # Pozostał e przypadki print '$e!= 1'; print "\n";

Quantum::Entanglement Funkcja entangle() zwraca wartość, która jest superpozycją wielu wartości z poszczególnymi amplitudami prawdopodobieństwa. Działania na kilku zmiennych będących w superpozycji stanów powodują kwantowe splątanie tych zmiennych. Przeciążone operatory konwersji i relacji dla zmiennej będącej w superpozycji powodują redukcje odpowiadającej jej funkcji falowej i dekoherencję stanu tej zmiennej oraz zmiennych z nią splątanych. Specjalne funkcje p_op i p_func służą do wykonywania operacji na zmiennych będących w superpozycji (odpowiedniki bramek kwantowych).

libquantum API quantum_reg quantum_new_qureg(max_unsigned initval, int width); void quantum_print_qureg(quantum_reg reg); void quantum_cnot(int control, int target, quantum_reg *reg); void quantum_toffoli(int control1, int control2, int target, quantum_reg *reg); void quantum_sigma_x(int target, quantum_reg *reg); void quantum_sigma_y(int target, quantum_reg *reg); void quantum_sigma_z(int target, quantum_reg *reg); void quantum_r_x(int target, float gamma, quantum_reg *reg); void quantum_r_y(int target, float gamma, quantum_reg *reg); void quantum_r_z(int target, float gamma, quantum_reg *reg); void quantum_hadamard(int target, quantum_reg *reg); MAX_UNSIGNED quantum_measure(quantum_reg reg); int quantum_bmeasure(int pos, quantum_reg *reg);

libquantum #include <stdio.h> #include <stdlib.h> #include <time.h> #include <quantum.h> int main () { quantum_reg reg; int wynik; srandom(time(0)); reg = quantum_new_qureg(0, 1); quantum_hadamard(0, &reg); wynik = quantum_bmeasure(0, &reg); printf("odczytana warto ś ć : %d!\n", wynik); } return 0;

Quantum Computation Language Autor: PhD Bernhard Ömer http://tph.tuwien.ac.at/~oemer/qcl.html Aktualna wersja: qcl 0.6.3 Ostatnie wydanie: 14 grudnia 2006 (aktywnie rozwijany!) Wersje binarne dostępne obecnie tylko dla systemu GNU/Linux na architektury: i686 AMD64 (układy EM64T) Wolne oprogramowanie (licencja GNU/GPL)

Język QCL Język QCL: Strukturalny Imperatywny Kwantowy Język trzeciej generacji Składnia przypominająca język C Podobne podstawowe typy danych Typ danych qureg rejestr kwantowy Wbudowane podstawowe operacje kwantowe Bramka Hadamarda (H(), Mix()) Bramka NOT, CNOT Bramka fazy (CPhase) Definiowanie własnych operatorów kwantowych (qufunc)

Uruchomienie interpretera QCL: Język QCL $ qcl --bits=5 QCL Quantum Computation Language (5 qubits, seed 1166577494) [0/5] 1 0> Podejrzenie zawartości pamięci kwantowej: qcl> dump : STATE: 0 / 5 qubits allocated, 5 / 5 qubits free 1 0> qcl> _ Utworzenie nowego 2-kubitowego rejestru kwantowego: qcl> qureg a[2]; qcl> dump a; : SPECTRUM a: <0,1> 1 0> qcl> _ Negacja stanu rejestru kwantowego: qcl> Not(a); [2/5] 1 3> qcl> dump : STATE: 2 / 5 qubits allocated, 3 / 5 qubits free 1 3> qcl> _

Język QCL Utworzenie superpozycji stanów czystych tego rejestru (bramka Hadamarda): qcl> H(a); [2/5] 0.5 0> - 0.5 1> - 0.5 2> + 0.5 3> qcl> _ Pomiar wartości rejestru - dekoherencja stanu. qcl> measure a; [2/5] -1 1> qcl> _ Ponowne podejrzenie wartości rejestru: qcl> dump a; : SPECTRUM a: <0,1> 1 1> qcl>

Przykład: Algorytm Deutsch'a w QCL Algorytm służy do zbadania funkcji: F :{0,1} {0,1} Istnieją dokładnie cztery takie funkcje: dwie funkcje różnowartościowe i dwie stałe F 1 F 2 F 3 F 4 0 1 0 0 1 1 0 1 0 1 Sprawdzenie wartości funkcji dla jednego argumentu nie pozwala rozstrzygnąć, z jaką funkcją mamy do czynienia Ale algorytm kwantowy może to wykonać.

Przykład Definicje wszystkich czterech funkcji w QCL: // ~x qufunct F1(qureg out, quconst in) { CNot(out, in); Not(out); } // x qufunct F2(qureg out, quconst in) { CNot(out, in); } // 0 qufunct F3(qureg out, quconst in) { } // 1 qufunct F4(qureg out, quconst in) { Not(out); }

Algorytm Deutsch'a w QCL print "Algorytm Deutsch'a"; qureg in[1]; qureg out[1]; int result; reset; Not(out); H(out); H(in); F4(out,in); H(in); H(out); Jednokrotne wywołanie jednej ze zdefiniowanych funkcji. measure in, result; if (result == 0) { print "Funkcja stala"; } else { print "Funkcja roznowartosciowa"; }

Język QCL Podstawowe instrukcje: reset include print input qureg qufunc measure dump

Literatura 1) http://www.quantiki.org/, http://ocw.mit.edu/ocwweb/ 2) Prace Bernharda Ömera, http://tph.tuwien.ac.at/~oemer/qcl.html 1) A Procedural Formalism for Quantum Computing 2) Quantum Programming in QCL 3) Structured Quantum Programming 3) Artykuł w jednym z numerów Software Developer Journal 4) R.Penrose Nowy umysł cesarza 5) S.Imre, F.Balazs - Quantum Computing and Communications: Engineering Approach 6) Samuel Braunstein - Quantum Computing (Wiley Press, 1999) 7) Mika Hirvensalo - Algorytmy Kwantowe, WSiP 2004 8) G.Chen, R.Brylinski - Mathematics of Quantum Computation 9) D.C.Marinescu - Lectures Notes on Quantum Computing and Quantum Information Theory for Non-Physicists

Literatura 10) Michel Le Bellac - Quantum Physics, Cambridge Press 11) R.Shankar - Principles of Quantum Mechanics, 1994 12) J.J.Sakurai - Modern Quantum Mechanics 13) Asher Peres - Quantum Theory: Concepts and Methods 14) Devid J.Griffiths - Introduction to Quantum Mechanics, 1995 15) Andre Berthiaume - Quantum Computation 16) John Preskill - Quantum Computing: Pro and Con, 1997 17) S.K.Shukla, R.I.Bahar - Nano, Quantum and Molecular Computing 18) M.A.Nielsen, I.L.Chuang - Quantum Computation and Quantum Information (Cambridge University Press, 2000) 19) Jozef Gruska - Quantum Computing (McGraw-Hill, 1999) 20) C.Williams, S.Clearwater - Explorations in Quantum Computing

Dziękuję