Case 985

The unaffected sibling was a carrier two times in three

the_unaffected_sibling_was_a_carrier_two_times_in_three.eml - Two parents who are both carriers of a recessive condition have one affected child. Their other child is unaffected and, planning a family, is told the textbook figure: a child of two carriers is a carrier one time in two. What being unaffected does to that figure is computed below.

ok: true — round-trip fixpoint reached (python1 == python2)updated 2026-09-23

EML

eml
# Self-authored for the EML case corpus (no external origin). Two parents who
# are both carriers of a recessive condition have one affected child. Their
# other child is unaffected and, planning a family, is told the textbook figure:
# a child of two carriers is a carrier one time in two. What being unaffected
# does to that figure is computed below.
#
# The reasoning is careful. Both parents really are carriers; the textbook's one
# in four with no copy, two in four with one, one in four with two is right;
# each child really is a fresh draw; and the intent is exactly 'what is my
# chance of being a carrier'.
#
# The one-in-two is over all children, affected ones included. This child is
# known to be unaffected, which removes the quarter with two copies; of the
# three quarters left, two are carriers. Among 400 children of such parents,
# 300 are unaffected and 200 of those carry one copy - 6666 per ten thousand,
# not 5000 - and the risk this child passes on rises by the same third.

400 => children_of_two_carrier_parents
25 => people_per_carrier_in_the_population

int(children_of_two_carrier_parents / 4) => children_with_no_copy
int(children_of_two_carrier_parents / 2) => children_with_one_copy
int(children_of_two_carrier_parents / 4) => children_with_two_copies
children_with_no_copy + children_with_one_copy => unaffected_children
int(children_with_one_copy * 10000 / children_of_two_carrier_parents) => carrier_share_of_all_children_per_myriad
int(children_with_one_copy * 10000 / unaffected_children) => carrier_share_of_unaffected_children_per_myriad
carrier_share_of_unaffected_children_per_myriad - carrier_share_of_all_children_per_myriad => per_myriad_being_unaffected_adds
int(carrier_share_of_all_children_per_myriad * 100000 / (10000 * people_per_carrier_in_the_population * 4)) => own_child_risk_believed_per_100000
int(carrier_share_of_unaffected_children_per_myriad * 100000 / (10000 * people_per_carrier_in_the_population * 4)) => own_child_risk_actual_per_100000

"children of two carriers        : " + str(children_of_two_carrier_parents) ^0
"  no copy                       : " + str(children_with_no_copy) ^0
"  one copy, carriers            : " + str(children_with_one_copy) ^0
"  two copies, affected          : " + str(children_with_two_copies) ^0
"unaffected children             : " + str(unaffected_children) ^0
"" ^0
"carriers among all children     : " + str(carrier_share_of_all_children_per_myriad) + " per ten thousand" ^0
"carriers among the unaffected   : " + str(carrier_share_of_unaffected_children_per_myriad) + " per ten thousand" ^0
"being unaffected adds           : " + str(per_myriad_being_unaffected_adds) + " per ten thousand" ^0
"" ^0
"own child's risk, partner from a population where 1 in " + str(people_per_carrier_in_the_population) + " carries :" ^0
"  on the textbook figure        : " + str(own_child_risk_believed_per_100000) + " per hundred thousand" ^0
"  on the unaffected figure      : " + str(own_child_risk_actual_per_100000) + " per hundred thousand" ^0
"" ^0

# ---- what the family verified ----

"the one-in-two reasoning" ^0
"  parents : both carriers, confirmed" ^0
"  ratio : one in four, two in four, one in four, the textbook's" ^0
"  draws : every child a fresh one" ^0
"  intent : what is my chance of being a carrier" ^0
"  facts wrong : 0" ^0
"  verdict : A CHILD OF TWO CARRIERS IS A CARRIER ONE TIME IN TWO" ^0
"" ^0
"  taking the textbook ratio for two carriers is the part done" ^0
"  right here, and it is why " + str(carrier_share_of_all_children_per_myriad) + " per ten thousand is exactly the" ^0
"  carrier share among all their children" ^0
"" ^0

# ---- what being unaffected does ----

"a condition on the draw" ^0
"  the textbook's one in two : counted over all " + str(children_of_two_carrier_parents) + " children" ^0
"  what is known about this child : unaffected, so not one of the" ^0
"    " + str(children_with_two_copies) + " with two copies" ^0
"  who is left : " + str(unaffected_children) + " children, " + str(children_with_one_copy) + " of them carriers" ^0
"  the chance for this child : " + str(carrier_share_of_unaffected_children_per_myriad) + " per ten thousand, two in three" ^0
"  what follows : every risk built on it rises by the same third," ^0
"    " + str(own_child_risk_believed_per_100000) + " to " + str(own_child_risk_actual_per_100000) + " per hundred thousand for their own child" ^0
"" ^0

# ---- what the family got ----

"the answer given" ^0
"  believed : one in two" ^0
"  actual : two in three, " + str(carrier_share_of_unaffected_children_per_myriad) + " per ten thousand" ^0
"  is the textbook wrong : no; it is right over all the children" ^0
"  is this child a fresh draw from all four outcomes : no; one" ^0
"    outcome is already ruled out" ^0
"" ^0

