vak: (Житель планеты Узм)
[personal profile] vak
Планета Шелезяка. Воды нет. Воздуха нет. Полезных ископаемых нет. Населена четырьмя роботами. Двое из них на фотке. Кликайте чтобы увеличить.

vak: (Путиномедвед)
[personal profile] vak
На одного заядлого рашитстского Z-писателя наехала цензура. Он теперь жалуется на жизнь (Otvet_Po_Zvezdam.pdf).

Перепощу здесь ценный исторический материал.

Disputed Text/Image Justification Comment
— А что ты мне говорила, когда я писал, что Путина нужно сместить и судить за нарушение Хасавюртовских соглашений? Призыв к смене власти в России. Исключить
— Потрясающе. То есть ты хочешь сказать, я же и виновата в том, что у тебя нет прежних возможностей плеваться желчью?
— Не ты одна. Народ опять взалкал величия и вечных ценностей. Как я еще в девяносто седьмом писал, сравнивая нацистскую Германию и современную Россию, «расцвет национальной культуры даром не проходит».
Приравнивание СССР к гитлеровской Германии. Убрать или переформулировать
Любить эту страну может только тот, кто любит, когда его, извините, дерут в зад. Коллективно. Повзводно. Имеются признаки пропаганды нетрадиционных сексуальных отношений Убрать или переформулировать
Просвещали их двое: некий сильно пожилой представитель «Полудня», неприятный франтоватый энтузиаст, и вторым голосом — местный офицерик, будто соскочивший с плаката типа «Дошли до Берлина»: лицо безмозгло восторженное, розовые крепкие щеки, пшеничный чуб лихо выбивается из-под фуражки... в больших городах таких лиц уже не встретишь. Презрительное отношение к Победе в Великой отечественной войне и советским солдатам Исключить или переформулировать
Лишь через много лет он убедился, что это единственно верная и единственно достойная позиция, что в большом мире лишь она и пользуется уважением. Поэтому так легко он становился своим для совсем, вроде бы, чужих — от прибалтийских якобы ветеранов СС до чеченских так называемых боевиков... Оправдание чеченских боевиков и прибалтийских неонацистов Исключить
Возлюбил, сказал Славомир, исламских прихвостней жидовни и сидит в одних президиумах то с мусликами, то с какой-нибудь валютной Хакамадой... Упоминаются реальные люди. В частности Хакамада, которую автор обвиняет в проституции Удалить
Еврей, вечно невинная овечка, как всегда, со скрипочкой, на худой конец — у синхрофазотрона, таджик, ясен перец, то с лопатой, то с мастерком, армянин, натурально, с книжкой (чаще, правда, с чековой — но ведь все равно с книжкой!); а русский, подлюка, снова, из года в год, из века в век, беспробудно — с окровавленным топором и с пеной на губах. Оскорбление евреев и русских по национальному признаку Удалить
Все диктатуры именно этим и берут — обещают личную безопасность. А потом ежедневно творят такое, что никакая мафия за сто лет не сумеет...
— Ну, адаптированная к свободам двадцать первого века шарашка, — сказал Бабцев, примирительно улыбнувшись. — Все-таки времена не те, пришлось им сделать косметические поправки. Но в целом... А как ты думаешь — Путин про вашу контору в курсе?
— Ну, знаешь... Он мне как-то не отчитывался. Думаю, вряд ли такое дело могло быть организовано без поддержки с самого верха.
Обвинения президента Путина в использовании рабского труда ученых Удалить или переформулировать
Всякий хоть немного интеллигентный россиянин впитывает с молоком матери — одна-единственная спецслужба в мире представляет для него опасность, одна-единственная: своя, российская. Наглая, подлая, открыто презирающая и в то же время беззастенчиво использующая все лучшие свойства души человеческой: доброту, верность, порядочность, чувство долга... Люди для нее — мусор. Лагерная пыль. Всегда. При царях, при генсеках, при президентах всенародно избранных... Всегда. Обвинение спецслужб России в насилии над народом Удалить или переформулировать
А позволь, Микитка, я положу на тебя свою ножку, — пробормотала она. — А он и рад тому: не то что ножку, говорит, но и сама садись на меня. И как увидел он ее белую полную ножку...
— Ты эти секс-прихваты брось, — с негодованием прервал он. — Подрасти сперва!
— Это же «Вий»!..
Сексуальные темы, подросток и ребенок, не достигший возраста согласия Удалить или переформулировать
Недавно в новостях прошло: где-то в Европах боевая организация лесбиянок обнаружилась. Караулили на улицах беременных и били, стараясь вызвать выкидыш. Идеологию придумали: беременность, являющаяся результатом гетеросексуальных контактов, есть вопиющее проявление гомофобии и шовинистической дискриминации сексуальных меньшинств. И суд их чуть не оправдал, что ли; во всяком случае, адвокаты закрутили уж так убедительно, что дальше некуда: беременным, дескать, не следовало выставлять напоказ свое состояние, это было провоцирующее поведение, сами виноваты... Пропаганда ЛГБТ Удалить
Нет, неужто НАСТОЛЬКО взаправду русскому серьезности и ума может вогнать только казарма? Неужели Вовка там кого-то по-настоящему убил — о, конечно, отцы-командиры ему объяснили, что это враг! — и теперь из-за этого почувствовал себя таким полноценным? Чудовищный народ... Презрительное отношение к армии и солдатам Удалить
Безответственное манипулирование такими аляповатыми абстракциями, как «Родина-мать», в наше время как раз и воспринимается отрыжкой сталинских времен. Оскорбительное отношение к символам Победы Удалить
Я, конечно, не утверждаю, что приказ убить известного оппозиционного журналиста Бабцева отдали лично господин Медведев или господин Путин, но весь уклад нынешней жизни в России, вся деятельность преступной власти дает негласный, но явный и однозначный сигнал любому негодяю, у которого чешутся кулаки: убивать честных людей можно... Обвинения Путина и Медведева в убийствах журналиста Бабцева, прототипом которому послужил некий Бабченко, бежавший на Украину. Удалить
utochka: ШЁЛКОВАЯ УМНИЦА (Default)
[personal profile] utochka
Российских проституток начали массово замещать мигранты-трансвеститы из средней азии
vak: (Житель планеты Узм)
[personal profile] vak
В Тихом океане полыхает брошенный корабль, вёзший 3000 автомобилей из Китая в Мексику. Команда пыталась тушить пожар имеющимися средствами, но не осилила. Четверть перевозимых автомобилей электрические, а полыхающие литиевые батареи не так просто потушить. Подали сигнал бедствия и их спас проходящий мимо корабль.



