From 9ccba1756131e195855dc068253d2376f2a416e3 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 30 Mar 2018 21:26:59 +0200 Subject: [PATCH] Tweak ShowImpliedFilters some more Now for "May imply with", we also hide implications which already follow from the other filter. For example, before: gap> ShowImpliedFilters(IsFinitelyGeneratedGroup); ... +IsNilpotentGroup IsSupersolvableGroup IsSolvableGroup IsPolycyclicGroup IsNilpotentByFinite After this change: gap> ShowImpliedFilters(IsFinitelyGeneratedGroup); ... +IsNilpotentGroup IsPolycyclicGroup Indeed, IsNilpotentGroup already implies IsSolvableGroup and IsNilpotentByFinite on its own. --- lib/methwhy.g | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/methwhy.g b/lib/methwhy.g index 37d6e01548..779bcbe398 100644 --- a/lib/methwhy.g +++ b/lib/methwhy.g @@ -301,19 +301,30 @@ BIND_GLOBAL("ShowImpliedFilters",function(filter) flags:=FLAGS_FILTER(filter); implied := WITH_IMPS_FLAGS(flags); atomic readonly IMPLICATIONS_SIMPLE do + # select all implications which involved in the requirements f:=Filtered(IMPLICATIONS_SIMPLE, x->IS_SUBSET_FLAGS(x[2],flags)); Append(f, Filtered(IMPLICATIONS_COMPOSED, x->IS_SUBSET_FLAGS(x[2],flags))); - extra_implications:=[]; - for implication in f do - diff_reqs:=SUB_FLAGS(implication[2],flags); # the additional requirements - diff_impls:=SUB_FLAGS(implication[1],implied); # the additional implications - diff_impls:=SUB_FLAGS(diff_impls,diff_reqs); - if SIZE_FLAGS(diff_reqs) > 0 and SIZE_FLAGS(diff_impls) > 0 then - Add(extra_implications, [diff_reqs, diff_impls]); - fi; - od; od; # end atomic + extra_implications:=[]; + for implication in f do + # the additional requirements + diff_reqs:=SUB_FLAGS(implication[2],flags); + if SIZE_FLAGS(diff_reqs) = 0 then + Assert(0, IS_SUBSET_FLAGS(implied,implication[1])); + continue; + fi; + # the combined implications... + diff_impls:=implication[1]; + # ... minus those implications that already follow from + diff_impls:=SUB_FLAGS(diff_impls,implied); + # ... minus those implications that already follow from diff_reqs + diff_impls:=SUB_FLAGS(diff_impls,WITH_IMPS_FLAGS(diff_reqs)); + if SIZE_FLAGS(diff_impls) > 0 then + Add(extra_implications, [diff_reqs, diff_impls]); + fi; + od; + # remove "obvious" implications if IS_ELEMENTARY_FILTER(filter) then implied := SUB_FLAGS(implied, flags);