That is, they must agree in advance on which of the responses, 0 or 1, to give to the switch position, choosing for each particle one of the eight possible functions, 000, 001, 010, 011, 100, 101, 110 and 111.
Selecting 000 or 111 will result in a 100% coincidence of the readings of the detectors, regardless of the position of the adjustment knob.
If the detectors implement one of the six remaining functions, one of the numbers is pulled out by a randomly configured switch in 2/3 cases, the other with a probability of 1/3.
Sensor position 1 | Sensor position 2 | Will the measurements match |
---|---|---|
one | one | + |
one | 2 | + |
one | 3 | - |
2 | one | + |
2 | 2 | + |
2 | 3 | - |
3 | one | - |
3 | 2 | - |
3 | 3 | + |
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);
// ( , ) 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); // } }
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); // } }
Experiment No. 1: 100% of the values coincided
Experiment number 2: 55.6700% of the values coincided
// 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); } }
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); // } }
Experiment No. 1: 100% of the values coincided
Experiment number 2: 49.7700% of the values coincided
Source: https://habr.com/ru/post/420611/
All Articles