aboutsummaryrefslogtreecommitdiff
path: root/mathcomp/solvable/burnside_app.v
diff options
context:
space:
mode:
authorGeorges Gonthier2019-02-27 19:07:29 +0100
committerCyril Cohen2019-04-01 17:42:28 +0200
commitc2c3ceae8a2eabed33028bfff306c5664d0b42f2 (patch)
treef2ad780c73b919e0d64162ac02ab89918168d73a /mathcomp/solvable/burnside_app.v
parentcd958350ffb6836a4e9e02716fc19b1a1d1177cd (diff)
Making {fun ...} structural and extending it to dependent functions
Construct `finfun_of` directly from a bespoke indexed inductive type, which both makes it structurally positive (and therefore usable as a container in an `Inductive` definition), and accommodates naturally dependent functions. This is still WIP, because this PR exposed a serious shortcoming of the Coq unification algorithm’s implantation of Miller patterns. This bug defeats the inference of `Canonical` structures for `{ffun S -> T}` when the instances are defined in the dependent case! This causes unmanageable regressions starting in `matrix.v`, so I have not been able to check for any impact past that. I’m pushing this commit so that the Coq issue may be addressed. Made `fun_of_fin` structurally decreasing: Changed the primitive accessor of `finfun_of` from `tfgraph` to the `Funclass` coercion `fun_of_fin`. This will make it possible to define recursive functions on inductive types built using finite functions. While`tfgraph` is still useful to transport the tuple canonical structures to `finfun_of`, it is no longer central to the theory so its role has been reduced.
Diffstat (limited to 'mathcomp/solvable/burnside_app.v')
-rw-r--r--mathcomp/solvable/burnside_app.v6
1 files changed, 3 insertions, 3 deletions
diff --git a/mathcomp/solvable/burnside_app.v b/mathcomp/solvable/burnside_app.v
index 10cbbaa..34c1c7c 100644
--- a/mathcomp/solvable/burnside_app.v
+++ b/mathcomp/solvable/burnside_app.v
@@ -686,10 +686,10 @@ move=> p; rewrite inE.
by do ?case/orP; move/eqP=> <- a; rewrite !(permM, permE); case: a; do 6?case.
Qed.
-Definition sop (p : {perm cube}) : seq cube := val (val (val p)).
+Definition sop (p : {perm cube}) : seq cube := fgraph (val p).
Lemma sop_inj : injective sop.
-Proof. by do 2!apply: (inj_comp val_inj); apply: val_inj. Qed.
+Proof. by move=> p1 p2 /val_inj/(can_inj fgraphK)/val_inj. Qed.
Definition prod_tuple (t1 t2 : seq cube) :=
map (fun n : 'I_6 => nth F0 t2 n) t1.
@@ -700,7 +700,7 @@ Proof. by move=> x n0; rewrite -pvalE unlock enum_rank_ord (tnth_nth F0). Qed.
Lemma prod_t_correct : forall (x y : {perm cube}) (i : cube),
(x * y) i = nth F0 (prod_tuple (sop x) (sop y)) i.
Proof.
-move=> x y i; rewrite permM -!sop_spec (nth_map F0) // size_tuple /=.
+move=> x y i; rewrite permM -!sop_spec [RHS](nth_map F0) // size_tuple /=.
by rewrite card_ord ltn_ord.
Qed.