Reasoning laboratory · Special relativity

What would actually distinguish these models?

A candidate can fail a stated constraint, remain useful in a limited regime, or agree with another candidate on every measurement you have chosen.

These are bounded, host-calculated comparisons of model consequences. No experiment of nature is being performed, and no historical data have been manufactured. The explanations remain drafts.

Reasoning laboratory · explanatory draft

Which constraint makes the difference?

Does a model that works for slow objects also keep the light speed unchanged?

The low-speed check, the light-speed postulate, and the inverse test ask different questions. Deselecting a requirement changes which questions count; it does not change a computed prediction or disprove classical mechanics.

Static worked example · ideal model, host calculation

Describe the fixed inputs from another inertial frame

Enter -0.95 to 0.95. This is a numerical exploration bound, not a physical speed limit. The low-speed test retains its own specified speeds. Modern SI light speed is used; this is not an inference of a historical constant. In the clock and rod tests this speed relates laboratory and object-rest frames; the rest length and test definition stay fixed, not the selected laboratory endpoints.

Select what this comparison must satisfy

Selecting requirements changes only which conclusions count. It never recalculates a prediction or changes an accepted snapshot.

Static worked example. The numbers were computed at build time.

Candidate predictions at accepted v/c = 0.6. References are the stated requirements.
Candidate and conditionsLow-speed composition: 10 m/s plus 10 m/sLight-speed postulateForward map followed by its inverse

Galilean absolute time

Ordinary low-speed mechanics with a shared absolute time. A change of coordinates has an inverse; retaining absolute time need not preserve the measured light speed.

The selected comparison differs at: Light-speed postulate.

Model: galilean-absolute-time-v1

Low-speed composition: 10 m/s plus 10 m/s

Included in the selected comparison

Consistent with Low-speed composition: 10 m/s plus 10 m/s

Prediction
20 m/s
Reference
20 m/s
Signed residual
0 m/s
Allowed magnitude
1e-9 m/s
Open the calculation: Low-speed composition: 10 m/s plus 10 m/s

Both candidates are compared with ordinary addition at the stated low speeds. The relativistic residual uses a cancellation-free expression so rounding two nearly equal speeds does not conceal the difference. This check keeps its own speeds when the main observer setting changes.

Tolerance: the larger of 1e-9 m/s and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m/s; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Low-speed composition: 10 m/s plus 10 m/s202001e-9

Light-speed postulate

Included in the selected comparison

Violates Light-speed postulate

Prediction
119920000 m/s
Reference
299790000 m/s
Signed residual
-179880000 m/s
Allowed magnitude
0.00029979 m/s
Open the calculation: Light-speed postulate

Transform the two events on a light ray and divide their spatial separation by their time separation. The required reference is the light speed, not a result copied from the competing candidate.

Tolerance: the larger of 0.000001 m/s and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m/s; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Light-speed postulate119916983.20000002299792458-179875474.799999980.000299792458

Forward map followed by its inverse

Included in the selected comparison

Consistent with Forward map followed by its inverse

Prediction (event-12: x)
-100000000 m
Reference
-100000000 m
Signed residual
1.4901e-8 m
Allowed magnitude
0.0001 m
Open the calculation: Forward map followed by its inverse

Transform each event and then reverse the frame velocity with the same candidate. Compare with the original event. Invertibility alone does not establish the light-speed postulate. Time is reported as ct in metres for a common unit, not as an additional physical premise.

Tolerance: the larger of 0.000001 m and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
event-1: ct-674533030.5-674533030.500.0006745330304999999
event-1: x-200000000-20000000000.00019999999999999998
event-1: y-7-700.000001
event-1: z101000.000001
event-2: ct-599584916-59958491600.000599584916
event-2: x-100000000-10000000000.00009999999999999999
event-2: y-6-600.000001
event-2: z9900.000001
event-3: ct-524636801.5-524636801.500.0005246368015
event-3: x0000.000001
event-3: y-5-500.000001
event-3: z8800.000001
event-4: ct-449688687-44968868700.000449688687
event-4: x10000000010000000000.00009999999999999999
event-4: y-4-400.000001
event-4: z7700.000001
event-5: ct-374740572.5-374740572.500.00037474057249999997
event-5: x200000000.000000032000000002.9802322387695312e-80.00020000000000000004
event-5: y-3-300.000001
event-5: z6600.000001
event-6: ct-299792458-29979245800.000299792458
event-6: x-200000000-20000000000.00019999999999999998
event-6: y-2-200.000001
event-6: z5500.000001
event-7: ct-224844343.5-224844343.500.0002248443435
event-7: x-100000000-10000000000.00009999999999999999
event-7: y-1-100.000001
event-7: z4400.000001
event-8: ct-149896229-14989622900.000149896229
event-8: x0000.000001
event-8: y0000.000001
event-8: z3300.000001
event-9: ct-74948114.5-74948114.500.0000749481145
event-9: x10000000010000000000.00009999999999999999
event-9: y1100.000001
event-9: z2200.000001
event-10: ct0000.000001
event-10: x20000000020000000000.00019999999999999998
event-10: y2200.000001
event-10: z1100.000001
event-11: ct74948114.574948114.500.0000749481145
event-11: x-200000000-20000000000.00019999999999999998
event-11: y3300.000001
event-11: z0000.000001
event-12: ct14989622914989622900.000149896229
event-12: x-99999999.99999999-1000000001.4901161193847656e-80.00009999999999999999
event-12: y4400.000001
event-12: z-1-100.000001
event-13: ct224844343.5224844343.500.0002248443435
event-13: x0000.000001
event-13: y5500.000001
event-13: z-2-200.000001
event-14: ct29979245829979245800.000299792458
event-14: x10000000010000000000.00009999999999999999
event-14: y6600.000001
event-14: z-3-300.000001
event-15: ct374740572.5374740572.500.00037474057249999997
event-15: x20000000020000000000.00019999999999999998
event-15: y7700.000001
event-15: z-4-400.000001
event-16: ct44968868744968868700.000449688687
event-16: x-200000000-20000000000.00019999999999999998
event-16: y8800.000001
event-16: z-5-500.000001
event-17: ct524636801.5524636801.500.0005246368015
event-17: x-100000000-10000000000.00009999999999999999
event-17: y9900.000001
event-17: z-6-600.000001
event-18: ct59958491659958491600.000599584916
event-18: x0000.000001
event-18: y101000.000001
event-18: z-7-700.000001
event-19: ct674533030.5674533030.500.0006745330304999999
event-19: x10000000010000000000.00009999999999999999
event-19: y111100.000001
event-19: z-8-800.000001
event-20: ct74948114574948114500.0007494811449999999
event-20: x20000000020000000000.00019999999999999998
event-20: y121200.000001
event-20: z-9-900.000001

