Given have "⟦i ∈ {0..m-1}; j ∈ {0..m-1}; (f i) mod m = (f j) mod m⟧ ⟹ i = j"
, how can I show
"∀i ∈ {0..m-1}. ∀j ∈ {0..m-1}. (f i) mod m = (f j) mod m ⟶ i = j"
?
By using the introduction rules for ∀
and →
, which are named something like allI
and impI
. The standard
method is doing that for ∀
and →
; so something like standard+
might work (but could apply standard
too often).
In general it’s advisable to stay away from object logic counterparts of meta-logic connectors as much as possible, as Isar and the proof methods are tailored towards the meta-logic (and are to a large degree not specific to HOL). So avoid ∀
, →
, and ∧
where you can, as long as it doesn’t create really unreasonable situations. :smile: In definitions of predicates, for example, you still need them, because you need to construct booleans, which don’t exist on the meta-level, but statements like yours above should be made using the meta-logic and thus rather be treated as logical derivation rules instead of single logical statements.
In this case you would need ballI
not allI
because of forall _ in _. But yeah, don't use HOL quantifiers in theorems if you don't have to
Thanks!
Last updated: Dec 21 2024 at 16:20 UTC