# ---- null control ----

# The same question answered by counting only among the unaffected children
# instead of among all of them.
5000 => nc_carrier_chance_counted_over_all_children_per_myriad
6666 => nc_carrier_chance_counted_over_the_unaffected_per_myriad
1666 => nc_per_myriad_the_condition_adds

"null control - count among the children like this one" ^0
"  carrier chance, over all children : " + str(nc_carrier_chance_counted_over_all_children_per_myriad) + " per ten thousand" ^0
"  carrier chance, over the unaffected : " + str(nc_carrier_chance_counted_over_the_unaffected_per_myriad) + " per ten thousand" ^0
"  per ten thousand the condition adds : " + str(nc_per_myriad_the_condition_adds) ^0
"  no parent and no ratio changed; the count was taken over the" ^0
"  children who match what is known" ^0
"" ^0

# ---- the rule ----

"what the textbook ratio for two carriers guarantees" ^0
"  half of all their children are carriers : exactly" ^0
"  an unaffected child is a carrier one time in two : not addressed;" ^0
"    being unaffected removes the quarter with two copies, and" ^0
"    carriers are " + str(children_with_one_copy) + " of the " + str(unaffected_children) + " who remain, " + str(carrier_share_of_unaffected_children_per_myriad) + " per ten thousand" ^0
"" ^0

"a ratio is a statement about everyone it was counted over; the moment one" ^0
"person is known to be unlike some of them, the count has to be taken again" ^0
"over the ones they are like" ^0
"" ^0

"The textbook is right: " + str(carrier_share_of_all_children_per_myriad) + " per ten thousand of all children of two carriers" ^0
"carry one copy. But this child is known to be unaffected, which removes the" ^0
"" + str(children_with_two_copies) + " in " + str(children_of_two_carrier_parents) + " with two copies, and " + str(children_with_one_copy) + " of the " + str(unaffected_children) + " left are carriers - " + str(carrier_share_of_unaffected_children_per_myriad) ^0
"per ten thousand - until the chance is counted among the children like this one." ^0

Python (deterministic transpilation)

python
children_of_two_carrier_parents = 400
people_per_carrier_in_the_population = 25
children_with_no_copy = int(children_of_two_carrier_parents / 4)
children_with_one_copy = int(children_of_two_carrier_parents / 2)
children_with_two_copies = int(children_of_two_carrier_parents / 4)
unaffected_children = children_with_no_copy + children_with_one_copy
carrier_share_of_all_children_per_myriad = int(children_with_one_copy * 10000 / children_of_two_carrier_parents)
carrier_share_of_unaffected_children_per_myriad = int(children_with_one_copy * 10000 / unaffected_children)
per_myriad_being_unaffected_adds = carrier_share_of_unaffected_children_per_myriad - carrier_share_of_all_children_per_myriad
own_child_risk_believed_per_100000 = int(carrier_share_of_all_children_per_myriad * 100000 / (10000 * people_per_carrier_in_the_population * 4))
own_child_risk_actual_per_100000 = int(carrier_share_of_unaffected_children_per_myriad * 100000 / (10000 * people_per_carrier_in_the_population * 4))
print("children of two carriers        : " + str(children_of_two_carrier_parents))
print("  no copy                       : " + str(children_with_no_copy))
print("  one copy, carriers            : " + str(children_with_one_copy))
print("  two copies, affected          : " + str(children_with_two_copies))
print("unaffected children             : " + str(unaffected_children))
print("")
print("carriers among all children     : " + str(carrier_share_of_all_children_per_myriad) + " per ten thousand")
print("carriers among the unaffected   : " + str(carrier_share_of_unaffected_children_per_myriad) + " per ten thousand")
print("being unaffected adds           : " + str(per_myriad_being_unaffected_adds) + " per ten thousand")
print("")
print("own child's risk, partner from a population where 1 in " + str(people_per_carrier_in_the_population) + " carries :")
print("  on the textbook figure        : " + str(own_child_risk_believed_per_100000) + " per hundred thousand")
print("  on the unaffected figure      : " + str(own_child_risk_actual_per_100000) + " per hundred thousand")
print("")
print("the one-in-two reasoning")
print("  parents : both carriers, confirmed")
print("  ratio : one in four, two in four, one in four, the textbook's")
print("  draws : every child a fresh one")
print("  intent : what is my chance of being a carrier")
print("  facts wrong : 0")
print("  verdict : A CHILD OF TWO CARRIERS IS A CARRIER ONE TIME IN TWO")
print("")
print("  taking the textbook ratio for two carriers is the part done")
print("  right here, and it is why " + str(carrier_share_of_all_children_per_myriad) + " per ten thousand is exactly the")
print("  carrier share among all their children")
print("")
print("a condition on the draw")
print("  the textbook's one in two : counted over all " + str(children_of_two_carrier_parents) + " children")
print("  what is known about this child : unaffected, so not one of the")
print("    " + str(children_with_two_copies) + " with two copies")
print("  who is left : " + str(unaffected_children) + " children, " + str(children_with_one_copy) + " of them carriers")
print("  the chance for this child : " + str(carrier_share_of_unaffected_children_per_myriad) + " per ten thousand, two in three")
print("  what follows : every risk built on it rises by the same third,")
print("    " + str(own_child_risk_believed_per_100000) + " to " + str(own_child_risk_actual_per_100000) + " per hundred thousand for their own child")
print("")
print("the answer given")
print("  believed : one in two")
print("  actual : two in three, " + str(carrier_share_of_unaffected_children_per_myriad) + " per ten thousand")
print("  is the textbook wrong : no; it is right over all the children")
print("  is this child a fresh draw from all four outcomes : no; one")
print("    outcome is already ruled out")
print("")
nc_carrier_chance_counted_over_all_children_per_myriad = 5000
nc_carrier_chance_counted_over_the_unaffected_per_myriad = 6666
nc_per_myriad_the_condition_adds = 1666
print("null control - count among the children like this one")
print("  carrier chance, over all children : " + str(nc_carrier_chance_counted_over_all_children_per_myriad) + " per ten thousand")
print("  carrier chance, over the unaffected : " + str(nc_carrier_chance_counted_over_the_unaffected_per_myriad) + " per ten thousand")
print("  per ten thousand the condition adds : " + str(nc_per_myriad_the_condition_adds))
print("  no parent and no ratio changed; the count was taken over the")
print("  children who match what is known")
print("")
print("what the textbook ratio for two carriers guarantees")
print("  half of all their children are carriers : exactly")
print("  an unaffected child is a carrier one time in two : not addressed;")
print("    being unaffected removes the quarter with two copies, and")
print("    carriers are " + str(children_with_one_copy) + " of the " + str(unaffected_children) + " who remain, " + str(carrier_share_of_unaffected_children_per_myriad) + " per ten thousand")
print("")
print("a ratio is a statement about everyone it was counted over; the moment one")
print("person is known to be unlike some of them, the count has to be taken again")
print("over the ones they are like")
print("")
print("The textbook is right: " + str(carrier_share_of_all_children_per_myriad) + " per ten thousand of all children of two carriers")
print("carry one copy. But this child is known to be unaffected, which removes the")
print("" + str(children_with_two_copies) + " in " + str(children_of_two_carrier_parents) + " with two copies, and " + str(children_with_one_copy) + " of the " + str(unaffected_children) + " left are carriers - " + str(carrier_share_of_unaffected_children_per_myriad))
print("per ten thousand - until the chance is counted among the children like this one.")