Einstein’s inertial-frame kinematics

Aligned inertial frames with the relativity and light-speed postulates. This comparison tests consequences of the resulting map; it does not derive the map from its own predictions.

None of the selected requirements excludes this candidate at the stated tolerance.

Model: lorentz-1905-kinematics-v1

Low-speed composition: 10 m/s plus 10 m/s

Included in the selected comparison

Consistent with Low-speed composition: 10 m/s plus 10 m/s

Prediction
20 m/s
Reference
20 m/s
Signed residual
-2.2253e-14 m/s
Allowed magnitude
1e-9 m/s
Open the calculation: Low-speed composition: 10 m/s plus 10 m/s

Both candidates are compared with ordinary addition at the stated low speeds. The relativistic residual uses a cancellation-free expression so rounding two nearly equal speeds does not conceal the difference. This check keeps its own speeds when the main observer setting changes.

Tolerance: the larger of 1e-9 m/s and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m/s; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Low-speed composition: 10 m/s plus 10 m/s19.9999999999999820-2.2253001121072345e-141e-9

Light-speed postulate

Included in the selected comparison

Consistent with Light-speed postulate

Prediction
299790000 m/s
Reference
299790000 m/s
Signed residual
0 m/s
Allowed magnitude
0.00029979 m/s
Open the calculation: Light-speed postulate

Transform the two events on a light ray and divide their spatial separation by their time separation. The required reference is the light speed, not a result copied from the competing candidate.

Tolerance: the larger of 0.000001 m/s and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m/s; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Light-speed postulate29979245829979245800.000299792458

Forward map followed by its inverse

Included in the selected comparison

Consistent with Forward map followed by its inverse

Prediction (event-1: ct)
-674530000 m
Reference
-674530000 m
Signed residual
0 m
Allowed magnitude
0.00067453 m
Open the calculation: Forward map followed by its inverse

Transform each event and then reverse the frame velocity with the same candidate. Compare with the original event. Invertibility alone does not establish the light-speed postulate. Time is reported as ct in metres for a common unit, not as an additional physical premise.

Tolerance: the larger of 0.000001 m and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
event-1: ct-674533030.5-674533030.500.0006745330304999999
event-1: x-200000000-20000000000.00019999999999999998
event-1: y-7-700.000001
event-1: z101000.000001
event-2: ct-599584916-59958491600.000599584916
event-2: x-100000000-10000000000.00009999999999999999
event-2: y-6-600.000001
event-2: z9900.000001
event-3: ct-524636801.5-524636801.500.0005246368015
event-3: x0000.000001
event-3: y-5-500.000001
event-3: z8800.000001
event-4: ct-449688687-44968868700.000449688687
event-4: x10000000010000000000.00009999999999999999
event-4: y-4-400.000001
event-4: z7700.000001
event-5: ct-374740572.5-374740572.500.00037474057249999997
event-5: x20000000020000000000.00019999999999999998
event-5: y-3-300.000001
event-5: z6600.000001
event-6: ct-299792458-29979245800.000299792458
event-6: x-200000000-20000000000.00019999999999999998
event-6: y-2-200.000001
event-6: z5500.000001
event-7: ct-224844343.5-224844343.500.0002248443435
event-7: x-100000000-10000000000.00009999999999999999
event-7: y-1-100.000001
event-7: z4400.000001
event-8: ct-149896229-14989622900.000149896229
event-8: x0000.000001
event-8: y0000.000001
event-8: z3300.000001
event-9: ct-74948114.5-74948114.500.0000749481145
event-9: x10000000010000000000.00009999999999999999
event-9: y1100.000001
event-9: z2200.000001
event-10: ct0000.000001
event-10: x20000000020000000000.00019999999999999998
event-10: y2200.000001
event-10: z1100.000001
event-11: ct74948114.574948114.500.0000749481145
event-11: x-200000000-20000000000.00019999999999999998
event-11: y3300.000001
event-11: z0000.000001
event-12: ct14989622914989622900.000149896229
event-12: x-100000000-10000000000.00009999999999999999
event-12: y4400.000001
event-12: z-1-100.000001
event-13: ct224844343.5224844343.500.0002248443435
event-13: x0000.000001
event-13: y5500.000001
event-13: z-2-200.000001
event-14: ct29979245829979245800.000299792458
event-14: x10000000010000000000.00009999999999999999
event-14: y6600.000001
event-14: z-3-300.000001
event-15: ct374740572.5374740572.500.00037474057249999997
event-15: x20000000020000000000.00019999999999999998
event-15: y7700.000001
event-15: z-4-400.000001
event-16: ct44968868744968868700.000449688687
event-16: x-200000000-20000000000.00019999999999999998
event-16: y8800.000001
event-16: z-5-500.000001
event-17: ct524636801.5524636801.500.0005246368015
event-17: x-100000000-10000000000.00009999999999999999
event-17: y9900.000001
event-17: z-6-600.000001
event-18: ct59958491659958491600.000599584916
event-18: x0000.000001
event-18: y101000.000001
event-18: z-7-700.000001
event-19: ct674533030.5674533030.500.0006745330304999999
event-19: x10000000010000000000.00009999999999999999
event-19: y111100.000001
event-19: z-8-800.000001
event-20: ct74948114574948114500.0007494811449999999
event-20: x20000000020000000000.00019999999999999998
event-20: y121200.000001
event-20: z-9-900.000001

