Моделируем квантовую запутанность на C#

    Поскольку тема квантовой запутанности всплывает все чаще, захотелось немного углубиться. Судя по комментариям к статьям о квантовой запутанности, не мне одному будет полезна данная информация. Ну и, с учетом того что для большинства из нас программный код гораздо удобнее всяких аллегорий – решено было представить мое понимание в виде кода.

    Данная статья расширяет статью другого автора «Квантовая запутанность для чайников» (рекомендую к прочтению, она мне очень помогла). В своей статье indomit привел пример программы, которая наглядно демонстрирует проблему теории скрытых параметров, но не смог привести пример кода для частиц в суперпозиции. В данной же статье мы попытаемся смоделировать 2 случая:

    1. Как бы вели себя запутанные частицы при детерминизме, когда состояние частиц установлено до измерения, просто мы его не можем измерить без внесения искажений (та самая теория скрытых параметров). Получим числа и увидим расхождение с практикой.
    2. Напишем модель запутанных частиц, находящихся в суперпозиции (состояние частиц не определено до измерения). Попробуем предположить, как частица запрограммирована внутри, то есть подгоним ее код под данные, которые получены экспериментально.

    За основу статьи взято популярное объяснение феномена квантовой запутанности от Мермина:

    Объяснение парадокса по Мермину
    Для популярного донесения парадокса Д. Мермин предлагает сконструировать простое устройство[23]. Устройство должно состоять из излучателя частиц и двух детекторов. Две одинаковые частицы испускаются к каждому из них. Поймав частицу, детектор даёт двоичный ответ (0 или 1), зависящий от частицы и своего трёхпозиционного переключателя настройки. Детектирование пары частиц должно дать одинаковые ответы:

    1. Всякий раз, когда детекторы настроены одинаково.
    2. По статистике в половине случаев, когда они настроены случайным образом.

    Первое свойство требует, чтобы все детекторы использовали одну и ту же кодировку позиция переключателя ∈ {1,2,3} ↦ отклик ∈ {0,1}, без какого бы то ни было элемента случайности. То есть они должны заранее сговориться какой из откликов, 0 или 1, давать на позицию переключателя, выбрав для каждой частицы одну из восьми возможных функций, 000, 001, 010, 011, 100, 101, 110 и 111. Выбор 000 или 111 приведёт к 100 % совпадению показаний детекторов вне зависимости от положения ручки настройки. Если же детекторы реализуют одну из шести оставшихся функций, одна из цифр вытягивается случайно настроенным переключателем в 2/3 случаев, другая — с вероятностью 1/3. Вероятность совпадения двух ответов при этом составит (⅔)² + (⅓)² = 5/9. Так что каков бы ни был алгоритм автомата, корреляция неизбежно превышает 50 %, нарушая второе требование.

    Но поскольку такую машину всё-таки соорудить можно (например, располагая позиции поляризаторов под 120° как в опыте Бома), то никакого детерминизма (параметров) не может быть даже в скрытой форме. Вместо этого корреляции откликов поддерживаются за счёт передачи информации от одной «измеренной» частицы к другой быстрее, чем произойдёт второе измерение.

    Взято отсюда.

    К сожалению, я не занимаюсь физикой ни профессионально ни даже на уровне любителя, на безошибочность не претендую. Главная цель статьи – продемонстрировать как сделать понятную для знакомых с программированием модель. Если кто-то профессионально работает в данной области, то вместо того, чтобы упрекать — попробуйте написать более точные модели взаимодействий по мотивам моей статьи.

    [Update] Поясниние к описанию Мермина


    Хотя с момента написания статьи прошло несколько месяцев и никто к ней возвращаться не будет, для успокоения совести решил внести уточнение.

    Немного углубился и пришел к выводу, что описание по Мермину сильно упрощено и попытки привязать его к реальным физическим экспериментам бессмысленны.

    Изначально я попытался привязать статью к реальному эксперименту с круговой поляризацией и в этом ошибся. ARad попытался развить привязку к реальным физическим экспериментам, написал о допущенных ошибках и даже предложил свою версию кода (которая тоже не соответствует ни одному физическому эксперименту).

    Чтобы статья имела хоть какой-то смысл, было решено убрать все мнимые привязки к реальным физическим экспериментам и просто пояснить в коде описание Мермина, сделать его более наглядным. Реальные эксперименты сложнее и для их моделирования нужно потратить значительно больше времени.

    В первой версии статьи мы приняли что в первом эксперименте (положение датчиков совпадает) частицы дают зеркальный результат, но в оригинальном описании по Мермину результат измерения при одинаковом положении датчиков всегда совпадает. Это исправлено.

    Дополнительно добавлю «пояснение на пояснение» этого самого Мермина, так как написано не однозначно:

    То есть они должны заранее сговориться какой из откликов, 0 или 1, давать на позицию переключателя, выбрав для каждой частицы одну из восьми возможных функций, 000, 001, 010, 011, 100, 101, 110 и 111.

    Фраза «восьми возможных функций» не однозначна. Говорится о восьми возможных вариантах потенциального воздействия частиц на датчик. Положений у датчика три (см. полное описание выше). Если мы считаем, что состояние двух частиц совпадает и установлено заранее, то мы можем и заранее определить какой отклик (0 или 1) потенциально получим для каждой из трех позиций переключателя (хотя «измерить» можем лишь один из трех вариантов).

    Выбор 000 или 111 приведёт к 100 % совпадению показаний детекторов вне зависимости от положения ручки настройки.

    Если частицы могут принимать значение, при котором потенциально получим отклик «1» при любом положении переключателя (равно как и 0, при любом положении переключателя) — то второй эксперимент в этих случаях даст 100% совпадений. Для приближения к 50% эти варианты можно исключить.

    Если же детекторы реализуют одну из шести оставшихся функций, одна из цифр вытягивается случайно настроенным переключателем в 2/3 случаев, другая — с вероятностью 1/3.

    Имеется в виду, что в каждой из 6 троек (001, 010, 011, 100, 101, 110) — только две цифры из трех совпадают (в первом варианте две из трех — «0», и одна из трех — «1»).

    Для оценки вероятности составим таблицу для первого случая 001:

    Положение датчика 1 Положение датчика 2 Совпадут ли измерения
    1 1 +
    1 2 +
    1 3 -
    2 1 +
    2 2 +
    2 3 -
    3 1 -
    3 2 -
    3 3 +

    Видно что в пяти случаях из девяти измерения совпадут. Такая же вероятность будет для каждого из этих шести вариантов (ведь в каждом из них две цифры одинаковые).

    Измерения


    В каждой из моделей (и в детерминистической, и в суперпозиционной) будем проводить с запутанными частицами два эксперимента, соответствующие первому и второму условию по Мермину:

    1. Сначала установим оба датчика в одинаковую позицию. В этом случае будем получать 100% одинаковые результаты (если первый фотон проходит через поляризатор, то связанный с ним тоже проходит через поляризатор под таким же углом).
    2. Затем будем устанавливать позицию датчиков случайным образом.

    Вот код первого эксперимента:

    var totalAttempts = 10000; // всего измерений
    var coincidenceCount = 0; // сколько значений совпало
    
    for (int attemptNumber = 1; attemptNumber <= totalAttempts; attemptNumber++)
    {
        var entanglementParticles = new EntanglementParticles(); // Зарождение пары запутанных частиц
    
        var position = GetRandomInteger(1, 3); // Выбираем позицию переключателя на датчике случайным образом
    
        // Первый и второй датчик устанавливаем в одну и ту же позицию
        int firstSensorPosition = position;
        int secondSensorPosition = position;
    
        bool firstValue = entanglementParticles.First.GetValue(firstSensorPosition); // Значение первой частицы с учетом позиции первого датчика
        bool secondValue = entanglementParticles.Second.GetValue(secondSensorPosition); // Значение второй частицы с учетом позиции второго датчика
    
        if (firstValue == secondValue) // подсчет количества совпавших значений
            coincidenceCount ++;
    }
    
    Console.WriteLine("Эксперимент №1: {0}% значений совпало", (decimal)coincidenceCount / totalAttempts * 100); // все совпали
    

    Вот код второго эксперимента:

    var totalAttempts = 10000; // всего измерений
    var coincidenceCount = 0; // сколько значений совпало
    
    for (int attemptNumber = 1; attemptNumber <= totalAttempts; attemptNumber++)
    {
        var entanglementParticles = new EntanglementParticles(); // Зарождение пары запутанных частиц
    
        int firstSensorPosition = GetRandomInteger(1, 3); // Случайным образом устанавливаем позицию датчика 1
        int secondSensorPosition = GetRandomInteger(1, 3); // Случайным образом устанавливаем позицию датчика 2
    
        bool firstValue = entanglementParticles.First.GetValue(firstSensorPosition); // Значение первой частицы с учетом позиции первого датчика
        bool secondValue = entanglementParticles.Second.GetValue(secondSensorPosition); // Значение второй частицы с учетом позиции второго датчика
    
        if (firstValue == secondValue) // подсчет количества совпавших значений
            coincidenceCount ++;
    }
    
    Console.WriteLine("Эксперимент №2: {0}% значений совпало", (decimal)coincidenceCount / totalAttempts * 100);
    

    Для всех моделей частиц будут одни и те же тесты, только код частиц будут отличаться для детерминистической и суперпозиционной моделей (об этом ниже).

    Детерминистическая модель


    Внимание! См. UPDATE в конце статьи!

    Для желающих сразу запустить код, это можно сделать из браузера: dotnetfiddle.net/N5Xg18

    Итак, согласно объяснению Мермина, у нас есть квантовая частица с 3 параметрами:

    // Элементарная частица (к примеру, фотон)
    public class Particle
    {
        private bool _measured = false;
    
        public bool A { get; private set; } // Зафиксирует ли датчик в позиции переключателя 1
        public bool B { get; private set; } // Зафиксирует ли датчик в позиции переключателя 2
        public bool C { get; private set; } // Зафиксирует ли датчик в позиции переключателя 3
    
        public Particle(bool a, bool b, bool c)
        {
            A = a;
            B = b;
            C = c;
        }
    
        // Получаем значение с учетом позиции переключателя на датчике (всего 3 позиции).
        public bool GetValue(int sensorPosition)
        {
            if (_measured)
                throw new InvalidOperationException("Измерить можно только один раз!");
    
            _measured = true;
    
            switch (sensorPosition)
            {
                case 1:
                    return A;
                case 2:
                    return B;
                case 3:
                    return C;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
    }
    

    Поскольку модель детерминистическая — все параметры частицы инициализированы в момент ее создания, то есть прямо в конструкторе. Единственное условие — измерение разрешено только один раз!

    Далее. Пара запутанных частиц:

    // Пара запутанных частиц
    public class EntanglementParticles
    {
        public Particle First { get; private set; } // Первая частица
        public Particle Second { get; private set; } // Вторая частица
    
        // Создание пары запутанных частиц (пока верим в детерминизм, считаем что с каждая частица уже имеет установленное значение)
        public EntanglementParticles()
        {
            // Вычисляем в какой позиции частицу потенциально зафиксирует датчик
            bool a;
            bool b;
            bool c;
    
            do
            {
                a = GetRandomBoolean(); // Зафиксирует ли в позиции 1
                b = GetRandomBoolean(); // Зафиксирует ли в позиции 2
                c = GetRandomBoolean(); ; // Зафиксирует ли в позиции 3
            } while (a == b && b == c); // Исключаем варианты 000 и 111 (нам важно попытаться построить модель, которая приближается к заданным условиям любым способом)
    
            First = new Particle(a, b, c);
            Second = new Particle(a, b, c); // Значение первой и второй частицы совпадают
        }
    }
    


    Видно, что значения каждой из частиц устанавливаются в момент создания пары запутанных частиц, причем параметры второй частицы соответствуют параметрам первой (без этого не сможем пройти первый тест). Мы используем случайные числа, но согласно модели, параметры зависят от факторов в момент запутывания (как результат рулетки зависит от ряда факторов в момент раскручивания).

    Полный код примера:

    Код C# детерминистической модели (исправлено)
    using System;
    
    public class Program
    {
        private static readonly Random Random = new Random();
    
        // Элементарная частица
    	public class Particle
    	{
    		private bool _measured = false;
    
    		public bool A { get; private set; } // Зафиксирует ли датчик в позиции переключателя 1
    		public bool B { get; private set; } // Зафиксирует ли датчик в позиции переключателя 2
    		public bool C { get; private set; } // Зафиксирует ли датчик в позиции переключателя 3
    
    		public Particle(bool a, bool b, bool c)
    		{
    			A = a;
    			B = b;
    			C = c;
    		}
    
    		// Получаем значение с учетом позиции переключателя на датчике (всего 3 позиции).
    		public bool GetValue(int sensorPosition)
    		{
    			if (_measured)
    				throw new InvalidOperationException("Измерить можно только один раз!");
    
    			_measured = true;
    
    			switch (sensorPosition)
    			{
    				case 1:
    					return A;
    				case 2:
    					return B;
    				case 3:
    					return C;
    				default:
    					throw new ArgumentOutOfRangeException();
    			}
    		}
    	}
    
        // Пара запутанных частиц
        public class EntanglementParticles
        {
            public Particle First { get; private set; } // Первая частица
            public Particle Second { get; private set; } // Вторая частица
    
            // Создание пары запутанных частиц (пока верим в детерминизм, считаем что с каждая частица уже имеет установленное значение)
            public EntanglementParticles()
            {
                // Вычисляем в какой позиции частицу потенциально зафиксирует датчик
    			bool a;
    			bool b;
    			bool c;
    			
    			do
    			{
    				a = GetRandomBoolean(); // Зафиксирует ли в позиции 1
    				b =  GetRandomBoolean(); // Зафиксирует ли в позиции 2
    				c =  GetRandomBoolean();; // Зафиксирует ли в позиции 3
    			} while (a == b && b == c); // Исключаем варианты 000 и 111 (нам важно попытаться модель, которая приближается к заданным условиям любым способом)
    
                First = new Particle(a, b, c);
                Second = new Particle(a, b, c); // Значение первой и второй частицы совпадают
            }
        }
    
    
        public static void Main(string[] args)
        {
            Experiment1();
            Experiment2();
        }
    
        private static void Experiment1()
        {
            var totalAttempts = 10000; // всего измерений
    		var coincidenceCount = 0; // сколько значений совпало
    
    		for (int attemptNumber = 1; attemptNumber <= totalAttempts; attemptNumber++)
    		{
    			var entanglementParticles = new EntanglementParticles(); // Зарождение пары запутанных частиц
    
    			var position = GetRandomInteger(1, 3); // Выбираем позицию переключателя на датчике случайным образом
    
    			// Первый и второй датчик устанавливаем в одну и ту же позицию
    			int firstSensorPosition = position;
    			int secondSensorPosition = position;
    
    			bool firstValue = entanglementParticles.First.GetValue(firstSensorPosition); // Значение первой частицы с учетом позиции первого датчика
    			bool secondValue = entanglementParticles.Second.GetValue(secondSensorPosition); // Значение второй частицы с учетом позиции второго датчика
    
    			if (firstValue == secondValue) // подсчет количества совпавших значений
    				coincidenceCount ++;
    		}
    
    		Console.WriteLine("Эксперимент №1: {0}% значений совпало", (decimal)coincidenceCount / totalAttempts * 100); // все совпали
    	}
    
        private static void Experiment2()
        {
            var totalAttempts = 10000; // всего измерений
    		var coincidenceCount = 0; // сколько значений совпало
    
    		for (int attemptNumber = 1; attemptNumber <= totalAttempts; attemptNumber++)
    		{
    			var entanglementParticles = new EntanglementParticles(); // Зарождение пары запутанных частиц
    
    			int firstSensorPosition = GetRandomInteger(1, 3); // Случайным образом устанавливаем позицию датчика 1
    			int secondSensorPosition = GetRandomInteger(1, 3); // Случайным образом устанавливаем позицию датчика 2
    
    			bool firstValue = entanglementParticles.First.GetValue(firstSensorPosition); // Значение первой частицы с учетом позиции первого датчика
    			bool secondValue = entanglementParticles.Second.GetValue(secondSensorPosition); // Значение второй частицы с учетом позиции второго датчика
    
    			if (firstValue == secondValue) // подсчет количества совпавших значений
    				coincidenceCount ++;
    		}
    
    		Console.WriteLine("Эксперимент №2: {0}% значений совпало", (decimal)coincidenceCount / totalAttempts * 100);
        }
    
    
        private static bool GetRandomBoolean()
        {
            return GetRandomInteger(0, 1) == 1;
        }
    
    
        private static int GetRandomInteger(int from, int to)
        {
            return Random.Next(from, to + 1); // нам удобнее указывать с какого числа по какое включительно
        }
    }
    


    Запустить можно из браузера (еще раз ссылка: dotnetfiddle.net/N5Xg18).

    После запуска вот такие результаты:

    Эксперимент №1: 100% значений совпало
    Эксперимент №2: 55.6700% значений совпало

    Первый тест пройден, соответствует происходящему в реальности. А вот второй — не соответствует, так как должны получить 50%!

    В результате физики были вынуждены прийти к тому, что теория скрытых параметров ошибочна. А вместе с ней опровергнут принцип локальности и даже пошатнулся принцип причинности.

    Суперпозиционная модель


    Сразу ссылка на код примера, для любящих конкретику (можно запустить в браузере): dotnetfiddle.net/Mb7JqU

    Чтобы объяснить полученные в ходе экспериментов результаты, пришлось использовать более сложные модели. В современных моделях состояние параметров частицы до измерения не определено, а сами запутанные частицы имеют возможность мгновенно (сверх скорости света) влиять на состояние друг друга. Вот как теперь выглядит наша модель элементарной частицы:

    // Элементарная частица
    public class Particle
    {
        private Particle _superluminalChannel; // Организация связи с второй запутанной частицей по сверхсветовому каналу.
        private int? _measuredPosition;
    
        public bool? A { get; private set; } // Зафиксирует ли датчик в позиции переключателя 1
        public bool? B { get; private set; } // Зафиксирует ли датчик в позиции переключателя 2
        public bool? C { get; private set; } // Зафиксирует ли датчик в позиции переключателя 3
    
        internal void CreateSuperluminalChannelWith(Particle particle)
        {
            _superluminalChannel = particle;
        }
    
        // Получаем значение с учетом позиции переключателя на датчике (всего 3 позиции).
        public bool GetValue(int sensorPosition)
        {
            if (null != _measuredPosition)
                throw new InvalidOperationException("Измерить можно только один раз!");
    
            _measuredPosition = sensorPosition;
    
            if (null != _superluminalChannel._measuredPosition) // если другая запутанная частица уже была измеряна
            {
                var measuredValue = _superluminalChannel.GetNakedValue();
    
                // Если измеряли тот же параметр у другой частицы (позиция переключателя на датчиках совпала), то возвращаем значение, противоположное значению уже измерянной частицы.
                if (sensorPosition == _superluminalChannel._measuredPosition)
                    return measuredValue;
    
                if (GetRandomInteger(1, 4) == 1)
                    return measuredValue;
    
                return !measuredValue;
            }
    
            // Установка значения. Происходит в момент измерения с нарушением принципа причинности, никакие причины на значение не влияли - чистый рандом.
            // Детерминизм терпит крах!
            var value = GetRandomBoolean();
    
            SetValue(sensorPosition, value);
    
            return value;
        }
    
        private bool GetNakedValue() // Запутанная частица получает значение частицы по сверхсветовому каналу уже после того, как было произведено измерение.
        {
            if (null == _measuredPosition)
                throw new InvalidOperationException();
    
            switch (_measuredPosition.Value)
            {
                case 1:
                    return A.Value;
                case 2:
                    return B.Value;
                case 3:
                    return C.Value;
                default:
                    throw new InvalidOperationException();
            }
        }
    
        private void SetValue(int position, bool value)
        {
            switch (position)
            {
                case 1:
                    A = value;
                    break;
                case 2:
                    B = value;
                    break;
                case 3:
                    C = value;
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
    }
    

    Во-первых, параметры стали Nullable (могут не иметь значения) и в конструкторе мы их не устанавливаем. Во-вторых, появился метод CreateSuperluminalChannelWith для установки сверхсветового канала между частицами, т.е. теперь одна частица может получить состояние другой мгновенно, не взирая на расстояние. Ну и, главное, теперь состояние частицы устанавливается лишь в момент измерения (вызов метода GetValue) и зависит от того, было ли произведено измерение другой, связанной с ней, частицы.

    Внутренность метода GetValue — чистое предположение. Как внутри устроена частица — никто не знает, но мы знаем, что работает она именно так: 100% несовпадений в случае измерения одинакового параметра и 50% несовпадений при измерении параметров в случайном порядке.

    В моей версии кода частица по сверхсветовому каналу проверяет произведено ли измерение запутанной с ней и действует так:

    1. Если измеренный параметр другой частицы тот же, что мы пытаемся замерять — выдает одинаковое значение.
    2. Если параметр другой, то в 1/4 случаев выдает одинаковое значение, а в 3/4 случаев выдает противоположное значение (так как раз получим 50/50).

    В случае, если измерение не производилось — частица использует истинный рандом для установки своего значения, то есть происходит нарушение причинно-следственной связи (значение не существовало до измерения и само измерение не определило его значение).

    Кстати! Вы можете переписать эту функцию иным образом, но чтобы результаты тестов были такими же. Все равно никто не знает как устроена элементарная частица и как достигается 50% для второго теста.

    Пара запутанных частиц стала проще, так как в момент запутывания никаких значений не устанавливается (значения еще не определены):

    // Пара запутанных частиц
    public class EntanglementParticles
    {
        public Particle First { get; private set; } // Первая частица
        public Particle Second { get; private set; } // Вторая частица
    
        // Создание пары запутанных частиц (значения не установлены, находятся в суперпозиции)
        public EntanglementParticles()
        {
            First = new Particle(); // значения не установлены, находятся в суперпозиции
            Second = new Particle(); // значения не установлены, находятся в суперпозиции
    
            // Частицы имеют возможность общаться по сврехсветовому каналу связи
            First.CreateSuperluminalChannelWith(Second);
            Second.CreateSuperluminalChannelWith(First);
        }
    }
    

    Полный код примера:

    Суперпозиционная модель на C#
    using System;
    
    public class Program
    {
        private static readonly Random Random = new Random();
    
        // Элементарная частица
        public class Particle
        {
            private Particle _superluminalChannel; // Организация связи с второй запутанной частицей по сверхсветовому каналу.
            private int? _measuredPosition;
    
            public bool? A { get; private set; } // Зафиксирует ли датчик в позиции переключателя 1
    		public bool? B { get; private set; } // Зафиксирует ли датчик в позиции переключателя 2
    		public bool? C { get; private set; } // Зафиксирует ли датчик в позиции переключателя 3
    
            internal void CreateSuperluminalChannelWith(Particle particle)
            {
                _superluminalChannel = particle;
            }
    
            // Получаем значение с учетом позиции переключателя на датчике (всего 3 позиции).
            public bool GetValue(int sensorPosition)
            {
                if (null != _measuredPosition)
                    throw new InvalidOperationException("Измерить можно только один раз!");
    
                _measuredPosition = sensorPosition;
    
                if (null != _superluminalChannel._measuredPosition) // если другая запутанная частица уже была измеряна
                {
                    var measuredValue = _superluminalChannel.GetNakedValue();
    
                    // Если измеряли тот же параметр у другой частицы (позиция переключателя на датчиках совпала), то возвращаем значение, противоположное значению уже измерянной частицы.
                    if (sensorPosition == _superluminalChannel._measuredPosition)
                        return measuredValue;
    
                    if (GetRandomInteger(1, 4) == 1)
                        return measuredValue;
    
                    return !measuredValue;
                }
    
                // Установка значения. Происходит в момент измерения с нарушением принципа причинности, никакие причины на значение не влияли - чистый рандом.
                // Детерминизм терпит крах!
                var value = GetRandomBoolean();
    
                SetValue(sensorPosition, value);
    
                return value;
            }
    
            private bool GetNakedValue() // Запутанная частица получает значение частицы по сверхсветовому каналу уже после того, как было произведено измерение.
            {
                if (null == _measuredPosition)
                    throw new InvalidOperationException();
    
                switch (_measuredPosition.Value)
                {
                    case 1:
                        return A.Value;
                    case 2:
                        return B.Value;
                    case 3:
                        return C.Value;
                    default:
                        throw new InvalidOperationException();
                }
            }
    
            private void SetValue(int position, bool value)
            {
                switch (position)
                {
                    case 1:
                        A = value;
                        break;
                    case 2:
                        B = value;
                        break;
                    case 3:
                        C = value;
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }
            }
        }
    
        // Пара запутанных частиц
        public class EntanglementParticles
        {
            public Particle First { get; private set; } // Первая частица
            public Particle Second { get; private set; } // Вторая частица
    
            // Создание пары запутанных частиц (значения не установлены, находятся в суперпозиции)
            public EntanglementParticles()
            {
                First = new Particle(); // значения не установлены, находятся в суперпозиции
                Second = new Particle(); // значения не установлены, находятся в суперпозиции
    
                // Частицы имеют возможность общаться по сврехсветовому каналу связи
                First.CreateSuperluminalChannelWith(Second);
                Second.CreateSuperluminalChannelWith(First);
            }
        }
    
    
        public static void Main(string[] args)
        {
            Experiment1();
            Experiment2();
        }
    
        private static void Experiment1()
        {
            var totalAttempts = 10000; // всего измерений
    		var coincidenceCount = 0; // сколько значений совпало
    
    		for (int attemptNumber = 1; attemptNumber <= totalAttempts; attemptNumber++)
    		{
    			var entanglementParticles = new EntanglementParticles(); // Зарождение пары запутанных частиц
    
    			var position = GetRandomInteger(1, 3); // Выбираем позицию переключателя на датчике случайным образом
    
    			// Первый и второй датчик устанавливаем в одну и ту же позицию
    			int firstSensorPosition = position;
    			int secondSensorPosition = position;
    
    			bool firstValue = entanglementParticles.First.GetValue(firstSensorPosition); // Значение первой частицы с учетом позиции первого датчика
    			bool secondValue = entanglementParticles.Second.GetValue(secondSensorPosition); // Значение второй частицы с учетом позиции второго датчика
    
    			if (firstValue == secondValue) // подсчет количества совпавших значений
    				coincidenceCount ++;
    		}
    
    		Console.WriteLine("Эксперимент №1: {0}% значений совпало", (decimal)coincidenceCount / totalAttempts * 100); // все совпали
    	}
    
        private static void Experiment2()
        {
            var totalAttempts = 10000; // всего измерений
    		var coincidenceCount = 0; // сколько значений совпало
    
    		for (int attemptNumber = 1; attemptNumber <= totalAttempts; attemptNumber++)
    		{
    			var entanglementParticles = new EntanglementParticles(); // Зарождение пары запутанных частиц
    
    			int firstSensorPosition = GetRandomInteger(1, 3); // Случайным образом устанавливаем позицию датчика 1
    			int secondSensorPosition = GetRandomInteger(1, 3); // Случайным образом устанавливаем позицию датчика 2
    
    			bool firstValue = entanglementParticles.First.GetValue(firstSensorPosition); // Значение первой частицы с учетом позиции первого датчика
    			bool secondValue = entanglementParticles.Second.GetValue(secondSensorPosition); // Значение второй частицы с учетом позиции второго датчика
    
    			if (firstValue == secondValue) // подсчет количества совпавших значений
    				coincidenceCount ++;
    		}
    
    		Console.WriteLine("Эксперимент №2: {0}% значений совпало", (decimal)coincidenceCount / totalAttempts * 100);
        }
    
        private static bool GetRandomBoolean()
        {
            return GetRandomInteger(0, 1) == 1;
        }
    
    
        private static int GetRandomInteger(int from, int to)
        {
            return Random.Next(from, to + 1); // нам удобнее указывать с какого числа по какое включительно
        }
    }
    


    Результаты:

    Эксперимент №1: 100% значений совпало
    Эксперимент №2: 49.7700% значений совпало

    Запустить в браузере: dotnetfiddle.net/Mb7JqU

    Выводы


    Хотелось бы побольше доступных толкований, наподобие тех, что высказал Мермин. На основе этого толкования мне удалось создать наглядные модели существующих теорий и даже выдвинуть альтернативную модель и эти модели не аллегорические — их можно запустить и посмотреть как они работают.

    К сожалению, не имею временных ресурсов для более глубокого познания квантовой физики и надеюсь что знающие смогут последовать моему примеру и привести более точные работающие модели.

    UPDATE
    В объяснении Мермина ничего нет про устройство детекторов. Я же, по своей инициативе, добавил пояснение к A, В и С как проекция спина на ось X, Y и Z соответственно. То есть мне захотелось в комментариях к коду добавить привязку к физическим явлениям, дабы не было так сухо. И в этом я ошибся…

    Статья исправлена и все тщетные попытки привязать объяснение Мермина к реальным физическим экспериментам удалены.
    Поделиться публикацией

    Комментарии 81

      +1
      Принцип причинности не пошатнулся. Это основа основ текущей физики. Принцип причинности в любом случае не нарушится если предполагать многомировую интерпретацию (ММИ) или информационной интерпретации (ИИ). В них он по другому работает.
        0
        ММИ как лучше смоделировать? Она тоже требует сверхсветовой канал связи между частицами?
          0
          В ММИ нет так называемого коллапса волновой функции. В ММИ, вселенная это единая функция состояния для всей Вселенной, которая всё время подчиняется уравнению Шрёдингера и никогда не испытывает недетерминированного коллапса.
          Т.е. там нет того что вы называете «сверхсветовой канал связи между частицами» а в физике обычно называется «коллапс волновой функции».
            0
            Моделируйте уравнение Шредингера. Квантовый мир, согласно ММИ интерпретации один, но заменен сложнейшей мировой функцией.
          +1
          Весьма интересно, спасибо.
            0
            Ваши детерминированные модели не верны тем, что у ваших наблюдателей оси измерения всегда совпадают. В реальности оси измерения у двух наблюдателей могут иметь поворот относительно друг друга и там квантовая теория и ее моделирование будет выдавать некую вероятность совпадения/несовпадения измерений. Вы же такое вообще не моделируете в ваших детерменированных моделях. Этим самым они не моделируют настояший мир. т.е. неверны.
              0
              Вы моделируете самый простой случай, а надо общий.
                0
                Начать нужно с простого. Может тот, кто погрузился в дебри квантовой физики, продемонстрирует в общем виде.
                  0
                  Моделировать надо правильно, а не опираться на недостатки моделирования для подгонки ответа.
                    0
                    Ответил вам тут: habr.com/post/420611/?reply_to=19012669#comment_19012929 Похоже, вы не поняли суть статьи.
                      0
                      Да я читал статью и код по диагонали. Сейчас почитал внимательней.
                      Вы в одних программах моделируете проекцию на оси XYZ, а в других круговую проекцию на три повернутых датчика. А затем сравниваете результаты между собой. Вы уж определитель сначала что вы моделируете.
                        0
                        Везде было написано «проекция спина на ось...» и это не верно. Добавил UPDATE в статью.
                0
                Ваши детерминированные модели не верны тем, что у ваших наблюдателей оси измерения всегда совпадают.

                Вот тут подробнее поясните мысль. В первом эксперименте оси совпадают. Во втором эксперименте — у первого датчика и у второго не обязательно совпадают а устанавливаются случайно (и переключатель первого датчика в случайную позицию и переключатель второго датчика в случайную позицию независимо). Или вы что-то другое имели в виду?
                  0
                  У вас оси измерения у двух наблюдателей всегда совпадают, нет относительного поворота. Вы сделайте модель где оси наблюдателей могут быть взаимно повернуты на какой-то градус. Например на 0 (совпадают), 15, 30, 45, 60, 75 и 90 градусов. Вот тогда и делайте ваши детерминированные модели. Например сейчас, чтобы подогнать ответ ближе к 50% вы исключили 2/8 пространства while (a == b && b == c);.
                  Если исключить еще 2/8 (надеюсь вы сможете это ) тогда получите ровно 50%, но это не корректно. Это просто подгонка под ответ.
                    0
                    У вас оси измерения у двух наблюдателей всегда совпадают, нет относительного поворота.

                    Каждый из двух датчиков имеет 3 позиции. 1 позиция 0°, 2 позиция 120°, 3 позиция 240° — как указано в описании Мермина (располагая позиции поляризаторов под 120° как в опыте Бома).

                    Именно в таком положении парадокс проявляется наиболее заметно. Другие варианты мы не используем, так как парадокс не так заметен.

                    При вызове метода GetValue(sensorPosition) указываете sensorPosition 1, 2 или 3 для 0°, 120° и 240° соответственно.

                    Например сейчас, чтобы подогнать ответ ближе к 50% вы исключили 2/8 пространства

                    Нет, мы не исключали часть пространства — датчики все в тех же трех позициях (только 0°, 120° или 240°). Мы просто сделали предположение о том, как элементарная частица может быть устроена внутри, как нам добиться, чтобы второй эксперимент совпадал с реальностью и давал 50% совпадений.

                    Можете попробовать любой подгонкой сделать 50% совпадений во втором эксперименте — без внутренней связи между частицами ничего не получится. Ну никак.

                    Если исключить еще 2/8 (надеюсь вы сможете это ) тогда получите ровно 50%, но это не корректно. Это просто подгонка под ответ.

                    Нет, вы не сможете никаким способом сделать меньше чем 55.555...%, без привлечения сверхсветового канала между частицами (ну или без обращения к данным второй частицы из первой). Попробуйте.
                      0
                      У вас написано про проекции на оси XYZ.
                              public bool A { get; private set; } // Проекция спина на ось X
                              public bool B { get; private set; } // Проекция спина на ось Y
                              public bool C { get; private set; } // Проекция спина на ось Z
                      

                      Зачем это путаница тогда?
                        0
                        Да, ошибка (меня самого запутали). Должно быть — использовать поляризатор 0 градусов (вместо «Проекция спина на ось X»), 120 вместо «Проекция спина на ось Y» и 240 вместо «Проекция спина на ось Z».

                        Спасибо за уточнение, добавил UPDATE в статью.
                          0
                          Вы комментарий то поменяли
                              public bool A { get; private set; } // Использовать поляризатор 0 градусов
                              public bool B { get; private set; } // Использовать поляризатор 120 градусов
                              public bool C { get; private set; } // Использовать поляризатор 240 градусов
                          

                          А моделируете то явно не поляризаторы. Не могут все три датчика быть в состоянии 0 или все три в состоянии 1. У них 6 возможных состояний (они не ортодоксальны друг другу), а не 8 как у осей (они ортодоксальны).

                          Следующий код неверен, он моделирует поляризаторы не на круге, а на осях.
                                  var a = GetRandomBoolean();
                                  var b = GetRandomBoolean();
                                  var c = GetRandomBoolean();
                          
                                  First = new Particle(a, b, c); // устанавливаем случайные значения
                                  Second = new Particle(!a, !b, !c); // устанавливаем значения, противоположные первой частице
                          


                          Моделируя разные модели вы получаете разный результат. Как и должно быть.
                            0
                            А моделируете то явно не поляризаторы

                            Точно. Это значение частицы, представленное в виде возможности пройти через поляризаторы. И да, не могут все 3 иметь одинаковое значение, так как через какой-нибудь поляризатор частица точно пройдет.

                            Следующий код неверен, он моделирует поляризаторы не на круге, а на осях.

                            Не совсем. Здесь весь код только про прохождение через поляризатор.

                            И эти значения A, B, С — выражение поляризации частицы в упрощенном виде: через какой поляризатор она сможет пройти. Т.е. если 1, 1, 0 — значит поляризация частицы такова, что она сможет пройти через поляризатор 1 и 2, но не пройдет через поляризатор 3.

                            Да, неплохо бы уточнить модель и выразить значение поляризации в более точном виде. Тогда сразу отбросим вариант, когда A, B и С имеют одно значение.
                              0
                              Здесь весь код только про прохождение через поляризатор.

                              Для трех датчиков на кругу он не верен. А следовательно статья ошибочна.
                                0
                                См. пояснение Мермина, на котором основана статья.

                                Изначально там нет ничего про устройство детекторов (это вообще не важно, я по своей инициативе добавил пояснение к A, В и С). Т.е. мы работаем с значениями без учета физической интерпретации.

                                Для других частиц A, B и C могут иметь иную физичекую интерпретацию, т.е. это будет не обязательно поляризация.

                                Мне захотелось добавить в комментах привязку к физическим явлениям и в этом я ошибся, вы меня подправили.

                                Для круговой поляризации нужно исключить случаи, когда частица способна пройти через все три датчика одновременно. Т.е. это как раз третий пример кода, будет около 55% несовпадений.

                                Но идея тут какая. Какую бы формулу вы не применили для установки значения частицы — вы никак не получите 50% несовпадений (конечно, при условии что не обращаетесь к данным другой частицы). Это математически не возможно. Минимум получите 55.5555%.

                                Вторая модель — правильная, она соответствует и круговой поляризации в том числе.
                                  0
                                  Но, все-же, исправлю первую модель и добавлю явную круговую поляризацию. Все таки важно не запутывать людей.
                                    0
                                    Доработал первую модель под круговую поляризацию. Получаем результат 55% несовпадений. То есть — ну никак без привлечения скрытого канала между частицами не получается.
                                      0
                                      Это называется не «скрытый канал между частицами» а «коллапс волновой функции» при измерении. Такое явление присутствует в копенгагенской интерпретации. В других интерпретациях его нет.

                                      Копенгагенская интерпретация оставляет как можно больше из обычной физики и добавляет только волновые функции и ее коллапс. Т.е. она наиболее интуитивно понятна.

                                      Например ММИ говорит что обычной физики во вселенной вообще нет и реально существующий мир описывается единой волновой функцией. Т.е. описывает как суперпозиция всех возможных состояний вселенной. К такой вселенной модели детерминированной физики вообще не применимы. Вообще ММИ тоже много разных.
                                        0
                                        ММИ является реалистичной, детерминированной, и локальной теорией, родственной классической физике (включая теорию относительности). ММИ достигает этого, устраняя коллапс волновой функции, который является недетерминированным и нелокальным.
                                        Но ее можно моделировать только используя аппарат волновой функции. Не используя волновые функции вы моделируете только одно из возможных состояний, а надо все одновременно.
                                          +1
                                            0
                                            Благодарю, достаточно популярно объяснено. Добавить наглядную модель вполне возможно.

                                            Мне интуитивно не нравится МИМ, легче поверить в канал между частицами.
                                              0
                                              Я наоборот не вижу причин единственности нашей вселенной. Ведь стоит поменять некоторые базовые константы нашей вселенной на тысячные или даже миллионные доли процентов и такая вселенная будет совсем мертвая, без звезд, планет и всего остального.

                                              Прочитай про магию тонкой настройки нашей вселенной. В том числе трехмерности нашей вселенной. Например в 4-х мерной вселенной электроны бы падали на ядра, а планеты на солнца. А в двухмерной вселенной нельзя эффективно передавать сигналы. Т.е. обработка информации почти невозможна.

                                              Для меня это однозначно указывает на существование множества вселенных.

                                              Например сейчас есть очень простая и непротиворечивая «Хаотическая теория инфляции» которая предсказывает возможность существования множества вселенных с разными законами. И в таком случае, не удивительно что наша вселенная настолько магически согласованна.
                                                0
                                                Благодарю, достаточно популярно объяснено. Добавить наглядную модель вполне возможно.

                                                Боюсь что без использования квантового компьютера НЕТ. Без использования квантового компьютера это напоминает задачу о зёрнах на шахматной доске.

                                                Квантовый компьютер параллельно считает все возможные варианты. Пока созданы только отдельные его элементы, но вроде как его создание возможно в полном объеме. Т.е. наша вселенная способна считать все возможные варианты параллельно за одну операцию.

                                                Все эти параллельные вычисления реально происходят в нашей вселенной. А значит их кто то выполняет. И я думаю что их выполняют «параллельные вселенные».

                                                Я считаю что раз наша вселенная выполняет квантовые вычисления (параллельно считает все возможные варианты), является еще одним доказательством существования «облака параллельных вселенных» вместе с нашей.
                                                  0
                                                  Боюсь что без использования квантового компьютера НЕТ.

                                                  Квантовый компьютер на 22 кубита легко моделируется на обычном. Это когда количество кубит возрастает — тогда да, получаете «задачу о зёрнах».

                                                  Тут можно поиграться: www.quantumplayground.net/#/home

                                                  Квантовый компьютер параллельно считает все возможные варианты.

                                                  Ну так в нашем примере не так много вариантов.
                                                    0
                                                    Ну так в нашем примере не так много вариантов.

                                                    При каждом эксперименте удваивается количество вселенных, а у вас сколько тысяч экспериментов?
                                                      0
                                                      При каждом эксперименте удваивается количество вселенных, а у вас сколько тысяч экспериментов?

                                                      Для статистической оценки можно оставлять лишь часть Вселенных. Как при проведении соц. опросов не спрашивают мнение у каждого человека но имеют некую оценку.
                                                        0
                                                        Вы не хотите правильно промоделировать поляризатор, но хотите правильно моделировать волновую функции? Я сомневаюсь или у вас будет такая же модель как у поляризатора.
                                                          0
                                                          Если честно мне быстрее было программу написать
                                                            0
                                                            мне быстрее было программу написать

                                                            Кстати, не плохая идея :) Напишите статью с более точными моделями.
                                                            0
                                                            Вы не хотите правильно промоделировать поляризатор,

                                                            Да, я облажался. Думал что у хороший поляризатор либо полностью не пропустит либо пропустит поляризованный свет. Оказывается он может пропускать частично. Для одного фотона придется вычислять вероятность даже в детерминистической модели.

                                                            Можно попробовать смоделировать вероятностную модель, но тогда не получим 100% несовпадений в первом тесте.

                                                            но хотите правильно моделировать волновую функции?

                                                            Ее то проще моделировать как раз — все по описанию Мермина.
                                                              0
                                                              Первый тест и должен опровергать идею скрытого параметра для запутанных поляризованных фотонов.
                                                                0
                                                                Вы его прошли потому что заглянули в будущее.
                                                                  0
                                                                  Вот что получилось: dotnetfiddle.net/BAU4dR

                                                                  Теперь наоборот:

                                                                  Эксперимент №1: 74.8100% значений не совпало
                                                                  Эксперимент №2: 50.100% значений не совпало

                                                                  Первый тест не проходим а второй проходим.

                                                                  Запутанные частицы используют свою способность общаться для прохождения первого теста :)

                                                                  Хотя, хотелось бы лучше узнать как в реальности происходит измерение. На картинке:



                                                                  Показано что горизонтально поляризованные и вертикально — идут двумя разными пучками. Откуда же случайность?
                                                                    0
                                                                    Они запутаны по частоте, при этом каждый из фотонов не имеет определенную частоту, но сумма частот равна рабочей частоте лазера. При этом поляризация помогает разделить фотоны на два пучка. В общем фотоны легче запутать по частоте.
                                                                      0
                                                                      Форкнул чтобы сократить и нашел у вас еще одну ошибку, надо
                                                                      ComputeProbability(XXX + angle)
                                                                      заменить на
                                                                      ComputeProbability(angle - XXX)


                                                                      В общем мой вариант dotnetfiddle.net/iYElNq
                                                                        0
                                                                        В общем мой вариант dotnetfiddle.net/iYElNq

                                                                        Убрал из статьи все тщетные попытки привязать к реальным физическим экспериментам. Попытался найти в статье Алэн Аспека «ТЕОРЕМА БЕЛЛА: НАИВНЫЙ ВЗГЛЯД ЭКСПЕРИМЕНТАТОРА» каким экспериментам соответствует объяснение Мермина — и ничего подходящего не нашлось. Похоже оно весьма упрощенное.

                                                                        Как я понял — и ваша модель не соответствует ни одному реальному эксперименту.
                                                                      0
                                                                                  if (probability >= Random.NextDouble())
                                                                                      return true;
                                                                      
                                                                                  return false;
                                                                      

                                                                      Замените на
                                                                                  if (Random.NextDouble() < probability)
                                                                                      return true;
                                                                      
                                                                                  return false;
                                                                      

                                                                      У вас при нулевой вероятности можно вернуть истину. На результат это конечно не повлияет. Но для истины лучше писать корректно. Или еще короче
                                                                      return Random.NextDouble() < probability;

                                                    0
                                                    Но ее можно моделировать только используя аппарат волновой функции. Не используя волновые функции вы моделируете только одно из возможных состояний, а надо все одновременно.

                                                    В случае 3 значений (у нас всего 3 поляризатора у каждого датчика) — не проблема смоделировать все значения одновременно. Если найду время — добавлю еще две модели, которые удовлетворяют требованиям второго эксперимента без наличия сверхстветового канала.
                                                    0
                                                    называется не «скрытый канал между частицами» а «коллапс волновой функции» при измерении

                                                    Да, называют коллапас волновой функции, если рассматривать пару запутанных частиц как единую систему. Но изначально, до проведения моделируемого мной эксперимента, не было понятно единая эта система или нет. Думали что можно измерить у одной частицы одну характеристику а у другой другую и тем самым ликвидировать неопределенность. Не получилось — частицы ведут себя странно. Это демонстрируется в моей модели — вместо ожидаемых 55% несовпадений мы получаем 50%, что не объяснимо без внутренней связи между частицами.
                                                    0
                                                    Ваши модели слишком упрощены даже для обычной физики. Моделировать поляризацию тремя булевскими значениями слишком грубо и далеко от реальности. Попробуйте строить более приближенные к реальности модели. Тогда вы сможете ставить более интересные опыты.
                                                      0
                                                      Моделировать поляризацию тремя булевскими значениями слишком грубо и далеко от реальности

                                                      Мы генерим число от 0 до 360 градусов! Все исправлено. Этого вам мало? А уже это число однозначно определяет через какие поляризаторы пройдет частица а через какие нет. В первой модели можно было бы даже приписать частице это значение, а не сразу вычислять проходимость через поляризаторы:

                                                      var firstParticleDegree = GetRandomInteger(0, 359); // градус поляризации первой частицы (случайное значение)
                                                              int secondParticleDegree = (firstParticleDegree + 90) % 360; // поляризация второй частицы перпендикулярно первой (сдвиг 90 градусов)
                                                      


                                                      В каком конкретно выде вы бы хотели увидеть? Что здесь не так?
                                                        0
                                                        Почему GetRandomInteger? Почему сдвиг 90 градусов а не 180? И лучше в науке радианах работать, но это уже не принципиально
                                                          0
                                                          Почему сдвиг 90 градусов а не 180?

                                                          Возмите пару полярязиционных очков и сдвиньте на 180 градусов — ничего не изменится.

                                                          Поворот поляризатора на 180 градусов приведет изображение к начальному состоянию.


                                                          Еще см. код определения пройдет ли частица через поляризатор:

                                                                  switch (sensorPosition)
                                                                  {
                                                                      case 1: // 0 и 180
                                                                          if (degree >= 0 && degree <= 89 ||
                                                                              degree >= 180 && degree <= 269)
                                                                              return true;
                                                                          break;
                                                                      case 2: // 120 и 300
                                                                          if (degree >= 0 && degree <= 29 ||
                                                                              degree >= 120 && degree <= 209 ||
                                                                              degree >= 300 && degree <= 359)
                                                                              return true;
                                                                          break;
                                                                      case 3: // 240 и 60
                                                                          if (degree >= 60 && degree <= 149 ||
                                                                              degree >= 240 && degree <= 329)
                                                                              return true;
                                                                          break;
                                                                  }
                                                          
                                                                  return false;
                                                          

                                                          Здесь так же учтено, что поляризатор работает симметрично, т.е. поворот на 180 градусов покажет ту же картинку.
                                                            0
                                                            Здесь сплошные ошибки!
                                                            Во первых, в комментарии написано что первый сенсор поляризован в 0° case 1: // 0 и 180. На самом же деле вы считаете, так будто сенсор поляризован в 45°. И так далее для других сенсоров.
                                                            Это конечно не влияет на результат, но все же это какая-то магия, а не физика.

                                                            Во вторых и главное! Рассмотрим сенсор в позиции 0° градусов и квантовые частицы из квантовой механики. Если угол частицы 0°, то она в любом случае пройдет. Если 90°, то в любом случае не пройдет. Если угол частицы 45° то вероятность прохождения 50%. Если угол частицы 30° то это значит что вероятность прохождения больше 50%, у вас же она всегда проходит, что не верно. У вас происходит резкое переключение от все частицы проходят до все частицы не проходят на 45°. А должно быть плавное затемнение. см. ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D1%8F%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2%D0%BE%D0%BB%D0%BD#%D0%9F%D0%BE%D0%BB%D1%8F%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BC%D0%B0%D0%B3%D0%BD%D0%B8%D1%82%D0%BD%D1%8B%D1%85_%D0%B2%D0%BE%D0%BB%D0%BD

                                                            Еще раз: будьте ближе к реальной физике!
                                                              0
                                                              Это конечно не влияет на результат, но все же это какая-то магия, а не физика.

                                                              Строго говоря да, тот что от 0 до 90 — насположен под 45 градусов и пропускает +-45 градусов.

                                                              В комментах нужно оказать не 0 и180 а 45 и 225. Но на код это не влияет, комменты немного не точны, но суть ясна.

                                                              Если угол частицы 45° то вероятность прохождения 50%. Если угол частицы 30° то это значит что вероятность прохождения больше 50%, у вас же она всегда проходит, что не верно.

                                                              А вот тут вы не разобрались — первая модель как раз детерминистическая! Она и создана для того, чтобы показать почему без добавления суперпозиции мы получаем 55% несовпадений и в чем проблема детерминистического подхода. Вторая модель объясняет, что для получения 50% несовпадений нужна связь между частицами.
                                                                0
                                                                Если угол частицы 45° то вероятность прохождения 50%. Если угол частицы 30° то это значит что вероятность прохождения больше 50%, у вас же она всегда проходит, что не верно.

                                                                А вот тут вы не разобрались — первая модель как раз детерминистическая!


                                                                Если вы моделируете поляризатор, то моделируйте его правильно. Ну не так работает поляризатор. Так можно моделировать только ортогональные поляризаторы. Только прямые углы.

                                                                И пока вы моделировали три оси XYZ и ортогональные поляризаторы я вас не исправлял.

                                                                А когда вы моделируете не ортогональные поляризаторы, то моделируйте правильно. У них вероятность прохождения не прямоугольная функция в отличии от ортогональных.
                                                                  0
                                                                  Ну не так работает поляризатор.

                                                                  Ну почему же не так? Я специально взял пару поляризационных очков и проверил — все именно так. Угол +- 45 градусов в обе стороны.

                                                                  Только поляризация линейная, конечно. Сбило что поляризаторы расположены по кругу как бы.

                                                                  У нас есть условие — если одна частица прошла через поляризатор 1, то повернутая на 90 градусов не пройдет через тот же поляризатор 1. А так же не должно быть случая, когда обе не прошли через один поляризатор. Я проверил все варианты и только такие поляризаторы, которые имеют угол 45 в обе стороны (всего 90) и симметричны при повороте на 180 градусов — подходят. Остальные варианты не пройдут первый тест.

                                                                  У них вероятность прохождения не прямоугольная функция в отличии от ортогональных.

                                                                  Первая модель не оперирует вероятностью прохождения — там мы сразу знаем пройдет частица или нет, в зависимости от угла ее поляризации. Через первый поляризатор пройдет, если поляризация от 0 до 90 (не включительно) или от 180 до 270 (не включительно). Здесь ошибки быть не может.
                                                                    0
                                                                    Вы понимаете что пишите? Как частицы могут заранее знать пройдут они через поляризатор или нет? Они что будущее видят? Я вам уже сто раз писал что вы НЕВЕРНО моделируете даже частицы со скрытым параметром, а вы продолжаете упорствовать.

                                                                    Вы моделируете черти что, но не реальную физику.

                                                                    Вы поймите сначала физику процесса, а потом пишите программу. А не наоборот.
                                                                      0
                                                                      Как частицы могут заранее знать пройдут они через поляризатор или нет?

                                                                      Зная градус, под которым поляризованна частица — можно вычислить через какой поляризатор она способна пройти а через какой нет (потенциально). В первой модели мы этот градус знаем заранее (как бы скрытый параметр).

                                                                      Они что будущее видят?

                                                                      Они имеют уже определенное значение поляризации. И по этому значению можно точно вычислить через какой поляризатор они потенциально способны пройти а через какой нет.
                                                                        0
                                                                        Скрытый параметр и знать будущее это разные вещи. Если знать будущее то и 50% можно смоделировать и вообще любой процент. В этом и есть фокус квантовой механики она «как бы видит» будущее ну или «как бы меняет» прошлое с точки зрения обычной физики.
                                                                          0
                                                                          Скрытый параметр и знать будущее это разные вещи.

                                                                          А где мы там знаем будущее? Выбор датчика при измерении — чисто случаен.

                                                                          Просто зная градус поляризации частицы — сразу можно вычислить через какой из поляризаторов она потенциально способна пройти. В модели со скрытым параметром мы этот градус знаем сразу.
                                                                            0
                                                                            в том то и дело что через любой может кроме строго ортогонального. А у тебя не так.
                                                              0
                                                              Я думаю вероятность прохождения частицы через поляризатор равна cos(2*α)/2+0.5, где α это наклон частицы к поляризатору.

                                                              У вас же прямоугольная функция.
                                                                0
                                                                У вас же прямоугольная функция.

                                                                Так и должно быть — первый пример как раз и демонстрирует что было бы, если бы не было квантовых эффектов.
                                                                0
                                                                Интенсивность света, прошедшего через поляризаторы, подчиняется закону Малюса.

                                                                Наверное это значит что вероятность тоже равна cos^2(α)

                                                                Но я точно не уверен. Все таки интенсивность это немного другое. В общем ищите правильную формулу, если хотите моделировать.
                                                                  0
                                                                  Тут написано вероятность равна cos^2(θ) так что используйте.
                                                                0
                                                                Не лучше код выложить на github там его привести в более физический вид, а потом тут менять?
                                                                  0
                                                                  Пока код не такой большой, dotnetfiddle позволяет его запустить и посмотреть наглядно. Возможно добавлю, если появятся еще модели.
                                                                    0
                                                                    Вы считаете что тут обсуждение легко вести когда уже негде писать?
                                                                  0
                                                                  Да мне то все равно, но при моделировании физики на компьютере, можно быть ближе чем к реальным опытам. Это легче чем доказывать что использованные упрощения корректны.
                                                                    0
                                                                    Важно не потерять наглядность. Если добавить возможность утсановки поляризаторов в абсолютно произвольную позицию (от 0 до 359 градусов) — это ничего не даст, т.к. парадокс проявляется лишь при расположени поляризаторов на 120 градусов друг от друга.
                                            –1
                                            Вы не думали, что квантово запутанные пары могут быть противоположны направлены во времени, когда направление времени для одной частицы противоположно направлению времени его партнера? Ведь физикам уже удалось провести эксперименты, позволяющих обратить стрелу времени вспять, хотя для нас время продолжало идти в обычном направлении. Это значит, что время может идти в обоих направлениях одновременно.
                                            Попробуем представить что случится, если время для одной частицы противоположно времени другой частицы. Во первых, отпадает квантовая нелокальность — частица находится в двух местах в разное время. Во вторых, в обратной последовательности времени спин частицы поменяет свое направление на противоположный (как и поляризация фотона). В третьих, нет никакого «кошмарного дальнодействия», так как наблюдение одной запутанной частицы является в прошлом относительно второго. Т.е. измерили спин у одной частицы, данное измерение окажется прошлым у второй частицы. Тоже самое, если измерить спин у второй частицы, это окажется прошлым для первой частицы. Нет никакого «кошмарного дальнодействия», но появляется скрытый параметр — спин у частицы был измерен в прошлом и всегда был определен. Но самое интересное в том, что пока мы не измерим спин, этого прошлого не существует! Значит мы не наблюдаем скрытого параметра.

                                            Кстати, я пару дней назад опубликовал схему эксперимента, которая теоретически позволяет опровергнуть no-communication theorem. Возможно вам будет интересно как модель для программирования.
                                              +1
                                              Полезная ссылка на сайт quantumgame.io, на котором можно попробовать проверить модели. Ссылку привел пользватель NIN здесь.
                                                0
                                                … квантово запутанные пары могут быть противоположны направлены во времени...

                                                Сложно это представить. Если развернуть стрелу времени для человека — что он увидит?

                                                Во вторых, в обратной последовательности времени спин частицы поменяет свое направление на противоположный (как и поляризация фотона).

                                                Если просто разворот на 90 градусов — то это же будет первая модель. Будем для каждого фотона ставить поляризаторы в случайном порядке под 0°, 120° и 240° (независимо) и получим что в 55.55...% случаев один фотон пройдет а другой не пройдет (и в 44.55% оба пройдут или оба не пройдут). А на практике получаем 50% несовпадений. Как объяснить 50% с позиции разворота стрелы времени?
                                                  0

                                                  Пожалуй вы правы. Но ведь неравенство Белла носит статистический характер. Стало быть, когда говорят: "теория скрытых параметров экспериментально опровергнута", это надо понимать не так, что получено строгое доказательство. А так, что набрана достаточно убедительная статистика, позволяющее считать это утверждение верным. Быть может случайности имеют закономерность, которую мы еще не познали? Рассмотрим двухщелевой эксперимент. Пусть детекторы подсчитывают сколько фотоно прошло через первую и через вторую щель. В итоге мы не увидем интерференцию, но узнаем, что примерно 50%

                                                    0

                                                    В итоге мы не увидем интерференцию, но узнаем, что примерно 50% фотонов прошли через первую щель и примерно 50% через вторую. Но почему не 40% на 60% или 30% на 70%? Ведь каждый фотон случайным образом коллапсирует возле первой щели или возле второй щели. По какой причине мы получаем 50% на 50%, возможно в этом есть какая то закономерность?

                                                      0

                                                      Хотя погодите. Пока мы не измерили одну из запутанных частиц (противоположных во времени) спин частицы был неопределен, так как у него не было прошлого. Прошлое возникает только когда мы измеряем одну из запутанных частиц, соответственно вторая частица моментально получает противоположный спин. Но до измерения у запутанных частиц не было скрытого параметра. Это ведь объясняет нарушение неравенства Белла?

                                                        0
                                                        Прошлое возникает только когда мы измеряем одну из запутанных частиц, соответственно вторая частица моментально получает противоположный спин. Но до измерения у запутанных частиц не было скрытого параметра. Это ведь объясняет нарушение неравенства Белла?

                                                        На примере спина не могу сказать.

                                                        Мне проще на примере 3 поляризаторов как в 1 модели. Попробуйте нарисовать 3 поляризатора, которые повернуты друг относительно друга на 120 градусов. Каждый поляризатор пропускает +-45 градусов (т.е. если поляризация частицы отличается на +=45 градусов — она пройдет). А так же поляризатор симметричен по оси, то есть разворот на 180 градусов ничего не изменит.

                                                        Так вот. Если вы нарисуете на окружности области каждого из поляризаторов и раскрасите в цвета — увидите, что области накладываются.

                                                        Если рассматривать без суперпозиции а просто поляризованный луч света (обычный, не запутанный) — то получится, что в тесте 2 вероятность когда один луч пройдет а перпендикулярный (повернутый на 90 градусов) не пройдет — будет 55%. Не 50 а 55%. Т.е. больше чем те случаи, когда оба пройдут или оба не пройдут. Понятно почему так происходит с обычным лучом, не запутанным?

                                                        А вот почему запутанные частицы не совпадают в 50 — точно никто не знает. Да, может быть верна интерпретация транзакционная с запаздыванием времени, о которой вы говорите. Я ее до конца не понял.
                                                      0
                                                      если время для одной частицы противоположно времени другой частицы

                                                      Это похоже на транзакционную интерпретацию. Или есть отличия?
                                                        0

                                                        Я не совсем понял транзакционную модель.

                                                          0
                                                          Помоему она о том же, о чем вы говорили в сообщении выше:

                                                          направление времени для одной частицы противоположно направлению времени его партнера

                                                          Очень похоже:

                                                          Согласно ТИ, источник испускает как запаздывающую (обычную) волну вперед во времени, так и наступающую (дополнительную) волну назад во времени.
                                                          0
                                                          Для этих частиц нет времени в принципе, если мы говорим о фотонах хоть запутанных хоть не запутанных, момент излучения/поглощения для фотона это один и тот же момент, мне кажется в этом и кроется разгадка всех квантовых парадоксов.
                                                            0
                                                            Если рассматривать с точки зрения релятивистских законов, то для фотонов не существует и пространства. На скорости света любая длина (т.е. вся траектория фотона) сократится до нуля (думаю правильнее сказать сожмется до планковских размеров, при котором исчезнет понятие о пространстве-времени). И два запутанных фотона всегда будут находится в одной точке. Получается, что фотоны никуда не движутся (ни в пространстве, ни во времени), значит это мы движемся во времени, пересекая световой конус в четырехмерном пространстве Миньковского.
                                                              0
                                                              Возможно и так, но это уже не обязательно, я лично не верю в релятивистское сокращение длин в отличии от времени(и экспериментальная физика вряд ли, что то возразит по этому поводу), предпочитаю «абсолютное» пространство, что то вроде вида: S=v1t1=v2t2, или v1/v2=t2/t1.
                                                        0
                                                        Расширил модель «Линейная поляризация запутанных фотонов» фотонами со скрытыми параметрами и фотонами с редукцией (коллапсом) волновой функции.
                                                        dotnetfiddle.net/iYElNq

                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                        Самое читаемое