TGViewer
Too Long, Did Read Too Long, Did Read @linksfromme · 1.11K subscribers
Post #814 1.67K
Игра в английскую бюрократию

https://jameshaydon.github.io/passport/

Прочитал уморительную статью про попытку логически решить задачу подачи на британский паспорт.
Суть в двух словах: автор подавал свою дочку, рожденную не в ЮК, на паспорт, у него изначально запросили сколько-то документов.
Он их нашел, перевел, предоставил… спустя неделю запросили еще документов.

Дело в том, что англичане для принятия всех решений решения - британец ты или нет, - должны увидеть один из двух (это без корнеркейсов) пруфов твоей британскости: либо ты родился в британии, либо на момент твоего рождения кто-то из твоих родителей был британцем.
А как понять, был ли кто-то из твоих родителей британцем? Либо они родились в британии, либо… :)

Это рекурсивное дерево продолжается до тех пор, пока не достигнут “base case” - предок, имевший гражданство до 1983 года,
тк для него и для его предка уже не обязательно доказывать легитимность этого гражданства.
Для всех, родившихся после, доказывать “британскость” надо.

И главный прикол подачи на паспорт (на практике - на любые документы) в ЮК - ты не можешь изначально узнать весь набор документов, которые тебе потребуются. Отправь емейл - и через 5-7 business days ты узнаешь, какой документ от тебя ждут для прохождения на следующий этап.

Поигравшись месяц в эту игру и после того, как для паспорта его дочери запросили applicant's father's father's father's birth certificate, автор не выдержал и написал скрипт на Haskell, который задает тебе вопросы, и исходя из ответов показывает доступные варианты пруфов и наборы документов.

Не буду подробно пересказывать, что там написал автор - в целом, аккуратно расписал все правила и конфликты в виде логических функций. Приведу пару примеров того, как это выглядит:


-- | British citizenship for those born abroad
britBornAbroad :: Person -> M Proof
britBornAbroad p =
viaParent p $ \parent ->
britOtbd parent `orElse` (brit parent `and` evidence (Years3LivingInUK parent))

-- | British otherwise than by descent (BOTD)
britOtbd :: Person -> M Proof
britOtbd p = do
check (IsBritOtbd p)
evidence (Naturalised p) `orElse` britOtbdUkBorn `orElse` bornCrownService p
where
britOtbdUkBorn = evidence (BornInUK p) `and` britBornInUk p

bornCrownService :: Person -> M Proof
bornCrownService p = viaParent p $ \parent -> do
check (CrownService parent)
brit parent `and` evidence (CrownService parent)


Итоговая программа задает тебе вопросы, пока не придет к однозначному base case и соответствующему набору документов, например:
Proof 1:

• Applicant was born after 2006
• Via Applicant's Father's britishness:
• Applicant's Father was born in UK
• Via Applicant's Father's Mother's britishness:
Applicant's Father's Mother was settled at time of birth

Possible doc sets:
• - Birth certificate for Applicant,
- Birth certificate for Applicant's Father,
- Settled status document for Applicant's Father's Mother


Всего за 37 вопросов скрипт собрал аж 3 возможных пруфа с наборами документов - естественно, applicant's father's father's father's birth certificate требуется только в самом длинном и неоптимальном пруфе)

В общем, смешно и познавательно!
Всем, кто когда-либо подавался на английские визы / подтверждал дипломы и т п - очень советую почитать, прям одинаковые паттерны:)
Хорошо, что я уже со своей англией успокоился.
  • 👍 15
  • 🔥 7
  • 🥴 4
  • 🐳 1
More from @linksfromme
  1. Sep 5, 2026Как правильно нанимать хакеров на работу Запись выступления | статья Прикольная история с…
  2. Aug 23, 2026Как на пол(й)имаркете все выигрывают Наверное, большинство из вас слышали что-нибудь про п…
  3. Jun 20, 2026Что у меня нового Обещал, что напишу - и вот, пишу! Во-первых, каминг аут: уже почти год н…
  4. Jun 17, 2026Хотите дрейнер в топе выдачи поиска? timsh.org/drainer-at-the-top-of-duckduckgo Месяца два…
  5. Mar 10, 2026Про крипто-AML и отмывание денег, ч2 Какие-то безумные выдались полтора месяца… но вот сел…
  6. Jan 20, 2026Про крипто-AML и отмывание денег, ч1 Несколько историй-мыслей про текущее состояние дел на…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →