<!-- canonical: efficientnewlanguage.org/ai/examples/948-the-ear-could-not-hear-the-difference-and-could-count-it | ai_layer_version: 0.1.0 | updated: 2026-09-21 -->

# Example 948 — The ear could not hear the difference and could count it

`the_ear_could_not_hear_the_difference_and_could_count_it.eml` - A violinist tunes the A string to the piano's A by playing them together and listening for a difference in pitch, hears none, and declares the string in tune while it throbs once a second against the piano. What a one-hertz gap sounds like, as a pitch and as a pulse, is computed below.

## EML

```eml
# Self-authored for the EML case corpus (no external origin). A violinist tunes
# the A string to the piano's A by playing them together and listening for a
# difference in pitch, hears none, and declares the string in tune while it
# throbs once a second against the piano. What a one-hertz gap sounds like, as a
# pitch and as a pulse, is computed below.
#
# The reasoning is careful. The two notes were sounded together; the player
# listened for a pitch difference with a trained ear; none was audible; and the
# intent was exactly 'match the string to the piano'.
#
# Pitch is heard as a ratio and the ear cannot resolve a ratio closer than
# about half a percent, but two tones a hertz apart drift in and out of step
# once a second and that beat is counted, not heard as pitch - so the check
# that listens for pitch passes a string the check that counts beats fails.

440 => piano_a_hz
441 => string_a_hz
445 => string_a_badly_off_hz
50 => smallest_pitch_ratio_the_ear_resolves_per_myriad
10 => seconds_listened

string_a_hz - piano_a_hz => gap_hz
int(string_a_hz * 10000 / piano_a_hz) - 10000 => gap_as_a_ratio_per_myriad
smallest_pitch_ratio_the_ear_resolves_per_myriad - gap_as_a_ratio_per_myriad => margin_below_what_the_ear_resolves_per_myriad
gap_hz * seconds_listened => beats_in_the_time_listened

string_a_badly_off_hz - piano_a_hz => badly_off_gap_hz
int(string_a_badly_off_hz * 10000 / piano_a_hz) - 10000 => badly_off_gap_as_a_ratio_per_myriad
badly_off_gap_hz * seconds_listened => badly_off_beats_in_the_time_listened

"piano A                         : " + str(piano_a_hz) + " Hz" ^0
"string A                        : " + str(string_a_hz) + " Hz" ^0
"gap                             : " + str(gap_hz) + " Hz" ^0
"gap as a pitch ratio            : " + str(gap_as_a_ratio_per_myriad) + " per ten thousand" ^0
"smallest ratio the ear resolves : about " + str(smallest_pitch_ratio_the_ear_resolves_per_myriad) + " per ten thousand" ^0
"margin below the ear's floor    : " + str(margin_below_what_the_ear_resolves_per_myriad) + " per ten thousand - inaudible as pitch" ^0
"beats in " + str(seconds_listened) + " seconds              : " + str(beats_in_the_time_listened) + ", one a second, countable by anyone" ^0
"" ^0
"a badly off string              : " + str(string_a_badly_off_hz) + " Hz, gap " + str(badly_off_gap_hz) + " Hz" ^0
"its gap as a pitch ratio        : " + str(badly_off_gap_as_a_ratio_per_myriad) + " per ten thousand - audible as pitch" ^0
"its beats in " + str(seconds_listened) + " seconds          : " + str(badly_off_beats_in_the_time_listened) + ", a rattle rather than a pulse" ^0
"" ^0

# ---- what the player verified ----

"the listen-for-pitch reasoning" ^0
"  method : both notes sounded together" ^0
"  ear : trained, attentive" ^0
"  result : no difference in pitch audible" ^0
"  intent : match the string to the piano" ^0
"  facts wrong : 0" ^0
"  verdict : IN TUNE" ^0
"" ^0
"  listening for a pitch difference with a trained ear is the" ^0
"  part done right here, and it is why nothing was heard: a" ^0
"  gap of " + str(gap_as_a_ratio_per_myriad) + " per ten thousand is below what any ear resolves" ^0
"" ^0

# ---- what a hertz sounds like ----

"two measurements of the same gap" ^0
"  as pitch : a ratio, " + str(gap_as_a_ratio_per_myriad) + " per ten thousand, under the ear's" ^0
"    floor of about " + str(smallest_pitch_ratio_the_ear_resolves_per_myriad) ^0
"  as beats : a difference, " + str(gap_hz) + " Hz, heard as the loudness" ^0
"    swelling and fading " + str(gap_hz) + " time a second" ^0
"  why the beat has no floor : it is not a pitch to resolve" ^0
"    but a count to make, and one a second is easy to make" ^0
"  what the tuner does : stops listening for pitch and counts" ^0
"    beats, then turns the peg until the count reaches zero" ^0
"" ^0

# ---- what the player got ----

"the string" ^0
"  believed : in tune with the piano" ^0
"  actual : " + str(gap_hz) + " Hz high, beating " + str(beats_in_the_time_listened) + " times in " + str(seconds_listened) + " seconds" ^0
"  was the ear wrong : no; there was no pitch difference to hear" ^0
"  was the check wrong : yes; it asked the ear for a ratio" ^0
"    finer than the ear can give, when the difference was" ^0
"    there to be counted" ^0
"" ^0

# ---- null control ----

# The same string checked by counting beats instead of by listening for a
# pitch difference.
0 => nc_gap_the_pitch_check_reports_hz
1 => nc_gap_the_beat_count_reports_hz
1 => nc_hertz_the_beat_count_reveals

"null control - count the beats" ^0
"  gap, pitch check : " + str(nc_gap_the_pitch_check_reports_hz) + " Hz" ^0
"  gap, beat count : " + str(nc_gap_the_beat_count_reports_hz) + " Hz" ^0
"  hertz the beat count reveals : " + str(nc_hertz_the_beat_count_reveals) ^0
"  no string and no ear changed; the gap was measured as the" ^0
"  difference it is instead of the ratio it is too small to be" ^0
"" ^0

# ---- the rule ----

"what a trained ear hearing no pitch difference guarantees" ^0
"  the ratio is under the ear's floor : exactly; " + str(gap_as_a_ratio_per_myriad) + " per ten" ^0
"    thousand is below about " + str(smallest_pitch_ratio_the_ear_resolves_per_myriad) ^0
"  the two notes are the same : not addressed; a " + str(gap_hz) + " Hz gap that no" ^0
"    ear can hear as pitch beats " + str(gap_hz) + " time a second, " + str(beats_in_the_time_listened) + " times in" ^0
"    " + str(seconds_listened) + " seconds, and the beat is the gap itself" ^0
"" ^0

"a difference too small to hear is not too small to count; the ear that fails" ^0
"to resolve the ratio can time the throb, because the throb is the difference" ^0
"wearing a slower clock" ^0
"" ^0

"The ear heard no pitch difference, and it was right: " + str(gap_as_a_ratio_per_myriad) + " per ten thousand is" ^0
"under its floor. But the " + str(gap_hz) + " Hz gap is audible another way - as " + str(beats_in_the_time_listened) + " beats in " + str(seconds_listened) ^0
"seconds - so the string passed the pitch check and failed the count, until the" ^0
"gap is measured as the difference it is rather than the ratio it is too small to be." ^0
```

## Python (deterministic transpilation)

```python
piano_a_hz = 440
string_a_hz = 441
string_a_badly_off_hz = 445
smallest_pitch_ratio_the_ear_resolves_per_myriad = 50
seconds_listened = 10
gap_hz = string_a_hz - piano_a_hz
gap_as_a_ratio_per_myriad = int(string_a_hz * 10000 / piano_a_hz) - 10000
margin_below_what_the_ear_resolves_per_myriad = smallest_pitch_ratio_the_ear_resolves_per_myriad - gap_as_a_ratio_per_myriad
beats_in_the_time_listened = gap_hz * seconds_listened
badly_off_gap_hz = string_a_badly_off_hz - piano_a_hz
badly_off_gap_as_a_ratio_per_myriad = int(string_a_badly_off_hz * 10000 / piano_a_hz) - 10000
badly_off_beats_in_the_time_listened = badly_off_gap_hz * seconds_listened
print("piano A                         : " + str(piano_a_hz) + " Hz")
print("string A                        : " + str(string_a_hz) + " Hz")
print("gap                             : " + str(gap_hz) + " Hz")
print("gap as a pitch ratio            : " + str(gap_as_a_ratio_per_myriad) + " per ten thousand")
print("smallest ratio the ear resolves : about " + str(smallest_pitch_ratio_the_ear_resolves_per_myriad) + " per ten thousand")
print("margin below the ear's floor    : " + str(margin_below_what_the_ear_resolves_per_myriad) + " per ten thousand - inaudible as pitch")
print("beats in " + str(seconds_listened) + " seconds              : " + str(beats_in_the_time_listened) + ", one a second, countable by anyone")
print("")
print("a badly off string              : " + str(string_a_badly_off_hz) + " Hz, gap " + str(badly_off_gap_hz) + " Hz")
print("its gap as a pitch ratio        : " + str(badly_off_gap_as_a_ratio_per_myriad) + " per ten thousand - audible as pitch")
print("its beats in " + str(seconds_listened) + " seconds          : " + str(badly_off_beats_in_the_time_listened) + ", a rattle rather than a pulse")
print("")
print("the listen-for-pitch reasoning")
print("  method : both notes sounded together")
print("  ear : trained, attentive")
print("  result : no difference in pitch audible")
print("  intent : match the string to the piano")
print("  facts wrong : 0")
print("  verdict : IN TUNE")
print("")
print("  listening for a pitch difference with a trained ear is the")
print("  part done right here, and it is why nothing was heard: a")
print("  gap of " + str(gap_as_a_ratio_per_myriad) + " per ten thousand is below what any ear resolves")
print("")
print("two measurements of the same gap")
print("  as pitch : a ratio, " + str(gap_as_a_ratio_per_myriad) + " per ten thousand, under the ear's")
print("    floor of about " + str(smallest_pitch_ratio_the_ear_resolves_per_myriad))
print("  as beats : a difference, " + str(gap_hz) + " Hz, heard as the loudness")
print("    swelling and fading " + str(gap_hz) + " time a second")
print("  why the beat has no floor : it is not a pitch to resolve")
print("    but a count to make, and one a second is easy to make")
print("  what the tuner does : stops listening for pitch and counts")
print("    beats, then turns the peg until the count reaches zero")
print("")
print("the string")
print("  believed : in tune with the piano")
print("  actual : " + str(gap_hz) + " Hz high, beating " + str(beats_in_the_time_listened) + " times in " + str(seconds_listened) + " seconds")
print("  was the ear wrong : no; there was no pitch difference to hear")
print("  was the check wrong : yes; it asked the ear for a ratio")
print("    finer than the ear can give, when the difference was")
print("    there to be counted")
print("")
nc_gap_the_pitch_check_reports_hz = 0
nc_gap_the_beat_count_reports_hz = 1
nc_hertz_the_beat_count_reveals = 1
print("null control - count the beats")
print("  gap, pitch check : " + str(nc_gap_the_pitch_check_reports_hz) + " Hz")
print("  gap, beat count : " + str(nc_gap_the_beat_count_reports_hz) + " Hz")
print("  hertz the beat count reveals : " + str(nc_hertz_the_beat_count_reveals))
print("  no string and no ear changed; the gap was measured as the")
print("  difference it is instead of the ratio it is too small to be")
print("")
print("what a trained ear hearing no pitch difference guarantees")
print("  the ratio is under the ear's floor : exactly; " + str(gap_as_a_ratio_per_myriad) + " per ten")
print("    thousand is below about " + str(smallest_pitch_ratio_the_ear_resolves_per_myriad))
print("  the two notes are the same : not addressed; a " + str(gap_hz) + " Hz gap that no")
print("    ear can hear as pitch beats " + str(gap_hz) + " time a second, " + str(beats_in_the_time_listened) + " times in")
print("    " + str(seconds_listened) + " seconds, and the beat is the gap itself")
print("")
print("a difference too small to hear is not too small to count; the ear that fails")
print("to resolve the ratio can time the throb, because the throb is the difference")
print("wearing a slower clock")
print("")
print("The ear heard no pitch difference, and it was right: " + str(gap_as_a_ratio_per_myriad) + " per ten thousand is")
print("under its floor. But the " + str(gap_hz) + " Hz gap is audible another way - as " + str(beats_in_the_time_listened) + " beats in " + str(seconds_listened))
print("seconds - so the string passed the pitch check and failed the count, until the")
print("gap is measured as the difference it is rather than the ratio it is too small to be.")
```