These are the candidates considered here, not every conceivable alternative.

The summary uses five significant digits; every cell offers full-precision values. The low-speed residual is evaluated without subtracting rounded speeds.

Inspect the fixed events for Forward map followed by its inverse
Specified event inputs, not observations of nature
Eventt (s)x (m)y (m)z (m)
event-1-2.25-200000000-710
event-2-2-100000000-69
event-3-1.750-58
event-4-1.5100000000-47
event-5-1.25200000000-36
event-6-1-200000000-25
event-7-0.75-100000000-14
event-8-0.5003
event-9-0.2510000000012
event-10020000000021
event-110.25-20000000030
event-120.5-1000000004-1
event-130.7505-2
event-1411000000006-3
event-151.252000000007-4
event-161.5-2000000008-5
event-171.75-1000000009-6
event-182010-7
event-192.2510000000011-8
event-202.520000000012-9
Sources, dates and calculation identities

These source references support this explanatory model comparison. They do not mark a transcription, historical reconstruction or translation as reviewed.

Evaluator closure: source:sha256:4496b3131d2c5d435eaa4fa3dae86c4823160ff2fa8be51a071833eb0d13daba
Case revision: 0fc39130e4420bed4607bc992329a974949d6f7e671f19c272e0a7fba29844ef

Both candidates are computed separately. Shared numerical primitives do not preassign agreement or disagreement.

Reasoning laboratory · explanatory draft

When the chosen observations cannot decide

Can these kinematic measurements distinguish a privileged-frame interpretation?

These are predicted outcomes of specified measurements, not historical datasets. Compare each candidate with the other. Numerical agreement under these observations does not decide whether an ether exists; disagreement elsewhere would require another stated test. The historical source links are references, not reviewed edition text.

Static worked example · ideal model, host calculation

Describe the fixed inputs from another inertial frame

Enter -0.95 to 0.95. This is a numerical exploration bound, not a physical speed limit. The low-speed test retains its own specified speeds. Modern SI light speed is used; this is not an inference of a historical constant. In the clock and rod tests this speed relates laboratory and object-rest frames; the rest length and test definition stay fixed, not the selected laboratory endpoints.

Select what this comparison must satisfy

Selecting requirements changes only which conclusions count. It never recalculates a prediction or changes an accepted snapshot.

Static worked example. The numbers were computed at build time.

Candidate predictions at accepted v/c = 0.6. References are the other candidate’s predictions.
Candidate and conditionsCoordinates of twenty specified eventsSimultaneous endpoint measurement of a 100 m rodMoving-clock seconds per laboratory secondCollinear composition with an object at 0.6c

Lorentz’s ether-based kinematics

Relative coordinates, contraction and local time with Lorentz’s scale factor set to one, interpreted with a privileged frame. Velocity composition also uses the group property associated with Poincaré’s June 1905 parallel work.

The selected observations do not distinguish these candidates. This candidate is not refuted by them.

Model: lorentz-1904-local-time-l1-v1

Coordinates of twenty specified events

Included in the selected comparison

Indistinguishable under this observation

Prediction (event-15: x)
-31055000 m
Reference
-31055000 m
Signed residual
3.7253e-8 m
Allowed magnitude
0.000031055 m
Open the calculation: Coordinates of twenty specified events

One route first forms the Galilean relative coordinate, then applies Lorentz’s scaling and local time. The other uses the existing Lorentz boost owner. Neither route calls the other to produce these event coordinates. Components use ct, x, y and z in metres.

