Zulip Chat Archive

Stream: general

Topic: distributing intersection over intersection


Bernd Losert (Jan 12 2022 at 00:20):

lemma foobar (A B C : set X) : A  B  C = (A  C)  (B  C) :=
  calc
    A  B  C = A  B  (C  C) : by rw  (set.inter_self C)
    ... = (A  C)  (B  C) : by simp -- Doesn't work.

Is there a special tactic for proving this sort of thing?

Bernd Losert (Jan 12 2022 at 00:25):

https://leanprover-community.github.io/mathlib_docs/order/lattice.html#inf_inf_inf_comm <-- This looks like it could help.

Bernd Losert (Jan 12 2022 at 00:25):

Doesn't work though:

error: rewrite tactic failed, did not find instance of the pattern in the target expression
  A  B  (C  C)

Alex J. Best (Jan 12 2022 at 00:27):

One trick for this sort of thing is to apply tactic#ext and simp to convert it into a first order logic problem, then hit it with a logic solver like tactic#tauto

lemma foobar {X : Type*} (A B C : set X) : A  B  C = (A  C)  (B  C) :=
by { ext, simp, tauto }

Bernd Losert (Jan 12 2022 at 00:30):

Nice trick.


Last updated: Dec 20 2023 at 11:08 UTC