День рождения

Jun. 8th, 2025 06:15 am
silent_gluk: (pic#4742424)
[personal profile] silent_gluk
Сегодня день рождения ЖЖ-сообщества fantazymusic ( https://fantazymusic.livejournal.com/ ). Одного из усыновленных мною (правда, настоящий владелец там тоже есть... или был? Журнал обновлялся в 2015 году; жаль, что в ЖЖ нельзя узнать, когда юзер заходил на сайт).

Ему уже 21 год! И оно даже существует без моей помощи. Вот недавно там был пост, причем не мой. А мои записи появляются там регулярно.

Сообщество посвящено концертам "околофэнтезийной" (менестрели) музыки, интересуется оно также фолк-направлением музыки же.

Отметка на косяке:
3,216 записей (было меньше)
791 комментарий получен (было меньше; даже не все из них от Фрэнка, а оставшиеся - даже не все лайки; замечательный результат!).
303 участника (было больше; нас покинул путем удаления журнала и аккаунта fablov - а ведь когда-то он писал в сообщество!)

Что ж, пожелаем сообществу разнообразных и обсуждаемых постов!

НОВОСТИ ПУДЕЛЯЖА

Jun. 7th, 2025 08:48 am
utochka: ШЁЛКОВАЯ УМНИЦА (Default)
[personal profile] utochka
Администрация президента США Дональда Трампа пытается заставить сенатора-республиканца Линдси Грэма существенно смягчить законопроект о санкциях против России, пишет The Wall Street Journal. По данным издания, Трамп опасается, что санкции могут нанести ущерб его планам

Годовщина смерти

Jun. 7th, 2025 05:19 am
silent_gluk: (pic#4742423)
[personal profile] silent_gluk
Восемь лет, как с нами нет Павла Полякова, ЖЖ-юзера polakow ( https://polakow.livejournal.com/ ). 02.08.1964-07.06.2017.

Фэн, библиограф, переводчик, член группы "Людены", участник подготовки ПСС Стругацких. "А теперь привыкать надо к слову: "Он был"." Да, был. Не знаю, как насчет КЛФ (меня там нет), но библиография фантастики и группа "Людены" с его уходом точно очень многое потеряли. И - для меня - Интерпресскон.


"Свет погасшей звезды еще тысячу лет
К нам доходит. А что ей, звезде, до людей?
Ты добрей был ее, и теплей, и светлей,
Да и срок невелик - тыщу лет мне не жить,
На мой век тебя хватит - мне по дружбе светить."
К.Симонов.



Не уверена, что за эти годы был хотя бы день, когда я его не вспоминала...
vak: (Кризис так себе)
[personal profile] vak
Есть такое недавнее постановление Нью Йоркского суда:

NYT-v-OpenAI-Preservation-Order-5-13-25.pdf

This document is a court order from the United States District Court for the Southern District of New York, issued on May 13, 2025, by Magistrate Judge Ona T. Wang. It pertains to a copyright infringement litigation involving OpenAI, Inc., specifically addressing the preservation of "output log data" (i.e., records of user interactions with OpenAI’s ChatGPT, such as conversation logs). The case is part of a multi-district litigation (MDL) under case number 25-md-3143, with a related case number 23-cv-11195.

Explanation of the Document

The order focuses on a dispute between the "News Plaintiffs" (likely media organizations alleging copyright infringement by OpenAI) and OpenAI regarding the preservation of output log data. Here’s a breakdown of the key points:

1. Background of the Issue:
  • The News Plaintiffs requested that OpenAI preserve all output log data, which includes user conversations with ChatGPT, as potential evidence in the litigation.
  • OpenAI has been deleting some of this data, either at users’ requests or to comply with privacy laws and regulations globally.
  • The issue was first raised in January 2025, discussed during a conference on January 22, 2025. At that time, the court denied the plaintiffs’ request for "wholesale preservation" of all output log data but asked OpenAI to explore ways to segregate or anonymize data to balance user privacy concerns with the need for evidence preservation.
2. OpenAI’s Position:
  • OpenAI resisted preserving all output log data, citing:
  • User preferences (e.g., users explicitly requesting deletion of their chat logs).
  • Compliance with privacy laws and regulations worldwide that mandate data deletion under certain conditions.
  • The sheer volume of data (described as "many, many billions of conversations").
  • OpenAI noted that a "fraction" of conversations from ChatGPT Free, Pro, and Plus users have not been retained due to their default retention policies, though they didn’t clarify what "fraction" means.
3. Plaintiffs’ Argument:
  • The News Plaintiffs renewed their request for OpenAI to preserve all output log data moving forward, arguing that the volume of deleted conversations is significant and relevant to the litigation.
  • They likely believe this data could demonstrate how OpenAI’s models use or reproduce copyrighted material.
4. Court’s Ruling:
  • The court now orders OpenAI to preserve and segregate all output log data that would otherwise be deleted, whether due to user requests or privacy laws, until further notice.
  • This means OpenAI must retain this data separately (not destroy it) to ensure it’s available for the litigation, even if it would normally be deleted under their policies or legal obligations.
  • The order is forward-looking, applying to data that would be deleted after May 13, 2025.
5. Additional Notes:
  • The court references a January 22, 2025, conference transcript for further context, available in related case dockets.
  • There’s a correction about the judge presiding over the January 22 conference (it was Judge Wang, not Judge Stein, as incorrectly noted in some docket entries).

Relation to Privacy of Your Data

This court order directly relates to the privacy of your data if you are a user of OpenAI’s ChatGPT or similar services. Here’s how:

1. Preservation of Your Conversations:
  • If you’ve interacted with ChatGPT, your conversation logs (output log data) may be retained by OpenAI, even if you requested deletion or if OpenAI would normally delete them to comply with privacy laws (e.g., GDPR in Europe, CCPA in California, or other regulations).
  • The court’s order overrides user deletion requests and OpenAI’s standard data retention policies for the duration of the litigation, meaning your data might be kept longer than you expect.
2. Privacy Concerns:
  • During the January 22, 2025, conference, the court asked OpenAI about anonymizing or segregating data to address privacy concerns. However, the order doesn’t specify whether OpenAI must anonymize the preserved data, so it’s unclear if your personally identifiable information (if any) in the logs will be protected.
  • OpenAI argued that preserving all data could conflict with global privacy laws, which often require companies to honor user deletion requests or delete data after a certain period. This litigation may force OpenAI to retain data in ways that could raise privacy compliance issues.
3. Scope of Data:
  • The order applies to all output log data, including conversations from ChatGPT Free, Pro, and Plus users. If you use any of these services, your interactions are potentially affected.
  • The data preserved may include sensitive or personal information you’ve shared with ChatGPT, depending on the nature of your conversations.
4. Implications for You:
  • If you’re concerned about privacy, this order means your chat logs might be stored and potentially reviewed as part of the litigation, even if you opted for deletion.
  • There’s no indication in the document that this data will be publicly disclosed, but it could be accessed by parties involved in the lawsuit (e.g., plaintiffs, OpenAI, or the court) under controlled conditions (e.g., protective orders).
  • The order is temporary (“until further order of the Court”), so it’s unclear how long OpenAI will need to retain this data.
5. Balancing Act:
  • The court is trying to balance the plaintiffs’ need for evidence in the copyright case with user privacy rights. OpenAI’s reluctance to preserve all data stems from both logistical challenges (billions of conversations) and legal obligations to protect user privacy.
  • However, the court’s decision to prioritize evidence preservation over deletion requests may raise concerns for users who expected their data to be deleted promptly.

What You Can Do

  • Review OpenAI’s Privacy Policy: Check OpenAI’s terms of service and privacy policy (available on their website, likely at openai.com) to understand how your data is handled and what deletion options are available.
  • Limit Sensitive Inputs: Be cautious about sharing personal or sensitive information with ChatGPT, as your conversations may be retained longer than expected due to this litigation.
  • Contact OpenAI: If you’ve requested deletion of your data, you could reach out to OpenAI’s support to inquire about the status of your request in light of this court order.
  • Stay Informed: Monitor updates on this case (docket numbers 25-md-3143 or 23-cv-11195) through public court records or news reports, as future rulings may clarify how preserved data is handled or when OpenAI can resume deletions.
vak: (Знайка)
[personal profile] vak
Structure and Interpretation of Quantum Mechanics — a Functional Framework

Типа такого:
infixl 7 *>
infixl 6 <+>,<->

class Vspace v where
(<+>) :: v -> v -> v
(<->) :: v -> v -> v
(*>) :: Scalar -> v -> v

type HV b = b->Scalar
instance Vspace (HV b) where
(f <+> g) a = f a + g a
(f <-> g) a = f a - g a
(c *> f) a = c*(f a)

ПРОСТО НОВОСТИ

Jun. 6th, 2025 08:23 am
utochka: ШЁЛКОВАЯ УМНИЦА (Default)
[personal profile] utochka
Россиянам запретят принимать звонки из-за границы

Становится более понятно почему ранее путен приказал душить сервисы майкрософт и зум. Россиян отсекают от контактов с теми кому удалось прошмыгнуть на запад.

Три типа char в Си

Jun. 5th, 2025 09:48 pm
vak: (Default)
[personal profile] vak
Копаясь в семантике компилятора, чего только не узнаешь. Выясняется, в языке Си не два типа "signed char" и "unsigned char", а три. Тип просто "char" отличается от первых двух, хоть и ведет себя как один из них. Обнаружить этот факт можно, попытавшись повторно определить typedef:
$ cat foo.c
typedef char foo;
typedef signed char foo;

$ cc -c foo.c
typedef-char.c:2:21: error: typedef redefinition with different types ('signed char' vs 'char')
2 | typedef signed char foo;
| ^
typedef-char.c:1:14: note: previous definition is here
1 | typedef char foo;
| ^
1 error generated.
С другими типами такого выпендрёжа нет. Компилируется без ошибок:
$ cat bar.c
typedef int bar;
typedef signed int bar;

$ cc -c bar.c

Отчет

Jun. 6th, 2025 04:46 am
silent_gluk: (pic#4742423)
[personal profile] silent_gluk
Наступила очередная пятница, а значит - с вами снова жаба с отчетом и безмерной благодарностью за помощь и поддержку.

С событиями у нас небогато.

По медицинской части ничего нового, от вируса вроде избавились (пока?), к стоматологу я попыталась записаться, но места были только на следующую неделю, так что я сказала, что подумаю. Вот, до сих пор думаю.

По бытовой части - сходила на вечер, посвященный Чарской (а вот книгу не купила - как-то цены на книги совсем негуманные стали. Цветут/начинают цвести пионы и ирисы, пытаемся успеть (учитывая обещанную дождливую погоду) к ним...

По финансовой части - пенсия пришла, но я пока с ней не разбиралась, так что все по-прежнему: на карте - 16.000, долг - 58.000. Надеюсь, к следующему отчету разберусь.

Еще раз спасибо вам за все! Без вас бы у нас ничего не получилось! (Не получилось и с вами, но тут уж вашей вины точно нет, - зато с вашей поддержкой у нас с Романом "ничего не получилось" гораздо позже).
vak: (Знайка)
[personal profile] vak
Я вижу, машина Тьюринга на OCaml не произвела впечатления. Слишком незнакомый язык. Давайте для сравнения перепишем её на что-нибудь традиционное, скажем C++17.
#include <deque>
#include <iostream>
#include <optional>
#include <string>
#include <tuple>
#include <unordered_map>

// Types for Turing machine
enum class Symbol { One, Blank };
enum class Direction { Left, Right };
using State           = std::string;
using TransitionKey   = std::tuple<State, Symbol>;
using TransitionValue = std::tuple<State, Symbol, Direction>;
using Transitions     = std::unordered_map<TransitionKey, TransitionValue, std::hash<TransitionKey>>;

struct Tape {
    std::deque<Symbol> data;
    size_t head_pos;
};

// Hash function for TransitionKey
namespace std {
template <>
struct hash<TransitionKey> {
    size_t operator()(const TransitionKey &key) const
    {
        auto [state, sym] = key;
        return hash<string>()(state) ^ (hash<size_t>()(static_cast<size_t>(sym)) << 1);
    }
};
} // namespace std

// Convert symbol to string for printing
std::string symbol_to_string(Symbol sym)
{
    return sym == Symbol::One ? "1" : "_";
}

// Print the current tape and head position
void print_tape(const Tape &tape, const State &state)
{
    std::string left_str, right_str;
    size_t i = 0;
    for (const auto &sym : tape.data) {
        if (i < tape.head_pos) {
            left_str += symbol_to_string(sym);
        } else if (i > tape.head_pos) {
            right_str += symbol_to_string(sym);
        }
        ++i;
    }
    std::cout << "[" << left_str << "] " << symbol_to_string(tape.data[tape.head_pos]) << " ("
              << state << ") " << right_str << "\n";
}

// Move the tape head
void move_head(Tape &tape, Direction dir)
{
    if (dir == Direction::Right) {
        if (tape.head_pos + 1 >= tape.data.size()) {
            tape.data.push_back(Symbol::Blank);
        }
        ++tape.head_pos;
    } else { // Left
        if (tape.head_pos == 0) {
            tape.data.push_front(Symbol::Blank);
        } else {
            --tape.head_pos;
        }
    }
}

// Step the Turing machine
std::optional<State> step(Tape &tape, const State &state, const Transitions &transitions)
{
    TransitionKey current = { state, tape.data[tape.head_pos] };
    auto it               = transitions.find(current);
    if (it == transitions.end()) {
        return std::nullopt; // No transition: halt
    }
    const auto &[new_state, new_symbol, dir] = it->second;
    tape.data[tape.head_pos]                 = new_symbol;
    move_head(tape, dir);
    return new_state;
}

// Run the Turing machine
void run_turing_machine(Tape tape, const State &start_state, const Transitions &transitions,
                        const State &accept_state, const State &reject_state)
{
    State current_state = start_state;
    while (true) {
        print_tape(tape, current_state);
        if (current_state == accept_state) {
            std::cout << "Accepted\n";
            break;
        }
        if (current_state == reject_state) {
            std::cout << "Rejected\n";
            break;
        }
        auto next_state = step(tape, current_state, transitions);
        if (!next_state) {
            std::cout << "Halted (no transition)\n";
            break;
        }
        current_state = *next_state;
    }
}

// Turing machine to add two unary numbers
void example_add()
{
    Transitions transitions = {
        // q0: Move right to find blank
        { { "q0", Symbol::One }, { "q0", Symbol::One, Direction::Right } },
        { { "q0", Symbol::Blank }, { "q1", Symbol::One, Direction::Left } },
        // q1: Move left to start
        { { "q1", Symbol::One }, { "q1", Symbol::One, Direction::Left } },
        { { "q1", Symbol::Blank }, { "qaccept", Symbol::Blank, Direction::Right } }
    };
    // Tape represents 2 + 3: 11_111
    Tape tape = {
        { Symbol::One, Symbol::One, Symbol::Blank, Symbol::One, Symbol::One, Symbol::One }, 0
    };
    run_turing_machine(tape, "q0", transitions, "qaccept", "qreject");
}

int main()
{
    example_add();
}
Кода вышло в два раза больше. Стало ли яснее? Запустим для проверки.
$ c++ -std=c++17 turing-add.cpp -o turing-add
$ ./turing-add
[] 1 (q0) 1_111
[1] 1 (q0) _111
[11] _ (q0) 111
[1] 1 (q1) 1111
[] 1 (q1) 11111
[] _ (q1) 111111
[_] 1 (qaccept) 11111
Accepted

НОВОСТИ ПУДЕЛИЗМА

Jun. 5th, 2025 07:57 am
utochka: ШЁЛКОВАЯ УМНИЦА (Default)
[personal profile] utochka
Трамп попросил сенат отложить законопроект о санкциях против России

Любопытно...

Jun. 5th, 2025 04:49 am
silent_gluk: (pic#4742420)
[personal profile] silent_gluk
А вот как бы избавиться от музыки ВКонтакте?..

То есть, как вы знаете, там много музыки. Иногда ее прикрепляют к посту, иногда делают отдельный плейлист... А я эти плейлисты определенной направленности таскаю в ЖЖ-сообщество fantazymysic - ссылкой и текстом, аудио, к сожалению, из ВКонтакте не встраивается, но это другой вопрос.

И вот я неосторожно ткнула в один из плейлистов, и теперь у меня вверху страниц ВКонтакте висит плеер с записями некой группы. То есть если бы он просто себе висел и место занимал - не вопрос, пусть висит, не так уж и мешает. Но он периодически самозапускается и начинает звучать! Во-первых, я вообще не люблю, когда у меня звучит браузер. Для звучания есть отдельные программы (и отдельное время). Во-вторых, поскольку я за компьютером сижу рано утром, оно просто мешает окружающим. В-третьих, там же ЗВУКОВАЯ РЕКЛАМА! В-четвертых, пока найдешь, какая именно ВКонтактовская вкладка звучит, да и остановить плеер удается не сразу...

В общем, вопрос: как сделать так, чтобы этот плеер больше не был? Браузер - старый Chromium. Натравить на него Ублок - не вариант. Во-первых, потому, что я допускаю ситуацию, когда мне действительно захочется послушать какую-то песню ВКонтакте, а во-вторых, потому, что ВКонтакте с оным Ублоком не уживается - и последний пришлось отключить.

Очевидного - крестика в углу -то ли нет, то ли я его в упор не вижу.

С течением времени плеер и сам исчезнет, но надоел-то он мне уже сейчас!
vak: (Украина)
[personal profile] vak
На кадрах зафиксированы удары FPV-дронов СБУ по четырем вражеским аэродромам: «Оленья», «Иваново», «Дягилево» и «Белая», где базировалась стратегическая авиация государства-агрессора, которая регулярно обстреливает мирные украинские города.

Среди пораженных воздушных судов — А-50, Ту-95, Ту-22, Ту-160, а также Ан-12 и Ил-78.

utochka: ШЁЛКОВАЯ УМНИЦА (Default)
[personal profile] utochka


Это конечно пока ещё не ельцинские "два кусочека колбаски", но потенциал безусловно есть.
vak: (Знайка)
[personal profile] vak
В качестве иллюстрации к языку OCaml вот вам реализация машины Тьюринга. В студенчестве я на Рефале такое писал. Жаль не сохранилось.
(* Types for Turing machine *)
type symbol = One | Blank
type direction = Left | Right
type state = string
type transition = (state * symbol) * (state * symbol * direction)
type tape = { left: symbol list; head: symbol; right: symbol list }

(* Convert symbol to string for printing *)
let string_of_symbol = function
| One -> "1"
| Blank -> "_"

(* Print the current tape and head position *)
let print_tape tape state =
let left_str = List.map string_of_symbol tape.left |> String.concat "" in
let right_str = List.map string_of_symbol tape.right |> String.concat "" in
Printf.printf "[%s] %s (%s) %s\n" left_str (string_of_symbol tape.head) state right_str

(* Move the tape head *)
let move_head tape dir =
match dir with
| Right ->
let new_right, new_head = match tape.right with
| [] -> ([], Blank)
| h :: t -> (t, h)
in
{ left = tape.head :: tape.left; head = new_head; right = new_right }
| Left ->
let new_left, new_head = match tape.left with
| [] -> ([], Blank)
| h :: t -> (t, h)
in
{ left = new_left; head = new_head; right = tape.head :: tape.right }

(* Step the Turing machine *)
let step tape state transitions =
let current = (state, tape.head) in
match List.assoc_opt current transitions with
| None -> None (* No transition: halt *)
| Some (new_state, new_symbol, dir) ->
let new_tape = { tape with head = new_symbol } in
let moved_tape = move_head new_tape dir in
Some (moved_tape, new_state)

(* Run the Turing machine *)
let run_turing_machine tape start_state transitions accept_state reject_state =
let rec run tape state =
print_tape tape state;
if state = accept_state then Printf.printf "Accepted\n"
else if state = reject_state then Printf.printf "Rejected\n"
else match step tape state transitions with
| None -> Printf.printf "Halted (no transition)\n"
| Some (new_tape, new_state) -> run new_tape new_state
in
run tape start_state

(* Turing machine to add two unary numbers *)
let example_add () =
let transitions = [
(* q0: Move right to find blank *)
(("q0", One), ("q0", One, Right));
(("q0", Blank), ("q1", One, Left));
(* q1: Move left to start *)
(("q1", One), ("q1", One, Left));
(("q1", Blank), ("qaccept", Blank, Right));
] in
(* Tape represents 2 + 3: 11_111 *)
let tape = { left = []; head = One; right = [One; Blank; One; One; One] } in
run_turing_machine tape "q0" transitions "qaccept" "qreject"

(* Run the example *)
let () = example_add ()
Вышеприведённая программа на машине Тьюринга складывает два числа 2+3, записанные как последовательность единиц: 11 111. В результате получается 5, то есть 11111. Запускаем:
$ ocaml turing_add.ml 
[] 1 (q0) 1_111
[1] 1 (q0) _111
[11] _ (q0) 111
[1] 1 (q1) 1111
[] 1 (q1) 11111
[] _ (q1) 111111
[_] 1 (qaccept) 11111
Accepted

Среда

Jun. 4th, 2025 05:09 am
silent_gluk: (pic#4742421)
[personal profile] silent_gluk
Вот снова среда, и с нами очередная старая фотография, 2012 года. Загадочная - подозреваю, что за то и снято. Вот что это такое?.. То, которое не сухой лист?..