Tolerance: the larger of 0.000001 m and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
event-1: ct-693166288.125-693166288.12500.000693166288125
event-1: x255899772.87499994255899772.875-5.960464477539063e-80.00025589977287499997
event-1: y-7-700.000001
event-1: z101000.000001
event-2: ct-674481145-67448114500.000674481145
event-2: x324688686.99999994324688687-5.960464477539063e-80.00032468868699999997
event-2: y-6-600.000001
event-2: z9900.000001
event-3: ct-655796001.875-655796001.87500.000655796001875
event-3: x393477601.125393477601.12500.00039347760112499997
event-3: y-5-500.000001
event-3: z8800.000001
event-4: ct-637110858.75-637110858.7500.00063711085875
event-4: x462266515.25462266515.2500.00046226651524999997
event-4: y-4-400.000001
event-4: z7700.000001
event-5: ct-618425715.6249999-618425715.6251.1920928955078125e-70.0006184257156249999
event-5: x531055429.375531055429.37500.000531055429375
event-5: y-3-300.000001
event-5: z6600.000001
event-6: ct-224740572.5-224740572.500.00022474057249999998
event-6: x-25155656.500000022-25155656.5-2.2351741790771484e-80.000025155656500000022
event-6: y-2-200.000001
event-6: z5500.000001
event-7: ct-206055429.37499997-206055429.3752.9802322387695312e-80.00020605542937499998
event-7: x43633257.6249999943633257.625-7.450580596923828e-90.000043633257625
event-7: y-1-100.000001
event-7: z4400.000001
event-8: ct-187370286.25-187370286.2500.00018737028624999998
event-8: x112422171.74999999112422171.75-1.4901161193847656e-80.00011242217175
event-8: y0000.000001
event-8: z3300.000001
event-9: ct-168685143.12500003-168685143.125-2.9802322387695312e-80.00016868514312500004
event-9: x181211085.875181211085.87500.000181211085875
event-9: y1100.000001
event-9: z2200.000001
event-10: ct-150000000-15000000000.00015
event-10: x25000000025000000000.00025
event-10: y2200.000001
event-10: z1100.000001
event-11: ct243685143.12499997243685143.125-2.9802322387695312e-80.000243685143125
event-11: x-306211085.875-306211085.87500.000306211085875
event-11: y3300.000001
event-11: z0000.000001
event-12: ct262370286.25262370286.2500.00026237028625
event-12: x-237422171.74999997-237422171.752.9802322387695312e-80.00023742217174999998
event-12: y4400.000001
event-12: z-1-100.000001
event-13: ct281055429.375281055429.37500.000281055429375
event-13: x-168633257.625-168633257.62500.00016863325762499998
event-13: y5500.000001
event-13: z-2-200.000001
event-14: ct299740572.5299740572.500.0002997405725
event-14: x-99844343.49999997-99844343.52.9802322387695312e-80.0000998443435
event-14: y6600.000001
event-14: z-3-300.000001
event-15: ct318425715.62499994318425715.625-5.960464477539063e-80.000318425715625
event-15: x-31055429.374999963-31055429.3753.725290298461914e-80.000031055429375
event-15: y7700.000001
event-15: z-4-400.000001
event-16: ct712110858.7499999712110858.75-1.1920928955078125e-70.00071211085875
event-16: x-587266515.25-587266515.2500.00058726651525
event-16: y8800.000001
event-16: z-5-500.000001
event-17: ct730796001.875730796001.87500.000730796001875
event-17: x-518477601.125-518477601.12500.000518477601125
event-17: y9900.000001
event-17: z-6-600.000001
event-18: ct74948114574948114500.0007494811449999999
event-18: x-449688686.99999994-4496886875.960464477539063e-80.000449688687
event-18: y101000.000001
event-18: z-7-700.000001
event-19: ct768166288.1249999768166288.125-1.1920928955078125e-70.000768166288125
event-19: x-380899772.87499994-380899772.8755.960464477539063e-80.000380899772875
event-19: y111100.000001
event-19: z-8-800.000001
event-20: ct786851431.25786851431.2500.00078685143125
event-20: x-312110858.74999994-312110858.755.960464477539063e-80.00031211085875
event-20: y121200.000001
event-20: z-9-900.000001

Simultaneous endpoint measurement of a 100 m rod

Included in the selected comparison

Indistinguishable under this observation

Prediction
80 m
Reference
80 m
Signed residual
0 m
Allowed magnitude
1e-10 m
Open the calculation: Simultaneous endpoint measurement of a 100 m rod

The endpoints are fixed in the rod frame. Each candidate’s inverse map selects the endpoint times that are simultaneous in the laboratory. Equal times in the rod frame would answer a different length question.

Tolerance: the larger of 1e-10 m and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Simultaneous endpoint measurement of a 100 m rod808001e-10

Moving-clock seconds per laboratory second

Included in the selected comparison

Indistinguishable under this observation

Prediction
0.8 1
Reference
0.8 1
Signed residual
0 1
Allowed magnitude
1e-12 1
Open the calculation: Moving-clock seconds per laboratory second

Transform two events on the moving clock’s worldline. Compare the elapsed rest-frame time per laboratory second. This is an inertial clock-rate comparison, not a round-trip or acceleration experiment.

Tolerance: the larger of 1e-12 1 and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in 1; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Moving-clock seconds per laboratory second0.80.801e-12

Collinear composition with an object at 0.6c

Included in the selected comparison

Indistinguishable under this observation

Prediction
264520000 m/s
Reference
264520000 m/s
Signed residual
0 m/s
Allowed magnitude
0.00026452 m/s
Open the calculation: Collinear composition with an object at 0.6c

Transform a rest-frame worldline back to the laboratory with each candidate’s inverse map. The reference is the other candidate’s prediction. Poincaré’s June 1905 contribution is parallel work, not knowledge placed on the 1904 shelf.

Tolerance: the larger of 0.000001 m/s and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m/s; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Collinear composition with an object at 0.6c264522757.0588235264522757.058823500.0002645227570588235

Einstein’s inertial-frame kinematics

Aligned inertial frames with the relativity and light-speed postulates. This comparison tests consequences of the resulting map; it does not derive the map from its own predictions.

The selected observations do not distinguish these candidates. This candidate is not refuted by them.

Model: lorentz-1905-kinematics-v1

Coordinates of twenty specified events

Included in the selected comparison

Indistinguishable under this observation

Prediction (event-15: x)
-31055000 m
Reference
-31055000 m
Signed residual
-3.7253e-8 m
Allowed magnitude
0.000031055 m
Open the calculation: Coordinates of twenty specified events

One route first forms the Galilean relative coordinate, then applies Lorentz’s scaling and local time. The other uses the existing Lorentz boost owner. Neither route calls the other to produce these event coordinates. Components use ct, x, y and z in metres.

