Set Primitive Projections.
Record mix := { a : nat ; b : a = a ; c : nat ; d : a = c ; e : nat ; f : nat }.
Ltac strip_args T ctor :=
lazymatch type of ctor with
| context[T]
=> match eval cbv beta in ctor with
| ?ctor _ => strip_args T ctor
| _ => ctor
end
end .
Ltac get_ctor T :=
let full_ctor := constr:(ltac :(let x := fresh in intro x; econstructor; apply
x) : T -> T) in
let ctor := constr:(fun x : T => ltac :(let v := strip_args T (full_ctor x) in
exact v)) in
lazymatch ctor with
| fun _ => ?ctor => ctor
end .
Ltac uncurry_domain f :=
lazymatch type of f with
| forall (a : ?A) (b : @ ?B a), _
=> uncurry_domain (fun ab : { a : A & B a } => f (projT1 ab) (projT2 ab))
| _ => eval cbv beta in f
end .
Ltac get_of_sigma T :=
let ctor := get_ctor T in
uncurry_domain ctor.
Ltac repeat_existT :=
lazymatch goal with
| [ |- sigT _ ] => simple refine (existT _ _ _); [ repeat_existT | shelve ]
| _ => shelve
end .
Ltac prove_to_of_sigma_goal of_sigma :=
let v := fresh "v" in
simple refine (exist _ _ (fun v => _ : id _ (of_sigma v) = v));
try unfold of_sigma;
[ intro v; destruct v; repeat_existT
| cbv beta;
repeat match goal with
| [ |- context[projT2 ?k] ]
=> let x := fresh "x" in
is_var k;
destruct k as [k x]; cbn [projT1 projT2]
end ;
unfold id; reflexivity ].
Ltac prove_to_of_sigma of_sigma :=
constr:(
ltac :(prove_to_of_sigma_goal of_sigma)
: { to_sigma : _ | forall v, id to_sigma (of_sigma v) = v }).
Ltac get_to_sigma_gen of_sigma :=
let v := prove_to_of_sigma of_sigma in
eval hnf in (proj1_sig v).
Ltac get_to_sigma T :=
let of_sigma := get_of_sigma T in
get_to_sigma_gen of_sigma.
Definition to_sigma := ltac :(let v := get_to_sigma mix in exact v).
(* Error:
In nested Ltac calls to " get_to_sigma " , " get_to_sigma_gen " ,
" prove_to_of_sigma " ,
" ( _ : { to_sigma : _ | forall v , id to_sigma ( of_sigma v ) = v } ) " ( with
of_sigma : = fun
ab : { _
: { _
: { ab : { _ : { a : nat & a = a } & nat } &
projT1 ( projT1 ab ) = projT2 ab } & nat } & nat } = >
{ |
a : = projT1 ( projT1 ( projT1 ( projT1 ( projT1 ab ) ) ) ) ;
b : = projT2 ( projT1 ( projT1 ( projT1 ( projT1 ab ) ) ) ) ;
c : = projT2 ( projT1 ( projT1 ( projT1 ab ) ) ) ;
d : = projT2 ( projT1 ( projT1 ab ) ) ;
e : = projT2 ( projT1 ab ) ;
f : = projT2 ab | } ) and " prove_to_of_sigma_goal " , last call failed .
Anomaly " Uncaught exception Not_found . " Please report at
http : / / coq . inria . fr / bugs / .
frame @ file " toplevel / coqtop . ml " , line 640 , characters 6 - 22
frame @ file " list . ml " , line 73 , characters 12 - 15
frame @ file " toplevel / vernac . ml " , line 344 , characters 2 - 13
frame @ file " toplevel / vernac . ml " , line 308 , characters 14 - 75
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " lib / flags . ml " , line 141 , characters 19 - 40
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " lib / flags . ml " , line 11 , characters 15 - 18
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " toplevel / vernac . ml " , line 167 , characters 6 - 16
frame @ file " toplevel / vernac . ml " , line 151 , characters 26 - 39
frame @ file " stm / stm . ml " , line 2365 , characters 2 - 35
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " stm / stm . ml " , line 2355 , characters 4 - 48
frame @ file " stm / stm . ml " , line 2321 , characters 4 - 100
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " stm / stm . ml " , line 832 , characters 6 - 10
frame @ file " stm / stm . ml " , line 2206 , characters 10 - 32
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " stm / stm . ml " , line 975 , characters 8 - 81
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " vernac / vernacentries . ml " , line 2216 , characters 10 - 389
frame @ file " lib / flags . ml " , line 141 , characters 19 - 40
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " lib / flags . ml " , line 11 , characters 15 - 18
frame @ file " vernac / command . ml " , line 150 , characters 4 - 56
frame @ file " interp / constrintern . ml " , line 2046 , characters 2 - 73
frame @ file " pretyping / pretyping . ml " , line 1194 , characters 19 - 77
frame @ file " pretyping / pretyping . ml " , line 1155 , characters 8 - 72
frame @ file " pretyping / pretyping . ml " , line 628 , characters 23 - 65
frame @ file " plugins / ltac / tacinterp . ml " , line 2095 , characters 21 - 61
frame @ file " proofs / pfedit . ml " , line 178 , characters 6 - 22
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " proofs / pfedit . ml " , line 174 , characters 8 - 36
frame @ file " proofs / proof . ml " , line 351 , characters 4 - 30
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " engine / proofview . ml " , line 1222 , characters 8 - 12
frame @ file " plugins / ltac / tacinterp . ml " , line 2020 , characters 19 - 36
frame @ file " plugins / ltac / tacinterp . ml " , line 618 , characters 4 - 70
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " plugins / ltac / tacinterp . ml " , line 214 , characters 6 - 9
frame @ file " pretyping / pretyping . ml " , line 1198 , characters 19 - 62
frame @ file " pretyping / pretyping . ml " , line 1155 , characters 8 - 72
raise @ unknown
frame @ file " pretyping / pretyping . ml " , line 628 , characters 23 - 65
frame @ file " plugins / ltac / tacinterp . ml " , line 2095 , characters 21 - 61
frame @ file " proofs / pfedit . ml " , line 178 , characters 6 - 22
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
frame @ file " proofs / pfedit . ml " , line 174 , characters 8 - 36
frame @ file " proofs / proof . ml " , line 351 , characters 4 - 30
raise @ file " lib / exninfo . ml " , line 63 , characters 8 - 15
*)
Messung V0.5 in Prozent C=100 H=98 G=98
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland