internlm/Lean-Github huggingface dataset:
Theorem: Set.union_distrib_right
Proof state before:
case h
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
left✝ : x ∈ s.union u
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hu
Proof state after:
no goals
Theorem: Set.union_distrib_right
Proof state before:
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ (s.inter t).union u
Tactic:
left
Proof state after:
case h
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s.inter t
Theorem: Set.union_distrib_right
Proof state before:
case h
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s.inter t
Tactic:
constructor
Proof state after:
case h.left
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s

case h.right
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Theorem: Set.union_distrib_right
Proof state before:
case h.left
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s

case h.right
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Tactic:
exact hs
Proof state after:
case h.right
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Theorem: Set.union_distrib_right
Proof state before:
case h.right
α : Sort u_1
β : ?m.21318
γ : ?m.21321
s t u : Set α
x : α
x✝ : x ∈ (s.union u).inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Tactic:
exact ht
Proof state after:
no goals
Theorem: Set.inter_distrib_left
Proof state before:
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
⊢ s.inter (t.union u) = (s.inter t).union (s.inter u)
Tactic:
apply Set.ext
Proof state after:
case a
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
⊢ ∀ (x : α), x ∈ s.inter (t.union u) ↔ x ∈ (s.inter t).union (s.inter u)
Theorem: Set.inter_distrib_left
Proof state before:
case a
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
⊢ ∀ (x : α), x ∈ s.inter (t.union u) ↔ x ∈ (s.inter t).union (s.inter u)
Tactic:
intro x
Proof state after:
case a
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
⊢ x ∈ s.inter (t.union u) ↔ x ∈ (s.inter t).union (s.inter u)
Theorem: Set.inter_distrib_left
Proof state before:
case a
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
⊢ x ∈ s.inter (t.union u) ↔ x ∈ (s.inter t).union (s.inter u)
Tactic:
constructor
Proof state after:
case a.mp
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
⊢ x ∈ s.inter (t.union u) → x ∈ (s.inter t).union (s.inter u)

case a.mpr
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
⊢ x ∈ (s.inter t).union (s.inter u) → x ∈ s.inter (t.union u)
Theorem: Set.inter_distrib_left
Proof state before:
case a.mp
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
⊢ x ∈ s.inter (t.union u) → x ∈ (s.inter t).union (s.inter u)
Tactic:
open Or in intro
| ⟨hs, inl ht⟩ => left; constructor; exact hs; exact ht
| ⟨hs, inr hu⟩ => right; constructor; exact hs; exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_left
Proof state before:
case a.mp
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
⊢ x ∈ s.inter (t.union u) → x ∈ (s.inter t).union (s.inter u)
Tactic:
intro
| ⟨hs, inl ht⟩ => left; constructor; exact hs; exact ht
| ⟨hs, inr hu⟩ => right; constructor; exact hs; exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_left
Proof state before:
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ (s.inter t).union (s.inter u)
Tactic:
left
Proof state after:
case h
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s.inter t
Theorem: Set.inter_distrib_left
Proof state before:
case h
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s.inter t
Tactic:
constructor
Proof state after:
case h.left
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s

case h.right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Theorem: Set.inter_distrib_left
Proof state before:
case h.left
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s

case h.right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Tactic:
exact hs
Proof state after:
case h.right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Theorem: Set.inter_distrib_left
Proof state before:
case h.right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Tactic:
exact ht
Proof state after:
no goals
Theorem: Set.inter_distrib_left
Proof state before:
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ (s.inter t).union (s.inter u)
Tactic:
right
Proof state after:
case h
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s.inter u
Theorem: Set.inter_distrib_left
Proof state before:
case h
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s.inter u
Tactic:
constructor
Proof state after:
case h.left
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s

case h.right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_left
Proof state before:
case h.left
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s