Tolerance: the larger of 0.000001 m and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
event-1: ct-693166288.125-693166288.12500.000693166288125
event-1: x255899772.875255899772.874999945.960464477539063e-80.00025589977287499997
event-1: y-7-700.000001
event-1: z101000.000001
event-2: ct-674481145-67448114500.000674481145
event-2: x324688687324688686.999999945.960464477539063e-80.00032468868699999997
event-2: y-6-600.000001
event-2: z9900.000001
event-3: ct-655796001.875-655796001.87500.000655796001875
event-3: x393477601.125393477601.12500.00039347760112499997
event-3: y-5-500.000001
event-3: z8800.000001
event-4: ct-637110858.75-637110858.7500.00063711085875
event-4: x462266515.25462266515.2500.00046226651524999997
event-4: y-4-400.000001
event-4: z7700.000001
event-5: ct-618425715.625-618425715.6249999-1.1920928955078125e-70.0006184257156249999
event-5: x531055429.375531055429.37500.000531055429375
event-5: y-3-300.000001
event-5: z6600.000001
event-6: ct-224740572.5-224740572.500.00022474057249999998
event-6: x-25155656.5-25155656.5000000222.2351741790771484e-80.000025155656500000022
event-6: y-2-200.000001
event-6: z5500.000001
event-7: ct-206055429.375-206055429.37499997-2.9802322387695312e-80.00020605542937499998
event-7: x43633257.62543633257.624999997.450580596923828e-90.000043633257625
event-7: y-1-100.000001
event-7: z4400.000001
event-8: ct-187370286.25-187370286.2500.00018737028624999998
event-8: x112422171.75112422171.749999991.4901161193847656e-80.00011242217175
event-8: y0000.000001
event-8: z3300.000001
event-9: ct-168685143.125-168685143.125000032.9802322387695312e-80.00016868514312500004
event-9: x181211085.875181211085.87500.000181211085875
event-9: y1100.000001
event-9: z2200.000001
event-10: ct-150000000-15000000000.00015
event-10: x25000000025000000000.00025
event-10: y2200.000001
event-10: z1100.000001
event-11: ct243685143.125243685143.124999972.9802322387695312e-80.000243685143125
event-11: x-306211085.875-306211085.87500.000306211085875
event-11: y3300.000001
event-11: z0000.000001
event-12: ct262370286.25262370286.2500.00026237028625
event-12: x-237422171.75-237422171.74999997-2.9802322387695312e-80.00023742217174999998
event-12: y4400.000001
event-12: z-1-100.000001
event-13: ct281055429.375281055429.37500.000281055429375
event-13: x-168633257.625-168633257.62500.00016863325762499998
event-13: y5500.000001
event-13: z-2-200.000001
event-14: ct299740572.5299740572.500.0002997405725
event-14: x-99844343.5-99844343.49999997-2.9802322387695312e-80.0000998443435
event-14: y6600.000001
event-14: z-3-300.000001
event-15: ct318425715.625318425715.624999945.960464477539063e-80.000318425715625
event-15: x-31055429.375-31055429.374999963-3.725290298461914e-80.000031055429375
event-15: y7700.000001
event-15: z-4-400.000001
event-16: ct712110858.75712110858.74999991.1920928955078125e-70.00071211085875
event-16: x-587266515.25-587266515.2500.00058726651525
event-16: y8800.000001
event-16: z-5-500.000001
event-17: ct730796001.875730796001.87500.000730796001875
event-17: x-518477601.125-518477601.12500.000518477601125
event-17: y9900.000001
event-17: z-6-600.000001
event-18: ct74948114574948114500.0007494811449999999
event-18: x-449688687-449688686.99999994-5.960464477539063e-80.000449688687
event-18: y101000.000001
event-18: z-7-700.000001
event-19: ct768166288.125768166288.12499991.1920928955078125e-70.000768166288125
event-19: x-380899772.875-380899772.87499994-5.960464477539063e-80.000380899772875
event-19: y111100.000001
event-19: z-8-800.000001
event-20: ct786851431.25786851431.2500.00078685143125
event-20: x-312110858.75-312110858.74999994-5.960464477539063e-80.00031211085875
event-20: y121200.000001
event-20: z-9-900.000001

Simultaneous endpoint measurement of a 100 m rod

Included in the selected comparison

Indistinguishable under this observation

Prediction
80 m
Reference
80 m
Signed residual
0 m
Allowed magnitude
1e-10 m
Open the calculation: Simultaneous endpoint measurement of a 100 m rod

The endpoints are fixed in the rod frame. Each candidate’s inverse map selects the endpoint times that are simultaneous in the laboratory. Equal times in the rod frame would answer a different length question.

Tolerance: the larger of 1e-10 m and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Simultaneous endpoint measurement of a 100 m rod808001e-10

Moving-clock seconds per laboratory second

Included in the selected comparison

Indistinguishable under this observation

Prediction
0.8 1
Reference
0.8 1
Signed residual
0 1
Allowed magnitude
1e-12 1
Open the calculation: Moving-clock seconds per laboratory second

Transform two events on the moving clock’s worldline. Compare the elapsed rest-frame time per laboratory second. This is an inertial clock-rate comparison, not a round-trip or acceleration experiment.

Tolerance: the larger of 1e-12 1 and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in 1; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Moving-clock seconds per laboratory second0.80.801e-12

Collinear composition with an object at 0.6c

Included in the selected comparison

Indistinguishable under this observation

Prediction
264520000 m/s
Reference
264520000 m/s
Signed residual
0 m/s
Allowed magnitude
0.00026452 m/s
Open the calculation: Collinear composition with an object at 0.6c

Transform a rest-frame worldline back to the laboratory with each candidate’s inverse map. The reference is the other candidate’s prediction. Poincaré’s June 1905 contribution is parallel work, not knowledge placed on the 1904 shelf.

Tolerance: the larger of 0.000001 m/s and 1e-12 times the larger magnitude of prediction and reference. A rounding-sized boundary band is reported as indeterminate.

A stated numerical comparison threshold, not a measurement uncertainty or a confidence interval. The absolute floor also covers zero components.

Every accepted readout, in m/s; full-precision decimal strings
SamplePredictionReferenceSigned residualAllowed magnitude
Collinear composition with an object at 0.6c264522757.0588235264522757.058823500.0002645227570588235

