Officina Turini · Freeware didattico · C++14 / Qt5 · v0.16.0
Un calcolatore classico manipola bit. Un processore quantistico controlla stati fisici descritti da ampiezze complesse. QuantumLab non è un processore quantistico: il tuo PC simula queste ampiezze, così puoi interrompere l’esperimento e guardare ciò che su hardware reale non puoi leggere direttamente.
Lezioni 01–04: osserva. 05–14: costruisci e verifica. 15–21: scopri gli algoritmi. Il laboratorio parametrico ti permette poi di cambiare oracolo, segreto e numero di iterazioni.
Per un qubit ideale scriviamo |ψ⟩ = α|0⟩ + β|1⟩. Le due ampiezze α e β possono essere complesse; le probabilità sono |α|² e |β|², e la loro somma è 1.
Con n qubit la base computazionale contiene 2n stati: |000…0⟩ fino a |111…1⟩. Il simulatore conserva 2n ampiezze complesse; non significa poter leggere 2n risposte in una misura.
QuantumLab numera q0 come bit meno significativo, a destra. Con due qubit, |10⟩ indica q1=1 e q0=0. Applicare X(q0) a |00⟩ produce |01⟩; applicare X(q1) produce |10⟩.
Moltiplicare tutto lo stato per eiφ non cambia nessuna previsione misurabile. Cambiare invece soltanto il segno di una delle ampiezze può cambiare una futura interferenza. Per questo le sfide sono valutate con la fedeltà, che ignora la fase globale ma distingue le fasi relative.
Una misura seleziona un esito secondo le probabilità e collassa lo stato simulato. Le preparazioni ripetute (10, 100, 1000 o 10000) estraggono invece campioni indipendenti dalla stessa preparazione; non sono mille misure consecutive sul medesimo qubit collassato. Una misura singola non verifica un algoritmo probabilistico.
| Porta | Che cosa fa | Prova |
|---|---|---|
| X | Scambia |0⟩ e |1⟩ (NOT della base computazionale). | X·X = identità. |
| H | Mescola le ampiezze: H|0⟩=(|0⟩+|1⟩)/√2. | H·H = identità. |
| Z | Cambia segno della componente |1⟩; non cambia immediatamente le probabilità. | H–Z–H equivale a X. |
| P(θ) | Moltiplica l’ampiezza di |1⟩ per eiθ. | P(180°)=Z; l’editor usa gradi. |
| CNOT | Se il controllo è 1, inverte il qubit bersaglio. | H(q0), CNOT(q0→q1): Bell. |
Prima della misura queste trasformazioni sono unitarie e reversibili. Il circuito applica le porte in ordine temporale; una CNOT ha due qubit distinti, uno di controllo e uno bersaglio.
Lezione: problema, suggerimenti e verifica della sfida. Algoritmi: parametri degli oracoli e checkpoint. Editor: porte e qubit. Misure: previsione, campionamento, validazione e report.
La vista circuito permette zoom e selezione del passo; sotto compaiono ampiezze e probabilità; il Laboratory Notebook registra i passaggi. Gli splitter regolano le dimensioni. La disposizione è ricordata da QSettings.
Avanza di una porta cambia lo stato simulato. Naviga a un checkpoint ricostruisce uno stato intermedio senza effettuare misure fisiche. Misura campiona e collassa. Le 1000 prove campionano molte preparazioni indipendenti.
Per cambiare una lezione preparata crea una copia di lavoro. Inserisci o sostituisci porte; il software invalida le misure precedenti. Salva il circuito in .qlab.json; esporta previsioni, conteggi e misure in un JSON risultati separato. La modifica non salvata è indicata nel titolo e protetta alla chiusura.
Il selettore cambia le etichette, i tooltip, le spiegazioni e il manuale; la lingua e la geometria sono ricordate tramite QSettings di Officina Turini / QuantumLab.
Per ogni esercizio usa questo ciclo: (1) previsione dell’esito, (2) costruzione o esplorazione del circuito, (3) osservazione delle ampiezze, (4) misura ripetuta, (5) spiegazione. Una risposta sorprendente è un buon risultato sperimentale se poi sai ricostruirne la causa.
Le sfide 05–14 iniziano vuote e sono giudicate sullo stato finale e, dove richiesto, sul rispetto di vincoli didattici (porte obbligatorie, numero minimo). Non sono giudicate sulla fortuna di una misura.
Un oracolo è il circuito reversibile che rende accessibile una funzione. Nel modello di interrogazioni un uso completo di Uf vale una chiamata, anche se richiede numerose porte X, H, P e CNOT. Distinguere chiamate, porte elementari, memoria e tempo reale è indispensabile.
La funzione ha un ingresso di un bit ed è promessa costante oppure bilanciata. Un algoritmo classico deterministico può richiedere due interrogazioni per decidere con certezza; Deutsch una. Si misura il solo qubit dati q0: 0=costante, 1=bilanciata. Il qubit ausiliario non è la risposta.
L’oracolo restituisce f(x)=s·x mod 2. Per il segreto s=101, tre interrogazioni classiche sui vettori di base ricostruiscono i bit; il circuito quantistico usa una chiamata logica. Leggi q2q1q0; q3 è ausiliario e può essere casuale.
La ricerca è non strutturata, con un solo stato marcato. L’oracolo cambia il segno di quello stato; la diffusione converte la fase in maggiore ampiezza. Per N elementi il numero ottimale di interrogazioni cresce come O(√N), non come O(N). Il numero di porte per costruire oracolo e diffusione va però contato separatamente.
| 3 qubit, bersaglio |101⟩ | Probabilità ideale |
|---|---|
| Preparazione uniforme | 12,5% |
| 1 iterazione | 78,125% |
| 2 iterazioni | 94,53125% |
| 3 iterazioni | 33,0078125% |
| 4 iterazioni | 1,220703125% |
QuantumLab è un simulatore ideale basato su un vettore di stato. Il PC memorizza una ampiezza complessa per ogni stato della base. Con due double per ampiezza occorrono circa 16·2n byte solo per lo stato.
| Qubit | RAM del solo vettore (double complessi) |
|---|---|
| 8 | 4 KiB |
| 20 | 16 MiB |
| 30 | 16 GiB |
| 32 | 64 GiB |
Il limite dell’editor corrente è volutamente 1–8 qubit e il laboratorio parametrico Grover usa 2–3 qubit. Il supporto a 30 qubit è un possibile sviluppo, non una funzione attuale.
Il software non simula in modo completo rumore dei gate, decoerenza, connettività dei processori reali, error correction o costi energetici. Le ampiezze visualizzate sono informazioni interne al modello numerico: su hardware reale non sono accessibili direttamente con una sola misura.
La suite scientifica v0.11 confronta il motore con vettori analitici e un secondo calcolatore matriciale indipendente, verifica conservazione della norma, replay e algoritmi. Il report della scheda Misure espone test PASS/FAIL ed esporta JSON.
Attenzione: un insieme di test positivo non dimostra l’assenza di ogni bug, e la compilazione su un altro PC richiede collaudo. Se un risultato sembra incoerente, riduci il circuito a poche porte e confronta ampiezze, probabilità e checkpoint.
La fedeltà tra due stati puri normalizzati |ψ⟩ e |φ⟩ è F = |⟨φ|ψ⟩|². Essa vale 1 anche se i due stati differiscono soltanto per una fase globale. Le sfide possono richiedere inoltre particolari porte o un numero minimo di operazioni.
Perché il campionamento è casuale. La probabilità teorica non è una quota imposta a ogni lotto di prove.
Perché Z cambia una fase relativa. Inserisci una H successiva per renderne osservabile l’effetto.
La verifica confronta lo stato (comprese fasi relative) e alcuni vincoli della lezione. Prova le lezioni 11 e 13.
Il qubit ausiliario è in sovrapposizione; la risposta è nei soli qubit dati.
L’operazione è una rotazione: dopo il punto ottimo la probabilità riprende a diminuire.
No: il programma è un computer classico che simula un circuito quantistico. Il vantaggio discusso riguarda il numero astratto di interrogazioni, non il tempo del simulatore.
I circuiti salvati usano .qlab.json; i dati delle misure si esportano separatamente. Il programma non salva automaticamente un circuito modificato solo perché ricorda geometria e lingua.
La guida integrata è una risorsa compilata nell’applicazione. Se stai modificando i sorgenti, verifica che il file Help/QuantumLabHelp.qrc venga processato da Qt RCC.
| Termine | Significato operativo |
|---|---|
| Ampiezza | Numero complesso il cui modulo quadrato dà una probabilità. |
| Base computazionale | Gli stati indicizzati dalle stringhe 0/1. |
| Qubit ausiliario | Qubit di servizio non necessariamente parte della risposta. |
| Interferenza | Combinazione di ampiezze con somma o cancellazione. |
| Fase relativa | Differenza di fase fra ampiezze, fisicamente rilevante. |
| Fase globale | Fattore di fase comune allo stato, non osservabile. |
| Entanglement | Stato congiunto non fattorizzabile in stati separati. |
| Fedeltà | Sovrapposizione quadratica fra stati puri. |
| Oracolo | Implementazione reversibile di una funzione interrogata dall’algoritmo. |
| Shot | Una preparazione seguita da misura. |
| Checkpoint | Stato ricostruito per osservazione didattica, non misura fisica. |
Queste formule non sono un prerequisito: spiegano quello che hai già osservato.
La H applicata a |0⟩ produce (1/√2,1/√2); Z nega la seconda componente; una nuova H produce (0,1). Ecco il calcolo della lezione 04.
Due qubit indipendenti si descrivono con un prodotto tensoriale. La base è ordinata |00⟩, |01⟩, |10⟩, |11⟩; q0 è a destra. CNOT è una trasformazione unitaria in quattro dimensioni.
Per p=1/2 e M=1000, la deviazione standard della frequenza è circa 1,58 punti percentuali. Un risultato 515/485 non smentisce il modello 50/50.
La fase globale scompare prendendo il modulo quadrato. Invece (|0⟩+|1⟩)/√2 e (|0⟩−|1⟩)/√2 hanno fedeltà zero pur producendo entrambi 50/50.
Vale per un solo stato marcato, preparazione uniforme e k iterazioni ideali. Spiega il massimo e la sovra-rotazione delle lezioni 20–21.
Ogni gruppo deve formulare un’ipotesi controllabile prima di premere Esegui. Lo scopo è costruire intuizione, non memorizzare nomi di porte.
Aggiungi Deutsch, Grover a due qubit, poi tre qubit con una e due iterazioni. Ogni gruppo riporti separatamente interrogazioni, numero di porte e probabilità di successo.
Il pulsante Laboratorio didattico apre una finestra non modale con quattro schede. La casella Parto da zero nella finestra principale nasconde dati numerici e schede avanzate; disattivala per approfondire. Le due viste usano lo stesso stato simulato.
Nella prima scheda scegli le attività 1, 2 e 3 (lezioni 01, 02 e 04). Prima di eseguire porte, scegli una distribuzione: sempre lo stato 0, sempre lo stato 1, tutti gli esiti equiprobabili, oppure non so ancora. Con più qubit i bit mostrati si riferiscono all’intero registro. Scrivi una motivazione e premi Registra previsione. Dopo l’ultima porta il programma confronta la previsione con la teoria, indipendentemente dalla singola estrazione. Ricominciare o modificare il circuito invalida la previsione registrata.
Carica H/H-Z, H-H/H-Z-H oppure Grover con 1/2 o 2/3 iterazioni; in alternativa copia il circuito corrente in A e B. Sono copie indipendenti. I selettori Passo A e Passo B ricostruiscono prefissi unitari del circuito, senza misure intermedie. Le stringhe delle porte sono mostrate sopra la tabella; per circuiti lunghi passa il puntatore sul testo per leggerlo interamente. Il comando Aggiungi H a entrambi è disponibile per due circuiti a un qubit.
Le frecce mostrano direzione della fase e modulo dell’ampiezza; la fase numerica è in gradi. Per ampiezza nulla la fase è indefinita. Una fase globale non identifica uno stato fisico diverso.
Nella scheda Misure della finestra principale scegli 10, 100, 1000 o 10000 preparazioni. La tabella distingue probabilità teorica, conteggio e frequenza. Il quaderno registra il numero di prove. Gli esiti di una serie non sono una quota obbligatoria 50/50. Le sfide mantengono i vincoli minimi di porte dichiarati: sono ammesse soluzioni più lunghe equivalenti, salvo porte vietate. Il feedback segnala quando le probabilità coincidono ma la fase relativa differisce.
File → Annulla modifica circuito (Ctrl+Z) e Ripristina modifica circuito (Ctrl+Y) agiscono su inserimento, sostituzione, eliminazione, spostamento e numero di qubit. La cronologia conserva fino a 100 modifiche, si azzera cambiando documento o caricando una sessione e non coincide con la navigazione nei passi. Una modifica invalida le misure e le previsioni del circuito precedente.
La scheda Scheda e sessione conserva domanda, motivazione, osservazioni e conclusioni. Salva sessione (Ctrl+Alt+S) scrive un file .session.json con circuito, lezione, passo, misura, conteggi, previsione e copie A/B. Il generatore casuale viene conservato per riprendere nello stesso ambiente di esecuzione; non è promessa una sequenza identica fra librerie C++ diverse. Le preferenze della finestra restano separate in QSettings.
Il salvataggio è atomico. Il caricamento valida i dati prima di sostituire il lavoro aperto. Limiti: 1 MiB per sessione, 32768 caratteri per campo testuale. Le modifiche alla sessione richiedono una scelta Salva/Scarta/Annulla prima di chiudere o sostituire il documento. Salvare il solo circuito non salva le note. Il formato dei circuiti .qlab.json rimane compatibile.
Esporta scheda HTML produce un documento autonomo apribile e stampabile dal browser: domanda, previsione, motivazione, note, conclusione, sequenza delle porte, ampiezze, probabilità e frequenze. Il JSON del circuito incluso permette di ricostruirlo. Per riprendere l’intera attività usa invece la sessione. L’esportazione dei risultati JSON è ora versione 2 e comprende circuito e ampiezze prima della misura.
La quarta scheda confronta Bell+ con un ensemble 50/50 di 00 e 11. In Z/Z le probabilità coincidono; in X/X Bell+ dà 00 e 11 al 50%, la miscela dà quattro esiti al 25%. Le basi sono ordinate q1/q0. Il cambio alla base X è una H prima della lettura. La miscela somma le probabilità dei rami, mai le loro ampiezze. Il modulo distingue due preparazioni note, non certifica ogni possibile entanglement e non simula rumore.
DimostrazioneQubit: 1
Il problema: Parti da |0⟩ e applica H(q0). Prima della misura prova a prevedere 0 o 1.
Prova nel programma: Seleziona la porta H, controlla le ampiezze; poi esegui 1000 prove senza collassare lo stato visualizzato.
Che cosa devi osservare: P(0)=P(1)=50%. Con 1000 prove i conteggi saranno vicini, non necessariamente identici.
Perché funziona: H non genera una moneta classica nascosta: prepara ampiezze +1/√2 che danno probabilità 1/2.
Attenzione: Non confondere una singola misura con l’intera distribuzione.
DimostrazioneQubit: 1
Il problema: Dopo H aggiungi un’altra H. L’incertezza raddoppia o scompare?
Prova nel programma: Fermati dopo la prima H e poi dopo la seconda; confronta le ampiezze, non solo la misura.
Che cosa devi osservare: Il risultato finale è |0⟩ con probabilità 100%.
Perché funziona: H·H=I: il secondo mescolamento provoca interferenza costruttiva su |0⟩ e distruttiva su |1⟩.
Attenzione: «Più porte» non significa necessariamente «più casualità».
DimostrazioneQubit: 2
Il problema: Partendo da |00⟩ produci due risultati sempre concordi: 00 e 11.
Prova nel programma: Applica H(q0), quindi CNOT con controllo q0 e bersaglio q1.
Che cosa devi osservare: 00 e 11 hanno ciascuno probabilità 50%; 01 e 10 non compaiono.
Perché funziona: Lo stato (|00⟩+|11⟩)/√2 è entangled e non si fattorizza in due stati di singolo qubit.
Attenzione: Il solo istogramma 00/11 non dimostra da solo l’entanglement: servono misure in altre basi.
DimostrazioneQubit: 1
Il problema: Una fase può cambiare un risultato pur non modificando le probabilità durante l’applicazione?
Prova nel programma: Confronta H–H e H–Z–H, osservando la tabella subito dopo Z.
Che cosa devi osservare: Dopo Z rimane 50/50; dopo la H finale si ottiene |1⟩ con certezza.
Perché funziona: Z introduce una fase relativa di π: la seconda H converte la differenza di fase in probabilità.
Attenzione: La fase non è una probabilità negativa.
SfidaQubit: 1
Il problema: Costruisci |1⟩ da |0⟩ utilizzando almeno una X.
Prova nel programma: Nel tab Editor seleziona X con bersaglio q0 e inseriscila nel circuito vuoto.
Che cosa devi osservare: Il verificatore deve dare PASS: ampiezza 1 su |1⟩.
Perché funziona: X è l’analogo quantistico del NOT sulla base computazionale.
Attenzione: Una H produce una sovrapposizione, non |1⟩ certo.
SfidaQubit: 1
Il problema: Ritorna a |0⟩ usando esattamente due X.
Prova nel programma: Inserisci X(q0), quindi una seconda X(q0).
Che cosa devi osservare: Il verificatore accetta X–X, perché X²=I.
Perché funziona: Le trasformazioni quantistiche unitarie sono reversibili.
Attenzione: Il circuito vuoto dà lo stesso stato, ma NON soddisfa il vincolo didattico delle due X.
SfidaQubit: 1
Il problema: Prepara (|0⟩+|1⟩)/√2 con almeno una X.
Prova nel programma: Inserisci H(q0); confronta ampiezze e probabilità.
Che cosa devi osservare: Le ampiezze sono entrambe +1/√2; le probabilità sono 50/50.
Perché funziona: La distribuzione non descrive da sola lo stato: conta anche il segno relativo.
Attenzione: Non confondere questa sfida con la 13, che richiede una fase diversa.
SfidaQubit: 2
Il problema: Partendo da |00⟩ prepara esattamente |01⟩.
Prova nel programma: Il bit a destra è q0: applica X(q0).
Che cosa devi osservare: P(01)=100% e tutte le altre probabilità sono zero.
Perché funziona: QuantumLab usa q0 come bit meno significativo nel numero binario.
Attenzione: X(q1) preparerebbe |10⟩, non |01⟩.
SfidaQubit: 2
Il problema: Produci quattro ampiezze uguali e positive.
Prova nel programma: Applica H(q0) e H(q1). L’ordine delle due H non cambia il risultato.
Che cosa devi osservare: Le quattro ampiezze sono +1/2, quindi ogni esito vale 25%.
Perché funziona: Due qubit hanno 2²=4 stati di base, ma una misura restituisce un solo stato.
Attenzione: Quattro ampiezze non equivalgono a quattro risultati leggibili simultaneamente.
SfidaQubit: 2
Il problema: Prepara (|00⟩+|11⟩)/√2.
Prova nel programma: Inserisci H(q0), poi CNOT(q0→q1).
Che cosa devi osservare: Il verificatore accetta una sovrapposizione coerente di 00 e 11.
Perché funziona: La CNOT può creare entanglement quando il controllo è in sovrapposizione.
Attenzione: Una miscela classica 50/50 di 00 e 11 avrebbe lo stesso istogramma in questa base.
SfidaQubit: 1
Il problema: Ottieni |1⟩ senza usare X, utilizzando almeno due H e una Z.
Prova nel programma: Prova H(q0)–Z(q0)–H(q0).
Che cosa devi osservare: Il verificatore accetta H–Z–H e controlla anche il vincolo sulle porte.
Perché funziona: HZH=X: una funzione equivalente può avere un’implementazione radicalmente diversa.
Attenzione: Una singola X darebbe il risultato ma violerebbe lo scopo della sfida.
SfidaQubit: 2
Il problema: Prepara (|01⟩+|10⟩)/√2.
Prova nel programma: Parti da una Bell standard e applica X(q0).
Che cosa devi osservare: Le ampiezze non nulle sono quelle di 01 e 10, entrambe +1/√2.
Perché funziona: Una porta locale può trasformare uno stato di Bell in un altro.
Attenzione: Non basta ottenere la corretta probabilità: anche la fase relativa deve essere giusta.
SfidaQubit: 1
Il problema: Prepara (|0⟩−|1⟩)/√2, con segno relativo negativo.
Prova nel programma: Usa H(q0) seguita da Z(q0).
Che cosa devi osservare: Il verificatore accetta H–Z ma rifiuta la sola H, pur avendo entrambe 50/50.
Perché funziona: La fedeltà degli stati riconosce la differenza di fase relativa.
Attenzione: La fase globale non è fisicamente osservabile, ma la fase relativa sì.
SfidaQubit: 3
Il problema: Prepara GHZ=(|000⟩+|111⟩)/√2.
Prova nel programma: Applica H(q0), CNOT(q0→q1), CNOT(q1→q2).
Che cosa devi osservare: Soltanto 000 e 111 hanno probabilità 50%, con le fasi corrette.
Perché funziona: GHZ estende l’entanglement coerente da due a tre qubit.
Attenzione: Tre correlazioni classiche non sono, da sole, una prova di entanglement.
AlgoritmoQubit: 2
Il problema: La funzione è costante o bilanciata? Qui f(0)=f(1)=1.
Prova nel programma: Ispeziona la preparazione del qubit ausiliario, l’oracolo X(q1) e la H finale su q0.
Che cosa devi osservare: Il qubit dati q0 misura 0 con certezza; q1 non contiene la risposta.
Perché funziona: Una singola interrogazione all’oracolo reversibile basta a riconoscere la classe della funzione.
Attenzione: Una interrogazione logica non è necessariamente una porta fisica.
AlgoritmoQubit: 2
Il problema: Ripeti Deutsch con f(x)=x.
Prova nel programma: L’oracolo è CNOT(q0→q1): osserva quale informazione passa alla fase.
Che cosa devi osservare: q0=1 con certezza, quindi la funzione è bilanciata.
Perché funziona: La preparazione del qubit ausiliario in |−⟩ provoca il phase kickback.
Attenzione: Non leggere q1 per classificare la funzione.
AlgoritmoQubit: 2
Il problema: Stessa domanda, ora f(x)=1−x. La classificazione cambia?
Prova nel programma: Confronta la sequenza delle porte dell’oracolo con l’esercizio 16.
Che cosa devi osservare: q0 vale ancora 1: anche questa funzione è bilanciata.
Perché funziona: Il risultato riguarda una proprietà della funzione, non tutta la sua tabella di verità.
Attenzione: Non dedurre che il circuito abbia ricostruito f(0) e f(1) singolarmente.
AlgoritmoQubit: 4
Il problema: Un oracolo nasconde la stringa s=101: recuperala con una chiamata logica.
Prova nel programma: I dati sono q2,q1,q0; q3 è ausiliario in |−⟩. Osserva le CNOT dell’oracolo.
Che cosa devi osservare: I dati misurati sono q2q1q0=101 con probabilità 100%; q3 può essere 0 oppure 1.
Perché funziona: L’interferenza legge in parallelo la parità s·x mod 2 codificata in fase.
Attenzione: Non aspettarti un unico risultato sui quattro qubit: l’ausiliario resta casuale.
AlgoritmoQubit: 2
Il problema: Trova |10⟩ fra quattro candidati.
Prova nel programma: Ispeziona preparazione uniforme, marcatura di fase e diffusione.
Che cosa devi osservare: Dopo una iterazione completa P(10)=100% nel caso ideale.
Perché funziona: La diffusione amplifica l’ampiezza della risposta marcata mediante interferenza.
Attenzione: La marcatura da sola cambia il segno, non la probabilità.
AlgoritmoQubit: 3
Il problema: Cerca |101⟩ fra otto possibilità usando una sola iterazione.
Prova nel programma: Visita i checkpoint: preparazione, oracolo e diffusione.
Che cosa devi osservare: P(101) passa da 12,5% iniziale a 78,125% dopo la diffusione.
Perché funziona: La probabilità elevata non equivale ancora a certezza.
Attenzione: La prima interrogazione ideale non garantisce una risposta corretta in ogni misura.
AlgoritmoQubit: 3
Il problema: Ripeti la coppia oracolo+diffusione sullo stesso bersaglio |101⟩.
Prova nel programma: Confronta i checkpoint e poi prova il laboratorio parametrico con tre iterazioni.
Che cosa devi osservare: Dopo due iterazioni P(101)=94,53125%; dopo tre scende a circa 33,01%.
Perché funziona: Grover è una rotazione nello spazio delle ampiezze: superare il massimo provoca una sovra-rotazione.
Attenzione: Più iterazioni non significa sempre maggiore probabilità di successo.
Ora scegli un algoritmo, cambia un parametro e prova a spiegare la differenza prima di leggere il risultato. Se una misura ti sorprende, consulta il Notebook e ricostruisci i checkpoint.
QuantumLab · Officina Turini · v0.16.0 · IT · UTF-8 · offline