case h.right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hs
Proof state after:
case h.right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_left
Proof state before:
case h.right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ s.inter (t.union u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_left
Proof state before:
case a.mpr
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
⊢ x ∈ (s.inter t).union (s.inter u) → x ∈ s.inter (t.union u)
Tactic:
open Or in intro
| inl ⟨hs, ht⟩ => constructor; exact hs; left; exact ht
| inr ⟨hs, hu⟩ => constructor; exact hs; right; exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_left
Proof state before:
case a.mpr
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
⊢ x ∈ (s.inter t).union (s.inter u) → x ∈ s.inter (t.union u)
Tactic:
intro
| inl ⟨hs, ht⟩ => constructor; exact hs; left; exact ht
| inr ⟨hs, hu⟩ => constructor; exact hs; right; exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_left
Proof state before:
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s.inter (t.union u)
Tactic:
constructor
Proof state after:
case left
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s

case right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t.union u
Theorem: Set.inter_distrib_left
Proof state before:
case left
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ s

case right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t.union u
Tactic:
exact hs
Proof state after:
case right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t.union u
Theorem: Set.inter_distrib_left
Proof state before:
case right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t.union u
Tactic:
left
Proof state after:
case right.h
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Theorem: Set.inter_distrib_left
Proof state before:
case right.h
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
ht : x ∈ t
⊢ x ∈ t
Tactic:
exact ht
Proof state after:
no goals
Theorem: Set.inter_distrib_left
Proof state before:
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s.inter (t.union u)
Tactic:
constructor
Proof state after:
case left
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s

case right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ t.union u
Theorem: Set.inter_distrib_left
Proof state before:
case left
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s

case right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ t.union u
Tactic:
exact hs
Proof state after:
case right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ t.union u
Theorem: Set.inter_distrib_left
Proof state before:
case right
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ t.union u
Tactic:
right
Proof state after:
case right.h
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_left
Proof state before:
case right.h
α : Sort u_1
β : ?m.21867
γ : ?m.21870
s t u : Set α
x : α
x✝ : x ∈ (s.inter t).union (s.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_right
Proof state before:
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
⊢ (s.union t).inter u = (s.inter u).union (t.inter u)
Tactic:
apply Set.ext
Proof state after:
case a
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
⊢ ∀ (x : α), x ∈ (s.union t).inter u ↔ x ∈ (s.inter u).union (t.inter u)
Theorem: Set.inter_distrib_right
Proof state before:
case a
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
⊢ ∀ (x : α), x ∈ (s.union t).inter u ↔ x ∈ (s.inter u).union (t.inter u)
Tactic:
intro x
Proof state after:
case a
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
⊢ x ∈ (s.union t).inter u ↔ x ∈ (s.inter u).union (t.inter u)
Theorem: Set.inter_distrib_right
Proof state before:
case a
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
⊢ x ∈ (s.union t).inter u ↔ x ∈ (s.inter u).union (t.inter u)
Tactic:
constructor
Proof state after:
case a.mp
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
⊢ x ∈ (s.union t).inter u → x ∈ (s.inter u).union (t.inter u)

case a.mpr
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
⊢ x ∈ (s.inter u).union (t.inter u) → x ∈ (s.union t).inter u
Theorem: Set.inter_distrib_right
Proof state before:
case a.mp
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
⊢ x ∈ (s.union t).inter u → x ∈ (s.inter u).union (t.inter u)
Tactic:
open Or in intro
| ⟨inl hs, hu⟩ => left; constructor; exact hs; exact hu
| ⟨inr ht, hu⟩ => right; constructor; exact ht; exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_right
Proof state before:
case a.mp
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
⊢ x ∈ (s.union t).inter u → x ∈ (s.inter u).union (t.inter u)
Tactic:
intro
| ⟨inl hs, hu⟩ => left; constructor; exact hs; exact hu
| ⟨inr ht, hu⟩ => right; constructor; exact ht; exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_right
Proof state before:
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ (s.inter u).union (t.inter u)
Tactic:
left
Proof state after:
case h
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s.inter u
Theorem: Set.inter_distrib_right
Proof state before:
case h
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s.inter u
Tactic:
constructor
Proof state after:
case h.left
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s

case h.right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case h.left
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s

case h.right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hs
Proof state after:
case h.right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case h.right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_right
Proof state before:
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ (s.inter u).union (t.inter u)
Tactic:
right
Proof state after:
case h
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ t.inter u
Theorem: Set.inter_distrib_right
Proof state before:
case h
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ t.inter u
Tactic:
constructor
Proof state after:
case h.left
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ t

case h.right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case h.left
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ t

case h.right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact ht
Proof state after:
case h.right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case h.right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.union t).inter u
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_right
Proof state before:
case a.mpr
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
⊢ x ∈ (s.inter u).union (t.inter u) → x ∈ (s.union t).inter u
Tactic:
open Or in intro
| inl ⟨hs, hu⟩ => constructor; left; exact hs; exact hu
| inr ⟨ht, hu⟩ => constructor; right; exact ht; exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_right
Proof state before:
case a.mpr
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
⊢ x ∈ (s.inter u).union (t.inter u) → x ∈ (s.union t).inter u
Tactic:
intro
| inl ⟨hs, hu⟩ => constructor; left; exact hs; exact hu
| inr ⟨ht, hu⟩ => constructor; right; exact ht; exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_right
Proof state before:
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ (s.union t).inter u
Tactic:
constructor
Proof state after:
case left
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s.union t

case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case left
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s.union t

case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Tactic:
left
Proof state after:
case left.h
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s

case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case left.h
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ s

case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hs
Proof state after:
case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
hs : x ∈ s
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hu
Proof state after:
no goals
Theorem: Set.inter_distrib_right
Proof state before:
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ (s.union t).inter u
Tactic:
constructor
Proof state after:
case left
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ s.union t

case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case left
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ s.union t

case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Tactic:
right
Proof state after:
case left.h
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ t

case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case left.h
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ t

case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact ht
Proof state after:
case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Theorem: Set.inter_distrib_right
Proof state before:
case right
α : Sort u_1
β : ?m.22335
γ : ?m.22338
s t u : Set α
x : α
x✝ : x ∈ (s.inter u).union (t.inter u)
ht : x ∈ t
hu : x ∈ u
⊢ x ∈ u
Tactic:
exact hu
Proof state after:
no goals
Theorem: Fin.specFun
Proof state before:
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝ : 0 < n ^ 0
⊢ ⟨0, isLt✝⟩.decodeFun = x ↔ encodeFun x = ⟨0, isLt✝⟩
Tactic:
constructor
Proof state after:
case mp
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝ : 0 < n ^ 0
⊢ ⟨0, isLt✝⟩.decodeFun = x → encodeFun x = ⟨0, isLt✝⟩

case mpr
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝ : 0 < n ^ 0
⊢ encodeFun x = ⟨0, isLt✝⟩ → ⟨0, isLt✝⟩.decodeFun = x
Theorem: Fin.specFun
Proof state before:
case mp
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝ : 0 < n ^ 0
⊢ ⟨0, isLt✝⟩.decodeFun = x → encodeFun x = ⟨0, isLt✝⟩
Tactic:
intro | rfl => rfl
Proof state after:
no goals
Theorem: Fin.specFun
Proof state before:
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝ : 0 < n ^ 0
x✝ : ⟨0, isLt✝⟩.decodeFun = x
⊢ encodeFun ⟨0, isLt✝⟩.decodeFun = ⟨0, isLt✝⟩
Tactic:
rfl
Proof state after:
no goals
Theorem: Fin.specFun
Proof state before:
case mpr
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝ : 0 < n ^ 0
⊢ encodeFun x = ⟨0, isLt✝⟩ → ⟨0, isLt✝⟩.decodeFun = x
Tactic:
intro
Proof state after:
case mpr
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝ : 0 < n ^ 0
a✝ : encodeFun x = ⟨0, isLt✝⟩
⊢ ⟨0, isLt✝⟩.decodeFun = x
Theorem: Fin.specFun
Proof state before:
case mpr
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝ : 0 < n ^ 0
a✝ : encodeFun x = ⟨0, isLt✝⟩
⊢ ⟨0, isLt✝⟩.decodeFun = x
Tactic:
funext ⟨_,_⟩
Proof state after:
case mpr.h
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝¹ : 0 < n ^ 0
a✝ : encodeFun x = ⟨0, isLt✝¹⟩
val✝ : Nat
isLt✝ : val✝ < 0
⊢ ⟨0, isLt✝¹⟩.decodeFun ⟨val✝, isLt✝⟩ = x ⟨val✝, isLt✝⟩
Theorem: Fin.specFun
Proof state before:
case mpr.h
n : Nat
k : Fin (n ^ 0)
x : Fin 0 → Fin n
isLt✝¹ : 0 < n ^ 0
a✝ : encodeFun x = ⟨0, isLt✝¹⟩
val✝ : Nat
isLt✝ : val✝ < 0
⊢ ⟨0, isLt✝¹⟩.decodeFun ⟨val✝, isLt✝⟩ = x ⟨val✝, isLt✝⟩
Tactic:
contradiction
Proof state after:
no goals
Theorem: Fin.specFun
Proof state before:
case succ
n m : Nat
ih : ∀ (k : Fin (n ^ m)) (x : Fin m → Fin n), k.decodeFun = x ↔ encodeFun x = k
k : Fin (n ^ (m + 1))
x : Fin (m + 1) → Fin n
⊢ k.decodeFun = x ↔ encodeFun x = k
Tactic:
have ih1 : decodeFun (encodeFun (fun k => x (succ k))) = fun k => x (succ k) := by rw [ih]
Proof state after:
case succ
n m : Nat
ih : ∀ (k : Fin (n ^ m)) (x : Fin m → Fin n), k.decodeFun = x ↔ encodeFun x = k
k : Fin (n ^ (m + 1))
x : Fin (m + 1) → Fin n
ih1 : (encodeFun fun k => x k.succ).decodeFun = fun k => x k.succ
⊢ k.decodeFun = x ↔ encodeFun x = k
Theorem: Fin.specFun
Proof state before:
n m : Nat
ih : ∀ (k : Fin (n ^ m)) (x : Fin m → Fin n), k.decodeFun = x ↔ encodeFun x = k
k : Fin (n ^ (m + 1))
x : Fin (m + 1) → Fin n
⊢ (encodeFun fun k => x k.succ).decodeFun = fun k => x k.succ
Tactic:
rw [ih]
Proof state after:
no goals
Theorem: Fin.specFun
Proof state before:
n m : Nat
ih : ∀ (k : Fin (n ^ m)) (x : Fin m → Fin n), k.decodeFun = x ↔ encodeFun x = k
k✝ : Fin (n ^ (m + 1))
x : Fin (m + 1) → Fin n
ih1 : (encodeFun fun k => x k.succ).decodeFun = fun k => x k.succ
k : Nat
hk : k < n ^ (m + 1)
⊢ ⟨k, hk⟩.decodeFun = x ↔ encodeFun x = ⟨k, hk⟩
Tactic:
have hnpos : n > 0 := by
  apply Nat.pos_of_nonzero
  intro h
  rw [h] at hk
  contradiction
Proof state after:
n m : Nat
ih : ∀ (k : Fin (n ^ m)) (x : Fin m → Fin n), k.decodeFun = x ↔ encodeFun x = k
k✝ : Fin (n ^ (m + 1))
x : Fin (m + 1) → Fin n
ih1 : (encodeFun fun k => x k.succ).decodeFun = fun k => x k.succ
k : Nat
hk : k < n ^ (m + 1)
hnpos : n > 0
⊢ ⟨k, hk⟩.decodeFun = x ↔ encodeFun x = ⟨k, hk⟩