These are the candidates considered here, not every conceivable alternative.

The summary uses five significant digits; every cell offers full-precision values. The low-speed residual is evaluated without subtracting rounded speeds.

Inspect the fixed events for Coordinates of twenty specified events
Specified event inputs, not observations of nature
Eventt (s)x (m)y (m)z (m)
event-1-2.25-200000000-710
event-2-2-100000000-69
event-3-1.750-58
event-4-1.5100000000-47
event-5-1.25200000000-36
event-6-1-200000000-25
event-7-0.75-100000000-14
event-8-0.5003
event-9-0.2510000000012
event-10020000000021
event-110.25-20000000030
event-120.5-1000000004-1
event-130.7505-2
event-1411000000006-3
event-151.252000000007-4
event-161.5-2000000008-5
event-171.75-1000000009-6
event-182010-7
event-192.2510000000011-8
event-202.520000000012-9
Sources, dates and calculation identities

These source references support this explanatory model comparison. They do not mark a transcription, historical reconstruction or translation as reviewed.

Evaluator closure: source:sha256:4496b3131d2c5d435eaa4fa3dae86c4823160ff2fa8be51a071833eb0d13daba
Case revision: 5cff4533b2e4a5bbaaecd3c22be1d31ae8d7b2c1f44c94fc06b2dc8e9afe420c

Both candidates are computed separately. Shared numerical primitives do not preassign agreement or disagreement.

Inspect the calculation, not just its conclusion

The ether route constructs a relative coordinate and local time independently of the Lorentz event-transform function. Clock rates, moving-rod lengths and composed speeds are then obtained from each candidate’s events. A comparison table never supplies a prewritten verdict.

Light-speed invariance is a stated constraint in the first case. Agreement under the second case’s observations does not prove that an ether exists or that it does not exist.

Show the calculation source used by this build

source:sha256:4496b3131d2c5d435eaa4fa3dae86c4823160ff2fa8be51a071833eb0d13daba

src/physics/reference/countermodels.ts

sha256:a381c58f18bccbb565a95b2d81668cf0c235cfadfac758b174a4bd5d21846188

/**
 * Small, explicit countermodel owners; no outcomes are decided here.
 * The ether route uses Lorentz's relative coordinate and local time with l = 1,
 * not the Einstein event map. Composition in that case is attributed to
 * Poincare's June 1905 parallel work, not silently to Lorentz 1904 alone.
 */

import { ok, outsideDomain } from "./kinematics/types.ts";
import {
  alignedBoost,
  type Event,
  galileanMap,
  galileanRelativisticVelocityDifference,
  galileanVelocity,
  gamma,
  type KinematicResult,
  speedOfLightMetresPerSecond,
  transformEvent,
} from "./kinematics.ts";

export type CountermodelId = "galilean" | "lorentz" | "lorentz-ether";
export type EventMap = (event: Event, beta: number, c: number) => KinematicResult<Event>;

function domain(v: number, c: number): KinematicResult<never> | null {
  if (!Number.isFinite(c) || c <= 0 || !Number.isFinite(v))
    return outsideDomain("nonfinite-input", "Use finite speeds and a positive finite light speed.");
  if (Math.abs(v) >= c)
    return outsideDomain("superluminal-observer", "The comparison uses observers with |v| < c.");
  return null;
}
function finiteNumber(value: number): KinematicResult<number> {
  return Number.isFinite(value)
    ? ok(value)
    : {
        status: "outside-domain",
        condition: "unrepresentable-result",
        domainKind: "numerical",
        reason: "This result is outside the finite numerical range.",
      };
}
function finiteEvent(result: KinematicResult<Event>): KinematicResult<Event> {
  if (result.status !== "value") return result;
  return Object.values(result.value).every(Number.isFinite)
    ? result
    : {
        status: "outside-domain",
        condition: "unrepresentable-result",
        domainKind: "numerical",
        reason: "The transformed event is outside the finite numerical range.",
      };
}

/** Galilean addition, within the comparison's common subluminal input domain. */
export function galileanCompose(
  u: number,
  v: number,
  c = speedOfLightMetresPerSecond(),
): KinematicResult<number> {
  const bad = domain(v, c) ?? domain(u, c);
  if (bad) return bad;
  const result = galileanVelocity(u, -v);
  return result.status === "value" ? finiteNumber(result.value) : result;
}

/** Galilean minus relativistic composition, without subtracting rounded speeds. */
export function lorentzCompositionResidual(
  u: number,
  v: number,
  c = speedOfLightMetresPerSecond(),
): KinematicResult<number> {
  const bad = domain(v, c) ?? domain(u, c);
  if (bad) return bad;
  // The existing owner's difference for a boost of -v is relativistic addition
  // minus Galilean addition. Changing the sign keeps its cancellation-free path.
  const result = galileanRelativisticVelocityDifference(u, -v, c);
  return result.status === "value" ? finiteNumber(-result.value.difference) : result;
}

export function lorentz1904EventMap(
  event: Event,
  v: number,
  c = speedOfLightMetresPerSecond(),
): KinematicResult<Event> {
  const bad = domain(v, c);
  if (bad) return bad;
  const g = gamma(v / c);
  if (g.status !== "value") return g;
  const relative = galileanMap(event, v);
  if (relative.status !== "value") return relative;
  const xr = relative.value.x;
  return finiteEvent(
    ok({
      x: g.value * xr,
      t: event.t / g.value - g.value * (v / c) * (xr / c),
      y: event.y,
      z: event.z,
    }),
  );
}

