[isabelle-dev] lex_prod changes

Bertram Felgenhauer bertram.felgenhauer at googlemail.com
Thu Aug 20 23:46:28 CEST 2020


Bertram Felgenhauer wrote:
> Apparently, R1 <*lex*> R2 was changed to artificially impose
> irreflexivity on R1 (checking  a ~= a'  in addition to  a R1 a').

Is there a chance to revert this?

Instead, one could define a relation version of `mk_less`, say[*]

  definition less_rel where
    "less_rel R = {(x,y) |x y. (x,y) ∈ R ∧ (y,x) ∉ R}"

and use

  less_rel R1 <*lex*> R2

instead of the new definition of <*lex*>. That looks like a tolerable
overhead to me.

Note that `less_rel` is defined slightly differently from the new
<*lex*> check, but we can prove equivalence for antisymmetric
relations:

  lemma less_rel_antisym:
    "antisym R ⟹ ((x,y) ∈ less_rel R ⟷ x ≠ y ∧ (x,y) ∈ R)"
    by (auto simp: less_rel_def antisym_def)

But a lot hinges on why the change was made in the first place.

Cheers,

Bertram

[*] This should probably be an inductive set. And there may be better
names, like `strict_part`.


More information about the isabelle-dev mailing list