Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Ltac destruct_mint_ H :=
match type of H with
(MInt_ _ ?z ?t) =>
lazymatch goal with
|- ?GOAL =>
refine (match H in (MInt_ _ z0 t0) return (z = z0 -> t = t0 -> GOAL) with
| mint_nil _ =>
fun Heq_z Heq_tt_ =>
ltac:(destruct_mint_common Heq_tt_ Heq_z H)
| mint_cons _ te rest l r t H =>
fun Heq_z Heq_tt_ =>
ltac:(destruct_mint_common Heq_tt_ Heq_z H)
| mint_cons_l _ te rest l r z t Hz H =>
fun Heq_z Heq_tt_ =>
ltac:(destruct_mint_common Heq_tt_ Heq_z H)
| mint_cons_r _ te te' rest l r z t Hz Hcomm H =>
fun Heq_z Heq_tt_ =>
ltac:(destruct_mint_common Heq_tt_ Heq_z H)
end (eq_refl z) (eq_refl t))
end
end.
Наебавшись с inversion в механизированным доказательстве, закрыл я очи.
Inductive MInt_ : Traces -> @TraceEnsemble TE :=
| mint_nil :
MInt_ ([], None, []) []
| mint_cons : forall te rest l r t,
MInt_ (l, clean rest, r) t ->
MInt_ (l, Some (te :: rest), r) (te :: t)
| mint_cons_l : forall te rest l r zipper t,
zipper >z (l, clean rest, r) ->
MInt_ zipper t ->
MInt_ (l, Some (te :: rest), r) (te :: t)
| mint_cons_r : forall te te' rest l r zipper t,
zipper <z (l, clean rest, r)->
comm_rel te te' ->
MInt_ zipper (te' :: t) ->
MInt_ (l, Some (te :: rest), r) (te :: te' :: t).
(Multi Interleaving). Тип данных, генерирующий все некоммутирующие исполнения системы. Вроде даже работает, но пиздец некрасиво, конечно.
Надо чтобы CPS!
Вспомнил анекдот про программиста. Приехал программист с женой на вокзал. Жена:
–— Посторожи сумки, а я схожу за билетами. Запомни: у нас четыре сумки.
Только она отошла, слышит крик мужа:
—– Кто украл сумку?
Жена:
–— Что ты кричишь, у нас же всё на месте.
Он:
—– Ну вот сама посчитай: ноль, один, два, три.
(Multi Interleaving). Тип данных, генерирующий все некоммутирующие исполнения системы. Вроде даже работает, но пиздец некрасиво, конечно.
Надо чтобы CPS!
Хотя можно задать array of char с любым диапазоном индексов:
https://ideone.com/rn1Rzy
–— Посторожи сумки, а я схожу за билетами. Запомни: у нас четыре сумки.
Только она отошла, слышит крик мужа:
—– Кто украл сумку?
Жена:
–— Что ты кричишь, у нас же всё на месте.
Он:
—– Ну вот сама посчитай: ноль, один, два, три.
https://www.php.net/manual/en/function.extract.php