## stdout (executed)

```text
piano A                         : 440 Hz
string A                        : 441 Hz
gap                             : 1 Hz
gap as a pitch ratio            : 22 per ten thousand
smallest ratio the ear resolves : about 50 per ten thousand
margin below the ear's floor    : 28 per ten thousand - inaudible as pitch
beats in 10 seconds              : 10, one a second, countable by anyone

a badly off string              : 445 Hz, gap 5 Hz
its gap as a pitch ratio        : 113 per ten thousand - audible as pitch
its beats in 10 seconds          : 50, a rattle rather than a pulse

the listen-for-pitch reasoning
  method : both notes sounded together
  ear : trained, attentive
  result : no difference in pitch audible
  intent : match the string to the piano
  facts wrong : 0
  verdict : IN TUNE

  listening for a pitch difference with a trained ear is the
  part done right here, and it is why nothing was heard: a
  gap of 22 per ten thousand is below what any ear resolves

two measurements of the same gap
  as pitch : a ratio, 22 per ten thousand, under the ear's
    floor of about 50
  as beats : a difference, 1 Hz, heard as the loudness
    swelling and fading 1 time a second
  why the beat has no floor : it is not a pitch to resolve
    but a count to make, and one a second is easy to make
  what the tuner does : stops listening for pitch and counts
    beats, then turns the peg until the count reaches zero

the string
  believed : in tune with the piano
  actual : 1 Hz high, beating 10 times in 10 seconds
  was the ear wrong : no; there was no pitch difference to hear
  was the check wrong : yes; it asked the ear for a ratio
    finer than the ear can give, when the difference was
    there to be counted

null control - count the beats
  gap, pitch check : 0 Hz
  gap, beat count : 1 Hz
  hertz the beat count reveals : 1
  no string and no ear changed; the gap was measured as the
  difference it is instead of the ratio it is too small to be

what a trained ear hearing no pitch difference guarantees
  the ratio is under the ear's floor : exactly; 22 per ten
    thousand is below about 50
  the two notes are the same : not addressed; a 1 Hz gap that no
    ear can hear as pitch beats 1 time a second, 10 times in
    10 seconds, and the beat is the gap itself

a difference too small to hear is not too small to count; the ear that fails
to resolve the ratio can time the throb, because the throb is the difference
wearing a slower clock

The ear heard no pitch difference, and it was right: 22 per ten thousand is
under its floor. But the 1 Hz gap is audible another way - as 10 beats in 10
seconds - so the string passed the pitch check and failed the count, until the
gap is measured as the difference it is rather than the ratio it is too small to be.
```

## Round-trip

`ok: true` — round-trip fixpoint reached (python1 == python2)

## Trace event types

eml:run:start · eml:assign · eml:output · eml:run:done
