У меня есть определение равенства:Использование Определение Coq Равенства
Definition reglang_eq :=
forall (A : Set)
(r1 r2 : RegularLanguage A),
(forall xs : List A,
EvalInRegLang A r1 xs <-> EvalInRegLang A r2 xs)
-> r1 = r2
.
и подцель:
Concat A (EmptyStr A) r = Concat A r (EmptyStr A)
(* note: Concat is a RegularLanguage constructor *)
и когда я пытаюсь применить или переписать reglang_eq
, я получаю сообщение об ошибке. Если я правильно понимаю, это должно быть просто потому, что я не знаю правильного синтаксиса, но я все больше расстраиваюсь, потому что не смог найти документацию, которую я могу понять. (Несмотря на то, сколько месяцев я спотыкался, проверяя материал о RegularLanguages.)
Любая помощь приветствуется, спасибо.
Спасибо, и сожалею о позднем ответе. Поэтому, если я правильно понимаю это, я не могу сказать, что 'EvalInRegLang A r1 xs <-> EvalInRegLang A r2 xs' подразумевает' r1 = r2', потому что Coq его не принимает. '=' может использоваться только для конструктивного равенства. В этом случае, я думаю, мой вопрос в том, есть ли способ показать равенство Set? Поскольку наборы не нужно строить одинаково, чтобы они были одинаковыми. (Я предполагаю?) Должен ли это быть новым вопросом? – user2063685
@ user2063685 Это зависит от того, что вы подразумеваете под «Set». Я думаю, что это достаточно интересно, чтобы заслужить свой собственный вопрос, на который я с удовольствием отвечу :) –