Как выбрать произвольный, но фиксированный элемент из набора в Isabelle? Выбранный элемент будет использоваться в качестве случайного элемента из набора для дальнейшей обработки, но ни один другой элемент не должен использоваться дальше.isabelle - Выберите произвольный, но фиксированный элемент
Моя первая попытка была:
theory Scratch
imports Main Orderings
begin
value "(let el ∈ {3::int, 4, 5} in el)"
end
Но дает синтаксическую ошибку.
Моя вторая попытка была:
theory Scratch
imports Main Orderings
begin
value "(let el = (SOME x . x ∈ {{3::int, 4},
{5::int, 6} ,
{7::int, 8}})
in el)"
end
давая тип int set
и не ожидаемый тип int
.
Редактировать 1
Новый пример:
theory Scratch
imports Main Orderings
begin
fun add :: "int set ⇒ int" where
"add st = (let el = (SOME x . x ∈ st) in el + (10::int))"
value "add {3::int, 4, 5, 6}"
end
Результат кода:
"(SOME u. 3 = u ∨ 4 = u ∨ 5 = u ∨ 6 = u) + 10"
:: "int"
вместо того, чтобы целое значение. Как написать add
, чтобы результаты были либо 13, 14, 15, либо 16? Точное значение не имеет значения, оно должно быть различным при каждом выполнении функции.
Для примера скажем, что выбранный элемент будет передан функции, удваивающей значение. Мне нужно знать значение, которое было выбрано. В C++ я создам список набора, выберите случайный индекс и верну его значение в этом индексе. – Johan
Но зачем? Что вы на самом деле хотите доказать? –
Я хочу описать сеть потока данных и доказать, удовлетворяет ли сеть некоторым свойствам, и другое свойство также будет действительным.Выбор элемента связан, когда я хочу видеть, как поток данных проходит через сеть. – Johan