From 80b248c5be656dd2b3ba753871aeeb7102e92ff8 Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Thu, 30 Oct 2025 13:11:43 +0100 Subject: prove supp of preterms --- Nominal/Instances/Abstraction.lean | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) (limited to 'Nominal/Instances/Abstraction.lean') diff --git a/Nominal/Instances/Abstraction.lean b/Nominal/Instances/Abstraction.lean index ba2fbf9..052f604 100644 --- a/Nominal/Instances/Abstraction.lean +++ b/Nominal/Instances/Abstraction.lean @@ -46,31 +46,19 @@ instance : PermSet ๐”ธ (NameAbstraction' ๐”ธ X) where one_smul := by intro _; ext <;> simp [one_smul] mul_smul := by intro _ _ _; ext <;> simp [mul_smul] -private def ofPair (x : (๐”ธ ร— X)) : NameAbstraction' ๐”ธ X := โŸจx.fst, x.sndโŸฉ - -private lemma ofPair_injective : Function.Injective (ofPair ๐”ธ X) := by - intro x y hxy - simp only [ofPair, mk.injEq] at hxy - ext - ยท exact hxy.left - ยท exact hxy.right - -private lemma ofPair_surjective : Function.Surjective (ofPair ๐”ธ X) := by - intro x - use โŸจx.atom, x.bodyโŸฉ - simp [ofPair] - -private lemma ofPair_equivariant : Function.Equivariant ๐”ธ (ofPair ๐”ธ X) := by - intro x ฯ€ - ext <;> simp [ofPair] +private def equiv : EquivariantEquiv ๐”ธ (NameAbstraction' ๐”ธ X) (๐”ธ ร— X) := + { toFun x := โŸจx.atom, x.bodyโŸฉ + invFun x := โŸจx.fst, x.sndโŸฉ + toFun_equivariant := by intro x ฯ€; ext <;> simp + } instance : NominalSet ๐”ธ (NameAbstraction' ๐”ธ X) := - NominalSet.fromEquivariantSurjective ๐”ธ (ofPair ๐”ธ X) (ofPair_equivariant ๐”ธ X) (ofPair_surjective ๐”ธ X) + NominalSet.fromEquivariantEquiv ๐”ธ (equiv ๐”ธ X) @[simp] lemma supp {x : NameAbstraction' ๐”ธ X} : NominalSet.supp ๐”ธ x = NominalSet.supp ๐”ธ x.body โˆช {x.atom} := by - have h : NominalSet.supp ๐”ธ (ofPair ๐”ธ X (x.atom, x.body)) = NominalSet.supp ๐”ธ (x.atom, x.body) := - Function.Equivariant.supp_eq_if_inj ๐”ธ (ofPair_equivariant ๐”ธ X) (ofPair_injective ๐”ธ X) - simp only [Prod.supp, NominalSet.supp_atom, ofPair] at h + have h : NominalSet.supp ๐”ธ x = NominalSet.supp ๐”ธ (x.atom, x.body) := + EquivariantEquiv.supp_eq ๐”ธ (equiv ๐”ธ X) x + simp only [Prod.supp, NominalSet.supp_atom] at h rwa [Set.union_comm] at h @[simp] lemma fresh {a : ๐”ธ} {x : NameAbstraction' ๐”ธ X} : a # x โ†” a โ‰  x.atom โˆง a # x.body := by -- cgit v1.3.1