/** Closed owner registry, deliberately without an arbitrary function-name evaluator. */
export function countermodelEventMap(
  candidate: CountermodelId,
  event: Event,
  beta: number,
  c = speedOfLightMetresPerSecond(),
): KinematicResult<Event> {
  if (!Number.isFinite(beta) || Math.abs(beta) >= 1)
    return outsideDomain("superluminal-observer", "Use a finite observer speed with |v/c| < 1.");
  const bad = domain(beta * c, c);
  if (bad) return bad;
  if (candidate === "galilean") return finiteEvent(galileanMap(event, beta * c));
  if (candidate === "lorentz-ether") return lorentz1904EventMap(event, beta * c, c);
  if (candidate !== "lorentz")
    return outsideDomain("unknown-model", "This candidate is not registered.");
  const boost = alignedBoost(beta, c);
  return boost.status === "value" ? finiteEvent(transformEvent(event, boost.value)) : boost;
}

/** A rate from two events on a worldline, not a second velocity-transform formula. */
export function mappedWorldlineSpeed(
  map: EventMap,
  u: number,
  beta: number,
  c: number,
): KinematicResult<number> {
  if (!Number.isFinite(u) || Math.abs(u) > c)
    return outsideDomain("invalid-speed", "The tested worldline must have |u| <= c.");
  const origin = map({ t: 0, x: 0, y: 0, z: 0 }, beta, c);
  const later = map({ t: 1, x: u, y: 0, z: 0 }, beta, c);
  if (origin.status !== "value") return origin;
  if (later.status !== "value") return later;
  const dt = later.value.t - origin.value.t;
  if (dt === 0)
    return outsideDomain(
      "zero-time-interval",
      "These events have no time separation in this description.",
    );
  return finiteNumber((later.value.x - origin.value.x) / dt);
}

/** Rest-frame clock seconds per laboratory second, from the clock's worldline. */
export function mappedClockRate(map: EventMap, beta: number, c: number): KinematicResult<number> {
  const origin = map({ t: 0, x: 0, y: 0, z: 0 }, beta, c);
  const later = map({ t: 1, x: beta * c, y: 0, z: 0 }, beta, c);
  if (origin.status !== "value") return origin;
  if (later.status !== "value") return later;
  return finiteNumber(later.value.t - origin.value.t);
}

/**
 * Solve laboratory simultaneity with the candidate's inverse map. The two
 * endpoints are fixed in the rod frame. Equal rod-frame times would measure
 * a different thing; every candidate supplies its own required time offset.
 */
export function mappedRodLength(
  map: EventMap,
  properLength: number,
  beta: number,
  c: number,
): KinematicResult<number> {
  if (!Number.isFinite(properLength) || properLength <= 0)
    return outsideDomain("invalid-length", "Use a positive finite proper length.");
  const timeBasis = map({ t: 1, x: 0, y: 0, z: 0 }, -beta, c);
  const endAtZero = map({ t: 0, x: properLength, y: 0, z: 0 }, -beta, c);
  if (timeBasis.status !== "value") return timeBasis;
  if (endAtZero.status !== "value") return endAtZero;
  if (timeBasis.value.t === 0)
    return outsideDomain(
      "singular-time-map",
      "This map cannot select simultaneous laboratory endpoints.",
    );
  const end = map(
    { t: -endAtZero.value.t / timeBasis.value.t, x: properLength, y: 0, z: 0 },
    -beta,
    c,
  );
  const start = map({ t: 0, x: 0, y: 0, z: 0 }, -beta, c);
  if (end.status !== "value") return end;
  if (start.status !== "value") return start;
  return finiteNumber(end.value.x - start.value.x);
}

src/reasoning/countermodel/cellEvaluator.ts

sha256:adaefa8de4e589274e454abcf40e57a39ff1ddc51d4fc03a19ecfcd17505024c

/** Runs declared tests through the numerical owners. Cases supply inputs, never verdicts. */

import type { ScientificResult } from "../../experiments/results/types.ts";
import type { OutputContract } from "../../experiments/store/instanceStore.ts";
import {
  countermodelEventMap,
  galileanCompose,
  lorentzCompositionResidual,
  mappedClockRate,
  mappedRodLength,
  mappedWorldlineSpeed,
} from "../../physics/reference/countermodels.ts";
import {
  type Event,
  type KinematicResult,
  speedOfLightMetresPerSecond,
} from "../../physics/reference/kinematics.ts";
import {
  type CountermodelCase,
  type CountermodelTest,
  parseCountermodelCase,
  testUnit,
} from "./caseSchema.ts";

export const OUTPUT_PARTS = ["Values", "Reference", "Residual"] as const;
export function cellQuantity(
  candidate: number,
  test: number,
  part: (typeof OUTPUT_PARTS)[number],
): string {
  return `candidate${candidate}Test${test}${part}`;
}
export function caseOutputs(spec: CountermodelCase): Readonly<Record<string, OutputContract>> {
  const entries: [string, OutputContract][] = [];
  spec.candidates.forEach((candidate, i) => {
    spec.tests.forEach((test, j) => {
      OUTPUT_PARTS.forEach((part) => {
        entries.push([
          cellQuantity(i, j, part),
          {
            unit: testUnit(test.test),
            semanticKind: `countermodel-${part.toLowerCase()}`,
            ownerId: `countermodels.${candidate.id}.${test.test}`,
            statuses: ["value", "outside-domain"],
          },
        ]);
      });
    });
  });
  return Object.freeze(Object.fromEntries(entries));
}
export function cellSampleLabels(test: CountermodelTest): readonly string[] {
  return test.inputs.events
    ? test.inputs.events.flatMap((event) =>
        ["ct", "x", "y", "z"].map((axis) => `${event.id}: ${axis}`),
      )
    : [test.label];
}
class UnavailablePrediction extends Error {
  readonly result: Extract<KinematicResult<never>, { status: "outside-domain" }>;
  constructor(result: Extract<KinematicResult<never>, { status: "outside-domain" }>) {
    super(result.reason);
    this.result = result;
  }
}
function value<T>(result: KinematicResult<T>): T {
  if (result.status !== "value") throw new UnavailablePrediction(result);
  return result.value;
}
const components = (event: Event, c: number): number[] => [event.t * c, event.x, event.y, event.z];

