File: 2.6.0.md

package info (click to toggle)
agda 2.8.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 8,552 kB
  • sloc: haskell: 106,221; lisp: 3,882; yacc: 1,665; javascript: 599; perl: 15; makefile: 8
file content (849 lines) | stat: -rw-r--r-- 44,345 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
Release notes for Agda version 2.6.0
====================================

Highlights
----------

* Added support for [Cubical
  Agda](https://agda.readthedocs.io/en/v2.6.0/language/cubical.html)
  which adds new features such as univalence and higher inductive
  types to Agda.

* Added support for ML-style [automatic generalization of
  variables](https://agda.readthedocs.io/en/v2.6.0/language/generalization-of-declared-variables.html).

* Added a new sort ``Prop`` of [definitionally proof-irrelevant
  propositions](https://agda.readthedocs.io/en/v2.6.0/language/prop.html).

* The implementation of [instance
  search](https://agda.readthedocs.io/en/v2.6.0/language/instance-arguments.html)
  got a major overhaul and no longer supports overlapping instances
  (unless enabled by a flag).

Installation and infrastructure
-------------------------------

* Added support for GHC 8.6.4.

* Interface files for all builtin and primitive files are now
  re-generated each time Agda is installed.

Syntax
------

* Agda now supports implicit generalization of declared
  variables. Variables to be generalized can declared with the new
  keyword `variable`.  For example:

  ```agda
    postulate
      Con : Set

    variable
      Γ Δ θ : Con
  ```

  Declared variables are automatically generalized in type signatures,
  module telescopes and data type and record parameters and indices:

  ```agda
    postulate
      Sub : Con → Con → Set

      id  : Sub Γ Γ
   -- -- equivalent to
   -- id  : {Γ : Con} → Sub Γ Γ

      _∘_ : Sub Θ Δ → Sub Γ Θ → Sub Γ Δ
   -- -- equivalent to
   -- _∘_ : {Γ Δ Θ : Con} → Sub Θ Δ → Sub Γ Θ → Sub Γ Δ
  ```

  See the [user manual](https://agda.readthedocs.io/en/v2.6.0/language/generalization-of-declared-variables.html)
  for more details.

* Data type and record definitions separated from their type signatures can no
  longer repeat the types of the parameters, but can bind implicit parameters
  by name [Issue [#1886](https://github.com/agda/agda/issues/1886)].

  This is now allowed
  ```agda
    data D {a b} (A : Set a) (B : Set b) : Set (a ⊔ lsuc b)
    data D {b = b} A B where
      mkD : (A → Set b) → D A B
  ```
  but this is not
  ```agda
    data I (A : Set) : Set
    data I (A : Set) where
  ```

* The label used for named implicit arguments can now be different from the
  name of the bound variable [Issue [#952](https://github.com/agda/agda/issues/952)].

  Example,
  ```agda
    id₁ : {A = X : Set} → X → X
    id₁ x = x

    id₂ : ∀ {B = X} → X → X
    id₂ {B = X} x = id₁ {A = X} x

    test : Nat
    test = id₁ {A = Nat} 5 + id₂ {B = Nat} 6
  ```
  Only implicit and instance arguments can have a label and either or both of
  the label and bound variable can be `_`. Labeled bindings with a type
  signature can only bind a single variable. For instance, the type `Set` has
  to be repeated here:
  ```agda
    const : {A = X : Set} {B = Y : Set} → X → Y → X
    const x _ = x
  ```

* The rules for parsing of patterns have changed slightly [Issue
  [#3400](https://github.com/agda/agda/issues/3400)].

  Now projections are treated similarly to constructors: In a pattern
  name parts coming from projections can only be used as part of
  projections, constructors or pattern synonyms. They cannot be used
  as variables, or as part of the name of the defined value.

  Examples:

  * The following code used to be syntactically ambiguous, but is now
    parsed, because A can no longer be used as a variable:
    ```agda
    record R : Set₂ where
      field
        _A : Set₁

    open R

    r : R
    r A = Set
    ```

  * On the other hand the following code is no longer parsed:
    ```agda
    record R : Set₁ where
      field
        ⟨_+_⟩ : Set

    open R

    + : Set → Set
    + A = A
    ```


Type checking
-------------

* Agda now supports a cubical mode which adds new features from
  [Cubical Type Theory](https://arxiv.org/abs/1611.02108), including
  univalence and higher inductive types. Option `--cubical` enables
  the cubical mode, and cubical primitives are defined in the module
  `Agda.Primitive.Cubical`.  See the [user
  manual](https://agda.readthedocs.io/en/v2.6.0/language/cubical.html)
  for more info.

* Agda now supports the new sort ``Prop`` of [definitionally
  proof-irrelevant propositions](https://hal.inria.fr/hal-01859964).
  Option `--prop` enables the `Prop` universe but is off by default.
  Option `--no-prop` disables the `Prop` universe.  See the [user
  manual](https://agda.readthedocs.io/en/v2.6.0/language/prop.html)
  for more details.

  In the absense of `Prop`, the sort `Set` is the lowest sort, thus,
  the sort annotation `: Set` can be ommitted if the sort is
  constrained to be weakly below `Set`.  For instance:

  ```agda
  {-# OPTIONS --no-prop #-}

  data Wrap A : Set where
    wrap : A → Wrap A
  ```

  In contrast, when `--prop` is enabled the sort of `A` could be
  either `Set` or `Prop` so this code no longer typechecks.

* Agda now allows omitting absurd clauses in case one of the pattern
  variable inhabits an obviously empty type
  [Issue [#1086](https://github.com/agda/agda/issues/1086)].
  For example:
  ```agda
  f : Fin 1 → Nat
  f zero = 0
  -- f (suc ())   -- this clause is no longer required
  ```
  Absurd clauses are still required in case deep pattern matching is
  needed to expose the absurd variable, or if there are no non-absurd
  clauses.

  Due to the changes to the coverage checker required for this new
  feature, Agda will now sometimes construct a different case tree when
  there are multiple valid splitting orders. In some cases this may
  impact the constraints that Agda is able to solve (for example, see
  [#673](https://github.com/agda/agda-stdlib/pull/673) on the
  standard library).

* Since Agda 2.5.3, the hiding is considered part of the name in the
  insertion of implicit arguments.  Until Agda 2.5.2, the following
  code was rejected:
  ```agda
    test : {{X : Set}} {X : Set} → Set
    test {X = X} = X
  ```
  The rationale was that named argument `X` is given with the wrong hiding.
  The new rationale is that the hiding is considered part of the name,
  distinguishing `{{X}}` from `{X}`.
  This language change was accidential and has not been documented in
  the 2.5.3 release notes.

* Agda no longer allows case splitting on irrelevant arguments of
  record types (see Issue
  [#3056](https://github.com/agda/agda/issues/3056)).

* Metavariables in module telescopes are now sometimes frozen later
  [Issue [#1063](https://github.com/agda/agda/issues/1063)].

  Metavariables created in the types of module parameters used to be
  frozen right after the module's first mutual block had been
  type-checked (unless, perhaps, if the module itself was contained in
  a mutual block). Now they are instead frozen at the end of the
  module (with a similar caveat regarding an outer mutual block).

* When `--without-K` is enabled, Agda no longer allows datatypes with
  large indices. For example, the following definition of equality is
  now forbidden when `--without-K` is enabled:
  ```agda
    data _≡₀_ {ℓ} {A : Set ℓ} (x : A) : A → Set where
      refl : x ≡₀ x
  ```

* The termination checker now also looks for recursive calls in the type of definitions.
  This fixes an issue where Agda allowed very dependent types
  [Issue [#1556](https://github.com/agda/agda/issues/1556)].

  This change affects induction-induction, e.g.
  ```agda
    mutual
      data Cxt : Set where
        ε    :  Cxt
        _,_  :  (Γ : Cxt) (A : Ty Γ) → Cxt

      data Ty : (Γ : Cxt) → Set where
        u  :  ∀ Γ → Ty Γ
        Π  :  ∀ Γ (A : Ty Γ) (B : Ty (Γ , A)) → Ty Γ

    mutual
      f : Cxt → Cxt
      f ε        =  ε
      f (Γ , T)  =  (f Γ , g Γ T)

      g : ∀ Γ → Ty Γ → Ty (f Γ)
      g Γ (u .Γ)      =  u (f Γ)
      g Γ (Π .Γ A B)  =  Π (f Γ) (g Γ A) (g (Γ , A) B)

  ```
  The type of `g` contains a call `g Γ _ --> f Γ` which is now taken
  into account during termination checking.

Instance search
---------------

* Instance argument resolution now also applies when there are
  unconstrained metavariables in the type of the argument. For
  example, if there is a single instance `eqBool : Eq Bool` in scope,
  then an instance argument `{{eq : Eq _}}` will be solved to
  `eqBool`, setting the value of the metavariable `_` to `Bool` in the
  process.

* By default, Agda no longer allows overlapping instances. Two
  instances are defined to overlap if they could both solve the
  instance goal when given appropriate solutions for their recursive
  (instance) arguments. Agda used to choose between undecidable
  instances based on the result of recursive instance search, but this
  lead to an exponential slowdown in instance resolution. Overlapping
  instances can be enabled with the flag `--overlapping-instances`.

* Explicit arguments are no longer automatically turned into instance
  arguments for the purpose of recursive instance search. Instead,
  explicit arguments are left unresolved and will thus never be used
  for instance search.

  If an instance is declared which has explicit arguments, Agda will
  raise a warning that this instance will never be considered by
  instance search.

* Instance arguments that are already solved by conversion checking
  are no longer ignored by instance search. Thus the constructor of
  the unit type must now be explicitly be declared as an instance in
  order to be considered by instance search:
  ```agda
    record ⊤ : Set where
      instance constructor tt
  ```

* Instances are now (correctly) required to be in scope to be eligible
  (see Issue [#1913](https://github.com/agda/agda/issues/1913)
   and Issue [#2489](https://github.com/agda/agda/issues/2489)
  ).
  This means that you can no longer import instances from parameterised modules by
  ```agda
    import Some.Module Arg₁ Arg2
  ```
  without opening or naming the module.

Reflection
----------

* New TC primitive `noConstraints` [Issue
  [#2351](https://github.com/agda/agda/issues/2351)]:

  ```agda
    noConstraints : ∀ {a} {A : Set a} → TC A → TC A
  ```

  The computation `noConstraints m` fails if `m` gives rise to new,
  unsolved
  ["blocking"](https://github.com/agda/agda/blob/4900ef5fc61776381f3a5e9c94ef776375e9e1f1/src/full/Agda/TypeChecking/Monad/Constraints.hs#L160-L174)
  constraints.

* New TC primitive `runSpeculative` [Issue
  [#3346](https://github.com/agda/agda/issues/3346)]:

  ```
    runSpeculative : ∀ {a} {A : Set a} → TC (Σ A λ _ → Bool) → TC A
  ```

  The computation `runSpeculative m` runs `m` and either keeps the new
  TC state (if the second component is `true`) or resets to the old TC
  state (if it is `false`).


Interaction and error reporting
-------------------------------

* A new command `agda2-elaborate-give` (C-c C-m) normalizes a goal input
  (it respects the C-u prefixes), type checks, and inserts the normalized
  term into the goal.

* 'Solve constraints' (C-c C-s) now turns unsolved metavariables into new
  interaction holes (see Issue [#2273](https://github.com/agda/agda/issues/2273)).

* Out-of-scope identifiers are no longer prefixed by a '.' dot [Issue
  [#3127](https://github.com/agda/agda/issues/3127)].  This notation
  could be confused with dot patterns, postfix projections, and
  irrelevance. Now Agda will do its best to make up fresh names for
  out-of-scope identifiers that do not conflict with any existing
  names. In addition, these names are marked as "(out of scope)" when
  printing the context.

  The change affects the printing of terms, e.g. in error messages and
  interaction, and the parsing of out-of-scope variables for
  case splitting (`C-c C-c` in emacs).

* Shadowed local variables are now assigned fresh names in error
  messages and interactive goals [Issue
  [#572](https://github.com/agda/agda/issues/572)]. For example,
  consider the following piece of code:
  ```agda
    postulate P : Set -> Set

    test : (B : Set) -> P B -> P B
    test = λ p p -> {!!}
  ```
  When asking for the goal type, Agda will now print the following:
  ```
    Goal: P p₁
    ————————————————————————————————————————————————————————————
    p      : P p₁
    p = p₁ : Set  (not in scope)
  ```
  Shadowed top-level identifiers are printed using the qualified name,
  for example in
  ```agda
    module M where

      postulate A : Set

      test : Set → A
      test A = {!!}
  ```
  Agda will now show the goal type as
  ```
    Goal: M.A
    ————————————————————————————————————————————————————————————
    A : Set
  ```

* When case splitting (`C-c C-c` in emacs), Agda will now filter out
  impossible cases (i.e. ones where at least one of the variables
  could be replaced by an absurd pattern `()`). If all the clauses
  produced by a case split are impossible, Agda will not filter out
  any of them.

Pragmas and options
-------------------

* Consistency checking of options used.

  Agda now checks that options used in imported modules are consistent
  with each other, e.g. a module using `--safe`, `--without-K`,
  `--no-universe-polymorphism` or `--no-sized-types` may only import
  modules with the same option, and modules using `--cubical` or
  `--prop` must in turn use the same option. If an interface file has
  been generated using different options compared to the current ones,
  Agda will now re-typecheck the file.
  [Issue [#2487](https://github.com/agda/agda/issues/2487)].

* New option `--cubical` to enable Cubical Agda.

* New option `--prop` to enable the ``Prop`` sort, and `--no-prop` to
  disable it (default).

* New options `--guardedness` and `--no-guardedness` [Issue
  [#1209](https://github.com/agda/agda/issues/1209)].

  Constructor-based guarded corecursion is now only (meant to be)
  allowed if the `--guardedness` option is active. This option is
  active by default. The combination of constructor-based guarded
  corecursion and sized types is not allowed if `--safe` is used,
  and activating `--safe` turns off both `--guardedness` and
  `--sized-types` (because this combination is known to be
  inconsistent in the current implementation). If you want to use
  either constructor-based guarded corecursion or sized types in
  safe mode, then you can use `--safe --guardedness` or `--safe
  --sized-types` respectively (in this order).

  The option `--no-guardedness` turns off constructor-based guarded
  corecursion.

* Option `--irrelevant-projections` is now off by default and
  not considered `--safe` any longer.
  Reason: There are consistency issues that may be systemic
  [Issue [#2170](https://github.com/agda/agda/issues/2170)].

* New option `--no-syntactic-equality` disables the syntactic equality
  shortcut used by the conversion checker. This will slow down
  typechecking in most cases, but makes the performance more
  predictable and stable under minor changes.

* New option `--overlapping-instances` enables overlapping instances
  by performing recursive instance search during pruning of instance
  candidates (this used to be the default behaviour). Overlapping
  instances can be disabled with `--no-overlapping-instances`
  (default).

* Option (and experimental feature)
  `--guardedness-preserving-type-constructors`
  has been removed.
  [Issue [#3180](https://github.com/agda/agda/issues/3180)].

* Deprecated options `--sharing` and `--no-sharing` now raise an error.

* New primitive `primErase`. It takes a proof of equality and returns a proof of
  the same equality. `primErase eq` reduces to `refl` on the diagonal. `trustMe`
  is not a primitive anymore, it is implemented using `primErase`.

  The primitive is declared in `Agda.Builtin.Equality.Erase`.

* The `REWRITE` builtin is now bound to the builtin equality type from
  `Agda.Builtin.Equality` in `Agda.Builtin.Equality.Rewrite` [Issue
  [#3318](https://github.com/agda/agda/issues/3318)].

* New primitives `primCharToNatInjective` and `primStringToListInjective`
  internalising the fact that `primCharToNat` and `primStringtoList` are
  injective functions. They are respectively bound in `Agda.Builtin.Char.Properties`
  and `Agda.Builtin.String.Properties`.

* The option `--only-scope-checking` is now allowed together with `--safe`.

* The option `--ignore-interfaces` no longer ignores the interfaces of
  builtin and primitive modules. For experts, there is the option
  `--ignore-all-interfaces` which also rechecks builtin and primitive
  files.

* The following deprecated compiler pragmas have been removed:

  ```
    {-# COMPILED f e #-}
    {-# COMPILED_TYPE A T #-}
    {-# COMPILED_DATA A D C1 .. CN #-}
    {-# COMPILED_DECLARE_DATA #-}
    {-# COMPILED_EXPORT f g #-}
    {-# IMPORT M #-}
    {-# HASKELL code #-}
    {-# COMPILED_UHC f e #-}
    {-# COMPILED_DATA_UHC A D C1 .. CN #-}
    {-# IMPORT_UHC M #-}
    {-# COMPILED_JS f e #-}
  ```

  See the [user manual](https://agda.readthedocs.io/en/v2.6.0/language/foreign-function-interface.html)
  for how to use the `COMPILE` and `FOREIGN` pragmas that replaced these in Agda 2.5.

### New warnings

* A declaration of the form `f : A` without an accompanying definition
  is no longer an error, but instead raises a warning.

* A clause that has both an absurd pattern and a right-hand side is no
  longer an error, but instead raises a warning.

* An import statement for `M` that mentions names not exported by `M`
  (in either `using`, `hiding`, or `renaming`) is no longer an
  error. Instead, Agda will raise a warning and ignore the names.

* Pragma, primitive, module or import statements in a mutual block
  are no longer errors. Instead, Agda will raise a warning and ignore
  these statements.

### Pragmas and options concerning universes

* New pragma `{-# NO_UNIVERSE_CHECK #-}`.

  The pragma `{-# NO_UNIVERSE_CHECK #-}` can be put in front of a data
  or record type to disable universe consistency checking locally.
  Example:
  ```agda
    {-# NO_UNIVERSE_CHECK #-}
    data U : Set where
      el : Set → U
  ```
  Like the similar pragmas for disabling termination and positivity
  checking, `{-# NO_UNIVERSE_CHECK #-}` cannot be used with `--safe`.

* New builtin `SETOMEGA`.

  Agda's top sort `Setω` is now defined as a builtin in `Agda.Primitive`
  and can be renamed when importing that module.

* New option `--omega-in-omega`.

  The option `--omega-in-omega` enables the typing rule `Setω : Setω`.
  Example:
  ```agda
  {-# OPTIONS --omega-in-omega #-}
  open import Agda.Primitive

  data Type : Setω where
    el : ∀ {ℓ} → Set ℓ → Type
  ```
  Like `--type-in-type`, this makes Agda inconsistent. However, code
  written using `--omega-in-omega` is still compatible with normal
  universe-polymorphic code and can be used in such files.

Emacs mode
----------

* Jump-to-definition now works for record field names in record expressions
  and patterns. [Issue [#3120](https://github.com/agda/agda/issues/3120)]
  ```agda
    record R : Set₂ where
      field f : Set₁

    exp : R
    exp = record { f = Set }

    pat : R → R
    pat r@record { f = X } = record r { f = X }
  ```
  Jump-to-definition (`M-.` or middle-click) on any of these `f`s
  now jumps to the field declaration.

* Commas "ʻ،⸲⸴⹁⹉、︐︑﹐﹑,、" and semi-colons "؛⁏፤꛶;︔﹔⍮⸵;" added
  to the input mode.

* It is now possible to customise the highlighting of more text in
  pragmas [Issue [#2452](https://github.com/agda/agda/issues/2452)].

  Some text was already highlighted. Now there is a specific face for
  the remaining text (`agda2-highlight-pragma-face`).

LaTeX backend
-------------

* The code environment has two new options, `inline` and `inline*`.

  These options are for typesetting inline code. The implementation of
  these options is a bit of a hack. Only use these options for
  typesetting a single line of code without multiple consecutive
  whitespace characters (except at the beginning of the line).

  When the option `inline*` is used space (`\AgdaSpace{}`) is added at
  the end of the code, and when `inline` is used space is not added.

* Now highlighting commands for things like "this is an unsolved
  meta-variable" are applied on the outside of highlighting commands
  for things like "this is a postulate" [Issue
  [#2474](https://github.com/agda/agda/issues/2474)].

  Example: Instead of generating
  `\AgdaPostulate{\AgdaUnsolvedMeta{F}}` Agda now generates
  `\AgdaUnsolvedMeta{\AgdaPostulate{F}}`.

* The package `agda.sty` no longer selects any fonts, and no longer
  changes the input or font encodings [Issue
  [#3224](https://github.com/agda/agda/issues/3224)].

  The new behaviour is the same as the old behaviour with the options
  `nofontsetup` and `noinputencodingsetup`. These options have been
  removed.

  One reason for this change is that several persons have received
  complaints from reviewers because they have unwittingly used
  non-standard fonts in submitted papers. Another is that the `utf8x`
  option to `inputenc` is now deprecated.

  Note that Agda code is now less likely to typeset properly out of
  the box. See the documentation for some hints about what to do if
  this affects you.

* Some text was by default typeset in math mode when LuaLaTeX or
  XeLaTeX were used, and in text mode when pdfLaTeX was used. Now text
  mode is the default for all of these engines.

* Typesetting of pragmas should now work better [Issue
  [#2452](https://github.com/agda/agda/issues/2452)].

  The `\AgdaOption` command and `AgdaOption` colour have been replaced
  by `\AgdaPragma` and `AgdaPragma`. The `\AgdaPragma` command is used
  where `\AgdaOption` used to be used (for certain options), but also
  in other cases (for other options and certain other text in
  pragmas).

* There is no longer any special treatment of the character `-` [Issue
  [#2452](https://github.com/agda/agda/issues/2452)].

  This might, depending on things like what font your are using, mean
  that the token `--` is typeset like an en dash (–). However, this is
  not the case for at least one common monospace font (in at least one
  setting).

* The default value of `\AgdaEmptySkip` has been changed from
  `\baselineskip` to `\abovedisplayskip`. This could mean that less
  vertical space is used to render empty lines in code blocks.

HTML backend
------------

* New option `--html-highlight=[code,all,auto]`.

  The option `--html-highlight=code` makes the HTML-backend generate
  files with:

  0. No HTML footer/header
  1. Agda codes highlighted
  2. Non-Agda code parts as-is
  3. Output file extension as-is (i.e. `.lagda.md` becomes `.md`)
  4. For ReStructuredText, a `.. raw:: html\n` will be inserted
     before every code blocks

  This makes it possible to use an ordinary Markdown/ReStructuredText
  processor to render the generated HTML.

  This will affect all the files involved in one compilation, making
  pure Agda code files rendered without HTML footer/header as well.
  To use `code` with literate Agda files and `all` with pure Agda
  files, use `--html-highlight=auto`, which means auto-detection.

  The old and default behaviour is still `--html-highlight=all`.

List of all closed issues
-------------------------

For 2.6.0, the following issues have been closed
(see [bug tracker](https://github.com/agda/agda/issues)):

  -  [#572](https://github.com/agda/agda/issues/572): Shadowed identifiers should be preceded by a dot when printed
  -  [#723](https://github.com/agda/agda/issues/723): Instance search needs to know whether a meta must be a function type
  -  [#758](https://github.com/agda/agda/issues/758): No highlighting for syntax declarations
  -  [#887](https://github.com/agda/agda/issues/887): Case-split causes problems for coverage checker
  -  [#952](https://github.com/agda/agda/issues/952): Parse named implicit pi {x = y : A} -> B
  -  [#1003](https://github.com/agda/agda/issues/1003): No highlighting for ambiguous instance argument
  -  [#1063](https://github.com/agda/agda/issues/1063): Freeze metas in module telescope after checking the module?
  -  [#1086](https://github.com/agda/agda/issues/1086): Make absurd patterns not needed at toplevel
  -  [#1209](https://github.com/agda/agda/issues/1209): Guardedness checker inconsistency with copatterns
  -  [#1581](https://github.com/agda/agda/issues/1581): Fields of opened records sometimes highlighted, sometimes not
  -  [#1602](https://github.com/agda/agda/issues/1602): NonStrict arguments should be allowed to occur relevantly in the type
  -  [#1706](https://github.com/agda/agda/issues/1706): Feature request: ML-style forall-generalization
  -  [#1764](https://github.com/agda/agda/issues/1764): Type in type and universe polymorphism
  -  [#1886](https://github.com/agda/agda/issues/1886): Second copies of telescopes not checked?
  -  [#1909](https://github.com/agda/agda/issues/1909): parameters are not dropped from reflected pattern lambda
  -  [#1913](https://github.com/agda/agda/issues/1913): Names that are not in scope can sometimes be candidates for instance resolution
  -  [#1995](https://github.com/agda/agda/issues/1995): Correct names in goal types after multiple renaming imports.
  -  [#2044](https://github.com/agda/agda/issues/2044): Better diagnosis for failed instance search
  -  [#2089](https://github.com/agda/agda/issues/2089): ''No such module'' is a rude error message for private modules
  -  [#2153](https://github.com/agda/agda/issues/2153): PDF version of Language Documentation on readthedocs lacks most Unicode characters
  -  [#2273](https://github.com/agda/agda/issues/2273): C-c C-s should put new goals instead of underscores for unknown subterms
  -  [#2351](https://github.com/agda/agda/issues/2351): expose noConstraints to reflection framework
  -  [#2452](https://github.com/agda/agda/issues/2452): The LaTeX backend does not handle options very well
  -  [#2473](https://github.com/agda/agda/issues/2473): Don't reread the source code without checking that it is unchanged
  -  [#2487](https://github.com/agda/agda/issues/2487): Options used for different modules must be consistent with each other, and options used when loading an interface must be consistent with those used when the interface was created
  -  [#2489](https://github.com/agda/agda/issues/2489): Where clauses in functions leak instances to global instance search
  -  [#2490](https://github.com/agda/agda/issues/2490): possible non-terminating inference of instance arguments?
  -  [#2513](https://github.com/agda/agda/issues/2513): Extensible syntax for function space annotations
  -  [#2548](https://github.com/agda/agda/issues/2548): Move the "Old Reference Manual" to the current documentation
  -  [#2563](https://github.com/agda/agda/issues/2563): Improve documentation and error reporting related to instance resolution (especially unconstrained metavariables)
  -  [#2579](https://github.com/agda/agda/issues/2579): Import statements with module instantiation should not trigger an error message
  -  [#2618](https://github.com/agda/agda/issues/2618): Reflection and pattern-matching lambdas
  -  [#2670](https://github.com/agda/agda/issues/2670): Instance arguments and multi-sorted algebras
  -  [#2757](https://github.com/agda/agda/issues/2757): Proposal: split non-strict relevance into shape-irrelevance, parametricity, and runtime-irrelevance
  -  [#2760](https://github.com/agda/agda/issues/2760): Relax instance search restriction on unconstrained metas
  -  [#2774](https://github.com/agda/agda/issues/2774): Internal error with sized types
  -  [#2783](https://github.com/agda/agda/issues/2783): Make more primitive/builtin modules safe?
  -  [#2789](https://github.com/agda/agda/issues/2789): Narrow and broad options
  -  [#2791](https://github.com/agda/agda/issues/2791): More illtyped meta solutions
  -  [#2797](https://github.com/agda/agda/issues/2797): Relevance check missed for overloaded projection
  -  [#2833](https://github.com/agda/agda/issues/2833): Coverage checker splits on result too eagerly
  -  [#2837](https://github.com/agda/agda/issues/2837): The Emacs mode only handles LaTeX-based literate Agda
  -  [#2872](https://github.com/agda/agda/issues/2872): Case splitting adds a dot in front of pattern matches on Chars
  -  [#2880](https://github.com/agda/agda/issues/2880): Disallow FFI binding for defined functions when --safe is used
  -  [#2892](https://github.com/agda/agda/issues/2892): 'With' should also abstract over the type of stripped dot patterns
  -  [#2893](https://github.com/agda/agda/issues/2893): Display warnings also when an error is encountered
  -  [#2899](https://github.com/agda/agda/issues/2899): Add a warning for infix notations without corresponding fixity declaration
  -  [#2929](https://github.com/agda/agda/issues/2929): Turn "missing definition" into a warning
  -  [#2936](https://github.com/agda/agda/issues/2936): Sort warning flags alphabetically in user manual
  -  [#2939](https://github.com/agda/agda/issues/2939): make install-bin on a Mac can fail to install text-icu
  -  [#2964](https://github.com/agda/agda/issues/2964): Mismatch between order of matching in clauses and case tree; subject reduction broken
  -  [#2969](https://github.com/agda/agda/issues/2969): Module parameter is erased from dot pattern
  -  [#2979](https://github.com/agda/agda/issues/2979): Rewriting matching does not respect eta rules
  -  [#2993](https://github.com/agda/agda/issues/2993): Quadratic (failing) instance search
  -  [#3010](https://github.com/agda/agda/issues/3010): Field of opened record does not get highlighted
  -  [#3032](https://github.com/agda/agda/issues/3032): spurious meta in dot pattern
  -  [#3056](https://github.com/agda/agda/issues/3056): Matching on irrelevant variable of dependent record type should not be allowed
  -  [#3057](https://github.com/agda/agda/issues/3057): A module can export two definitions with the same name
  -  [#3068](https://github.com/agda/agda/issues/3068): Add option to turn off syntactic equality check
  -  [#3095](https://github.com/agda/agda/issues/3095): Would like to make hidden variable visible but it is created ambiguous
  -  [#3102](https://github.com/agda/agda/issues/3102): Performance regression: very slow reduction in the presence of many module parameters
  -  [#3114](https://github.com/agda/agda/issues/3114): Missing alpha-renaming when printing constraints
  -  [#3120](https://github.com/agda/agda/issues/3120): No tooltips for record field names in record expressions
  -  [#3122](https://github.com/agda/agda/issues/3122): Hidden record fields are not picked up from module in record expression
  -  [#3124](https://github.com/agda/agda/issues/3124): De Bruijn index in lhs checking error message
  -  [#3125](https://github.com/agda/agda/issues/3125): Internal error in InstanceArguments.hs:292
  -  [#3127](https://github.com/agda/agda/issues/3127): Notation for out-of-scope variables conflicts with notation for irrelevance
  -  [#3128](https://github.com/agda/agda/issues/3128): Sigma builtin not added to setup, agdai file missing.
  -  [#3130](https://github.com/agda/agda/issues/3130): Conflict between dot pattern and postfix projection
  -  [#3137](https://github.com/agda/agda/issues/3137): Preserve Markdown as-is when outputting HTML
  -  [#3138](https://github.com/agda/agda/issues/3138): Result splitter introduces pattern variable that conflicts with constructor
  -  [#3139](https://github.com/agda/agda/issues/3139): Internal error in parser
  -  [#3147](https://github.com/agda/agda/issues/3147): Non-linear as-patterns
  -  [#3152](https://github.com/agda/agda/issues/3152): `give` in a do-block inserts spurious parentheses
  -  [#3153](https://github.com/agda/agda/issues/3153): Type checker fails to infer missing signature of module parameter.
  -  [#3161](https://github.com/agda/agda/issues/3161): Case splitter produces end-of-comment
  -  [#3169](https://github.com/agda/agda/issues/3169): Doc for rewriting
  -  [#3170](https://github.com/agda/agda/issues/3170): UnicodeDeclare fails with pdflatex from TeX Live 2018
  -  [#3175](https://github.com/agda/agda/issues/3175): Instance resolution fails with defined method
  -  [#3176](https://github.com/agda/agda/issues/3176): Empty lambdas are sometimes considered definitionally equal, other times not
  -  [#3180](https://github.com/agda/agda/issues/3180): Remove feature `--guardedness-preserving-type-constructors`
  -  [#3188](https://github.com/agda/agda/issues/3188): Warnings disappear when fatal error is encountered
  -  [#3195](https://github.com/agda/agda/issues/3195): Internal error at Auto/Typecheck.hs:373
  -  [#3196](https://github.com/agda/agda/issues/3196): Turning MissingDefinition into a warning
  -  [#3200](https://github.com/agda/agda/issues/3200): Function marked as irrelevant when it isn't
  -  [#3201](https://github.com/agda/agda/issues/3201): [ warning ] AbsurdPatternRequiresNoRHS
  -  [#3205](https://github.com/agda/agda/issues/3205): [ cleanup + warning ] ModuleDoesntExport can be recovered from
  -  [#3224](https://github.com/agda/agda/issues/3224): Switch from utf8x to utf8? Make agda.sty easier to maintain?
  -  [#3235](https://github.com/agda/agda/issues/3235): Cannot pass backend flags via emacs variable `agda2-program-args`
  -  [#3247](https://github.com/agda/agda/issues/3247): Support cabal-install >= 2.4.1.0 in the Makefile
  -  [#3248](https://github.com/agda/agda/issues/3248): Max of two sizes less than i
  -  [#3253](https://github.com/agda/agda/issues/3253): [ fix ] ignore duplicate declarations of libraries
  -  [#3254](https://github.com/agda/agda/issues/3254): `cpphs` doesn't build with GHC 8.6.*
  -  [#3256](https://github.com/agda/agda/issues/3256): Internal error at src/full/Agda/TypeChecking/Reduce.hs:148
  -  [#3257](https://github.com/agda/agda/issues/3257): Anonymous top-level modules can have names with multiple components
  -  [#3258](https://github.com/agda/agda/issues/3258): Ordering the constructor names at Definition.
  -  [#3262](https://github.com/agda/agda/issues/3262): Suboptimal placement of "missing with-clauses" error
  -  [#3264](https://github.com/agda/agda/issues/3264): When refine leads to a termination error it should say so rather than "cannot refine"
  -  [#3268](https://github.com/agda/agda/issues/3268): [ haddock ] Fix haddock formatting
  -  [#3285](https://github.com/agda/agda/issues/3285): Internal error for syntax declaration
  -  [#3302](https://github.com/agda/agda/issues/3302): Multiple definitions called _ are sometimes allowed, sometimes not
  -  [#3307](https://github.com/agda/agda/issues/3307): `--no-unicode` bug: case splitting inside a pattern matching lambda still produces unicode arrows
  -  [#3309](https://github.com/agda/agda/issues/3309): Use of irrelevant arguments with copatterns and irrelevant fields
  -  [#3313](https://github.com/agda/agda/issues/3313): Add --html-highlight support for the HTML backend
  -  [#3315](https://github.com/agda/agda/issues/3315): The primErase primitive is not safe
  -  [#3318](https://github.com/agda/agda/issues/3318): Lots of primitives and builtins are not declared in the primitive/builtin modules
  -  [#3320](https://github.com/agda/agda/issues/3320): Extra indentation when code is hidden
  -  [#3323](https://github.com/agda/agda/issues/3323): Internal error with inconsistent irrelevance info between declaration and definition of data type
  -  [#3338](https://github.com/agda/agda/issues/3338): Missing Definitions not recognised in instance search
  -  [#3342](https://github.com/agda/agda/issues/3342): GHC panic on stack and GHC 7.10.3
  -  [#3344](https://github.com/agda/agda/issues/3344): Disable compilation with GHC 8.6.1
  -  [#3356](https://github.com/agda/agda/issues/3356): C-c C-s prints postfix projections by default
  -  [#3363](https://github.com/agda/agda/issues/3363): The wiki should support HTTPS
  -  [#3364](https://github.com/agda/agda/issues/3364): Funny scope error when trying to import as qualified
  -  [#3366](https://github.com/agda/agda/issues/3366): Add a command line flag to change the extension of the files generated by the HTML backend
  -  [#3368](https://github.com/agda/agda/issues/3368): Support GHC 8.6.2
  -  [#3370](https://github.com/agda/agda/issues/3370): [ fix ] < and > need to be in math mode in latex
  -  [#3371](https://github.com/agda/agda/issues/3371): Document common LaTeX backend pitfalls
  -  [#3372](https://github.com/agda/agda/issues/3372): Provide some simple LaTeX backend templates
  -  [#3373](https://github.com/agda/agda/issues/3373): Wrap HTML in `raw` directive when working with ReStructuredText
  -  [#3379](https://github.com/agda/agda/issues/3379): Adding a tutorial set in the readthedocs frontpage
  -  [#3380](https://github.com/agda/agda/issues/3380): Too much erasure in strict backends
  -  [#3394](https://github.com/agda/agda/issues/3394): Internal error in mutual block with unsolved implicit argument in termination checker
  -  [#3400](https://github.com/agda/agda/issues/3400): Obscure parse error with copattern and infix field
  -  [#3403](https://github.com/agda/agda/issues/3403): Internal error in Agda.TypeChecking.Rules.Term
  -  [#3404](https://github.com/agda/agda/issues/3404): Positivity checker marks postulates as constant in mutual block
  -  [#3407](https://github.com/agda/agda/issues/3407): Internal error at "src/full/Agda/TypeChecking/Reduce/Fast.hs:1338"
  -  [#3409](https://github.com/agda/agda/issues/3409): No error if mapping the empty type to non-empty Haskell type
  -  [#3410](https://github.com/agda/agda/issues/3410): ghc backend generates program that segfaults
  -  [#3419](https://github.com/agda/agda/issues/3419): Allow unconstrained instances & disallow overlapping instances
  -  [#3420](https://github.com/agda/agda/issues/3420): Inductive definitions live in a larger set --without-K
  -  [#3425](https://github.com/agda/agda/issues/3425): Internal error at src/full/Agda/Termination/Monad.hs:177
  -  [#3426](https://github.com/agda/agda/issues/3426): Termination checking false positive when using "where"
  -  [#3428](https://github.com/agda/agda/issues/3428): Another interal error in Substitute:72 when filling a hole
  -  [#3431](https://github.com/agda/agda/issues/3431): Rewrite rule doesn't fire during conversion checking
  -  [#3434](https://github.com/agda/agda/issues/3434): Regression related to instance resolution
  -  [#3435](https://github.com/agda/agda/issues/3435): Performance regression
  -  [#3439](https://github.com/agda/agda/issues/3439): Setω doesn’t respect --type-in-type
  -  [#3441](https://github.com/agda/agda/issues/3441): Generate Level expressions with fewer parentheses
  -  [#3442](https://github.com/agda/agda/issues/3442): Support GHC 8.6.3
  -  [#3443](https://github.com/agda/agda/issues/3443): "internal error" in Agda of December 7, 2018
  -  [#3444](https://github.com/agda/agda/issues/3444): `Setup.hs` is not generating the interface files
  -  [#3445](https://github.com/agda/agda/issues/3445): case splitting attempts to shadow constructor
  -  [#3451](https://github.com/agda/agda/issues/3451): The --no-sized-types option is broken
  -  [#3452](https://github.com/agda/agda/issues/3452): Case split on irrelevant argument goes through but is later rejected
  -  [#3454](https://github.com/agda/agda/issues/3454): Highlighting for incomplete pattern matching should be above highliting for non-exact split
  -  [#3456](https://github.com/agda/agda/issues/3456): [ new ] Injectivity of prim(NatToChar/StringToList)
  -  [#3461](https://github.com/agda/agda/issues/3461): Macro loop
  -  [#3463](https://github.com/agda/agda/issues/3463): Impossible to give certain instance arguments by name?
  -  [#3466](https://github.com/agda/agda/issues/3466): two definitionally equal terms are not equal
  -  [#3471](https://github.com/agda/agda/issues/3471): Can't install via cabal-install on current Haskell Platform
  -  [#3480](https://github.com/agda/agda/issues/3480): Parse error at EOF should be reported before EOF (especially if there is a long comment before EOF)
  -  [#3483](https://github.com/agda/agda/issues/3483): Internal error at TypeChecking/Monad/Signature.hs:732
  -  [#3485](https://github.com/agda/agda/issues/3485): [ warnings ] for empty primitive blocks
  -  [#3491](https://github.com/agda/agda/issues/3491): Internal error src/full/Agda/TypeChecking/Rules/LHS.hs:294 after pattern matching
  -  [#3498](https://github.com/agda/agda/issues/3498): Internal error in activateLoadedFileCache
  -  [#3501](https://github.com/agda/agda/issues/3501): Case split in let clause causes internal error
  -  [#3503](https://github.com/agda/agda/issues/3503): Internal error in BasicOps
  -  [#3514](https://github.com/agda/agda/issues/3514): Accidential language change in 2.5.3: hiding is now part of name when resolving hidden argument insertion
  -  [#3517](https://github.com/agda/agda/issues/3517): Option consistency checking bug
  -  [#3518](https://github.com/agda/agda/issues/3518): Performance regression
  -  [#3521](https://github.com/agda/agda/issues/3521): Documentation: fixes a plural issue in copatterns
  -  [#3526](https://github.com/agda/agda/issues/3526): Do not generate trivially impossible clause when case-splitting
  -  [#3533](https://github.com/agda/agda/issues/3533): [ fix #3526 ] Remove trivially impossible clauses from case-split
  -  [#3534](https://github.com/agda/agda/issues/3534): Problem finding higher-order instances
  -  [#3536](https://github.com/agda/agda/issues/3536): Patternmatching on coinductive record fields breaks
  -  [#3544](https://github.com/agda/agda/issues/3544): internal error @ TypeChecking/Forcing.hs:227
  -  [#3548](https://github.com/agda/agda/issues/3548): [ new ] Add support for compiling literate Org documents
  -  [#3554](https://github.com/agda/agda/issues/3554): Type checker explosion
  -  [#3561](https://github.com/agda/agda/issues/3561): fix typo: "FreBSD" => "FreeBSD"
  -  [#3566](https://github.com/agda/agda/issues/3566): Missing name when printing type of definition of a record
  -  [#3578](https://github.com/agda/agda/issues/3578): Pattern matching unifier normalizes too much
  -  [#3586](https://github.com/agda/agda/issues/3586): Internal error in ConcreteToAbstract.hs:2217
  -  [#3590](https://github.com/agda/agda/issues/3590): Superlinear time required for simple code
  -  [#3597](https://github.com/agda/agda/issues/3597): Agda loops on simple code with a record and a hole
  -  [#3600](https://github.com/agda/agda/issues/3600): Size solver complains, explicit sizes work
  -  [#3610](https://github.com/agda/agda/issues/3610): Support GHC 8.6.4
  -  [#3621](https://github.com/agda/agda/issues/3621): performance problem
  -  [#3631](https://github.com/agda/agda/issues/3631): Performance with --no-universe-polymorphism
  -  [#3638](https://github.com/agda/agda/issues/3638): Rewrite rules do not fire in goal normalization in parametrized module
  -  [#3639](https://github.com/agda/agda/issues/3639): Argument to function created by tactic is lost
  -  [#3640](https://github.com/agda/agda/issues/3640): Polarity: Size index check crashes due to wrong parameter number calculation
  -  [#3641](https://github.com/agda/agda/issues/3641): Remove old compiler pragmas
  -  [#3648](https://github.com/agda/agda/issues/3648): Agda could fail to build if a .agda-lib file exists in a parent directory
  -  [#3651](https://github.com/agda/agda/issues/3651): internal error ghc backend
  -  [#3657](https://github.com/agda/agda/issues/3657): Disable compilation with Windows and GHC 8.6.3
  -  [#3678](https://github.com/agda/agda/issues/3678): Two out-of-scope variables are given the same name
  -  [#3687](https://github.com/agda/agda/issues/3687): Show module contents (C-c C-o) prints garbled names in clause