Про неравенства Белла (нашел ошибку учёных)
От: Shmj Ниоткуда  
Дата: 18.08.18 03:00
Оценка: -4 :))) :))) :)))
Смотрю, многих сводит с ума и лишает скрепов т.н. неравенство Белла. Уже говорят и об отмене локальной природы реальности и о нарушении принципа причинности... В общем, немного покумекал и за 15 минут с пивом нашел ошибку учёных.

Вот статья, где все переведено на программерский язык C#. Так нашему брату будет легче всего понять: https://habr.com/post/181692/ А то, понимаш, любят усложнять.

Получается вот какая хрень. У долбанной частицы есть 3 некие величины, каждую из которых можно измерить (только одну). Назовем A, B и C. По результатам измерения получаем либо 0 либо 1. Так. А запутанная частица этот же параметр (у каждой из частиц нужно замерять одинаковый параметр, к примеру и там и там A) будет иметь противоположное значение, т.е. 1 или 0. Это четко совпадает.

Фигня получается в случае, когда сравниваем параметры случайным образом, к примеру у первой выбираем A, а в второй (спутанной с ней) выбираем B (или A и A — тут как попадешь, без исключений). Типа должно получаться 0,6(6) а с какого то хрена получается меньше (близко к 0.5). Ну и сразу начали воду мутить о нелокальной природе реальности и прочей хрени.

А я сразу понял в чем фишка. Просто природа исключает случаи, когда все 3 значения полностью одинаковы. Т.е. убираем вариант 000 и 111. И тогда, как раз, получаем значение близкое к 0.5, но чуть больше. Кста, можно даже определить прав ли я, посмотрев на результаты измерений (сходу не нашел). Если чуть больше 0.5 — значит прав.

Вот новая версия проги, которая демонстрирует мою идею и объясняет ошибку учёных: https://dotnetfiddle.net/Q334ok

  Скрытый текст
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication14
{
    class Program
    {
        static void Main(string[] args)
        {
            int confirm = 0, notconfirm = 0;

            Random rnd = new Random();

            List<Tuple<bool, bool, bool>> p = new List<Tuple<bool, bool, bool>>();

            for (int i = 0; i < 500000; i++)
            {
                //var t = new Tuple<bool, bool, bool>(rnd.Next(2) == 1 ? true : false, rnd.Next(2) == 1 ? true : false, rnd.Next(2) == 1 ? true : false);
                //p.Add(t);

                var t1 = new Tuple<bool, bool, bool>(false, false, true);
                var t2 = new Tuple<bool, bool, bool>(false, true, false);
                var t3 = new Tuple<bool, bool, bool>(false, true, true);
                var t4 = new Tuple<bool, bool, bool>(true, false, false);
                var t5 = new Tuple<bool, bool, bool>(true, false, true);
                var t6 = new Tuple<bool, bool, bool>(true, true, false);

                switch (rnd.Next(6))
                {
                    case 0:
                        p.Add(t1);
                        break;
                    case 1:
                        p.Add(t2);
                        break;
                    case 2:
                        p.Add(t3);
                        break;
                    case 3:
                        p.Add(t4);
                        break;
                    case 4:
                        p.Add(t5);
                        break;
                    case 5:
                        p.Add(t6);
                        break;
                    default:
                        throw new Exception("second error");
                }


            }

            for (int i = 0; i < 500000; i++)
            {
                var t = p[i];
                bool first, second;
                switch (rnd.Next(3))
                {
                    case 0:
                        first = t.Item1;
                        break;
                    case 1:
                        first = t.Item2;
                        break;
                    case 2:
                        first = t.Item3;
                        break;
                    default:
                        throw new Exception("first error");

                }

                switch (rnd.Next(3))
                {
                    case 0:
                        second = !t.Item1;
                        break;
                    case 1:
                        second = !t.Item2;
                        break;
                    case 2:
                        second = !t.Item3;
                        break;
                    default:
                        throw new Exception("second error");
                }

                if (first != second)
                    confirm++;
                else
                    notconfirm++;
            }

            Console.WriteLine((double)confirm / (double)(confirm + notconfirm));
            Console.ReadKey();
        }
    }
}
Отредактировано 18.08.2018 11:08 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.