stdout (executed)

text
children of two carriers        : 400
  no copy                       : 100
  one copy, carriers            : 200
  two copies, affected          : 100
unaffected children             : 300

carriers among all children     : 5000 per ten thousand
carriers among the unaffected   : 6666 per ten thousand
being unaffected adds           : 1666 per ten thousand

own child's risk, partner from a population where 1 in 25 carries :
  on the textbook figure        : 500 per hundred thousand
  on the unaffected figure      : 666 per hundred thousand

the one-in-two reasoning
  parents : both carriers, confirmed
  ratio : one in four, two in four, one in four, the textbook's
  draws : every child a fresh one
  intent : what is my chance of being a carrier
  facts wrong : 0
  verdict : A CHILD OF TWO CARRIERS IS A CARRIER ONE TIME IN TWO

  taking the textbook ratio for two carriers is the part done
  right here, and it is why 5000 per ten thousand is exactly the
  carrier share among all their children

a condition on the draw
  the textbook's one in two : counted over all 400 children
  what is known about this child : unaffected, so not one of the
    100 with two copies
  who is left : 300 children, 200 of them carriers
  the chance for this child : 6666 per ten thousand, two in three
  what follows : every risk built on it rises by the same third,
    500 to 666 per hundred thousand for their own child

the answer given
  believed : one in two
  actual : two in three, 6666 per ten thousand
  is the textbook wrong : no; it is right over all the children
  is this child a fresh draw from all four outcomes : no; one
    outcome is already ruled out

null control - count among the children like this one
  carrier chance, over all children : 5000 per ten thousand
  carrier chance, over the unaffected : 6666 per ten thousand
  per ten thousand the condition adds : 1666
  no parent and no ratio changed; the count was taken over the
  children who match what is known

what the textbook ratio for two carriers guarantees
  half of all their children are carriers : exactly
  an unaffected child is a carrier one time in two : not addressed;
    being unaffected removes the quarter with two copies, and
    carriers are 200 of the 300 who remain, 6666 per ten thousand

a ratio is a statement about everyone it was counted over; the moment one
person is known to be unlike some of them, the count has to be taken again
over the ones they are like

The textbook is right: 5000 per ten thousand of all children of two carriers
carry one copy. But this child is known to be unaffected, which removes the
100 in 400 with two copies, and 200 of the 300 left are carriers - 6666
per ten thousand - until the chance is counted among the children like this one.

Trace event types

eml:run:starteml:assigneml:outputeml:run:done