Для тех, кто хочет использовать омегу в качестве быстрых решений, вот один из способов, чтобы получить мяч в форму, в которой он может быть применен :
inversion H. inversion H1. rewrite negb_true_iff in H3. apply beq_nat_false in H3. omega.
для почему омега работает после того, как мы делаем это и не тогда, когда цель была в первоначальном состоянии, здесь большой ответ на Github пользователя jaewooklee93:
«Вам не нужно подумайте о плюсе или компромиссе e, потому что омега может решить эти легкие проблемы. Ваши цели почти тривиальны, но причина, по которой омега не позволяет очистить цели, - это только то, что минус между nat не совпадает с тем, который мы уже знаем; 2-5 = 0, так как в nat нет понятия отрицательного. Поэтому, если вы не указали тот факт, что st X больше нуля, omega не может очистить цель для вас. Но у вас уже есть это условие в H1. Поэтому единственное, что вам нужно сделать, это упростить H1 и применить леммы к H1, чтобы сделать его st X <> 0. Тогда omega может нормально работать ».
Вы работаете с целыми числами? В nat это просто неверно что (X - 1) + 1 = X. – Atsby
Да, я думаю, я могу видеть, как в Coq-super-strict-land (X - 1) + 1! = X. Трудно переключиться с мышления программирования где такой же тест на равенство будет работать. – Adam
Если бы у меня была 'H: m = st X + st Y/\ beval st (BNot (BEq (AId X) (ANum 0))) = true' в контексте? – Adam