function predictions(
  spec: CountermodelCase,
  i: number,
  test: CountermodelTest,
  beta: number,
  c: number,
): number[] {
  const candidate = spec.candidates[i];
  if (!candidate) throw new TypeError("Unknown candidate index.");
  const map = (event: Event, b: number, light: number) =>
    countermodelEventMap(candidate.id, event, b, light);
  const p = test.inputs;
  switch (test.test) {
    case "low-speed":
      return [
        candidate.id === "galilean"
          ? value(galileanCompose(p.u as number, p.v as number, c))
          : value(mappedWorldlineSpeed(map, p.u as number, -(p.v as number) / c, c)),
      ];
    case "light-speed":
      return [value(mappedWorldlineSpeed(map, c, beta, c))];
    case "inverse":
      return (p.events ?? []).flatMap((event) =>
        components(value(map(value(map(event, beta, c)), -beta, c)), c),
      );
    case "events":
      return (p.events ?? []).flatMap((event) => components(value(map(event, beta, c)), c));
    case "rod":
      return [value(mappedRodLength(map, p.properLength as number, beta, c))];
    case "clock":
      return [value(mappedClockRate(map, beta, c))];
    case "composition":
      return [value(mappedWorldlineSpeed(map, (p.worldlineBeta as number) * c, -beta, c))];
  }
}
export type CountermodelEvaluation = Readonly<{
  outputs: readonly ScientificResult[];
  stepIndex: 0;
  simulationTime: 0;
}>;
export function evaluateCountermodelCase(
  input: CountermodelCase,
  beta: number,
): CountermodelEvaluation {
  const spec = parseCountermodelCase(input);
  if (!Number.isFinite(beta) || Math.abs(beta) > 0.95)
    throw new RangeError(
      "Use an observer speed v/c between -0.95 and 0.95 for this bounded comparison.",
    );
  const c = speedOfLightMetresPerSecond();
  const contracts = caseOutputs(spec),
    outputs: ScientificResult[] = [];
  spec.tests.forEach((test, j) => {
    // Each candidate is evaluated separately, exactly once per test.
    const calculated = spec.candidates.map((_, i) => {
      try {
        return { values: predictions(spec, i, test, beta, c) };
      } catch (error) {
        if (error instanceof UnavailablePrediction) return { failure: error.result };
        throw error;
      }
    });
    spec.candidates.forEach((candidate, i) => {
      const actual = calculated[i],
        other = calculated[1 - i];
      let reference: number[];
      if (test.kind === "observation") reference = other?.values ?? [];
      else if (test.test === "low-speed")
        reference = [value(galileanCompose(test.inputs.u as number, test.inputs.v as number, c))];
      else if (test.test === "light-speed") reference = [c];
      else reference = (test.inputs.events ?? []).flatMap((event) => components(event, c));
      const failure = actual?.failure ?? (test.kind === "observation" ? other?.failure : undefined);
      const values = actual?.values ?? [];
      const residuals = values.map((n, k) => n - (reference[k] ?? NaN));
      if (test.test === "low-speed" && candidate.id === "lorentz") {
        residuals[0] = -value(
          lorentzCompositionResidual(test.inputs.u as number, test.inputs.v as number, c),
        );
      }
      OUTPUT_PARTS.forEach((part, k) => {
        const quantityId = cellQuantity(i, j, part),
          contract = contracts[quantityId];
        if (!contract) throw new TypeError("Missing countermodel output contract.");
        const common = {
          quantityId,
          unit: contract.unit,
          semanticKind: contract.semanticKind,
          ownerId: contract.ownerId,
        };
        if (failure)
          outputs.push({
            ...common,
            ...failure,
            boundary: { alternativeModel: "Choose inputs within the stated numerical domain." },
          });
        else {
          const data = [values, reference, residuals][k];
          if (
            !data ||
            data.length !== cellSampleLabels(test).length ||
            !data.every(Number.isFinite)
          )
            throw new RangeError(
              "Countermodel outputs must be finite and have the declared sample layout.",
            );
          outputs.push({ ...common, status: "value", value: Float64Array.from(data) });
        }
      });
    });
  });
  return { outputs, stepIndex: 0, simulationTime: 0 };
}
All files included in the evaluator digest
  • scripts/generate-countermodels.mjs
  • src/content/checks/voice/index.ts
  • src/content/checks/voice/matchers.ts
  • src/content/checks/voice/rules.ts
  • src/content/compiler/loaders.ts
  • src/content/kernel/sourceDigest.ts
  • src/content/provenance/yaml.ts
  • src/experiments/results/codec.ts
  • src/experiments/results/outcomes.ts
  • src/experiments/results/refusalCodes.ts
  • src/experiments/results/refusals.ts
  • src/experiments/results/types.ts
  • src/experiments/store/instanceStore.ts
  • src/physics/reference/constants.ts
  • src/physics/reference/countermodels.ts
  • src/physics/reference/kinematics.ts
  • src/physics/reference/kinematics/concordance.ts
  • src/physics/reference/kinematics/constraints.ts
  • src/physics/reference/kinematics/mode1904.ts
  • src/physics/reference/kinematics/types.ts
  • src/reasoning/countermodel/caseSchema.ts
  • src/reasoning/countermodel/cellEvaluator.ts
  • src/reasoning/countermodel/session.ts
  • src/units/tolerance.ts